
リレーホストへのメール中継を許可するPostfixが欲しいのですが
a) 送信者ドメインが許可されている
および次のいずれか:
b) 送信者が認証されている c) クライアントにIPホワイトリストエントリがある
これまでの私のアプローチは次のとおりです。
relayhost = [RELAYHOST]:25
smtpd_reject_unlisted_sender = yes
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/restricted_senders
smtpd_recipient_restrictions =
check_client_access cidr:/etc/postfix/ip_whitelist,
permit_sasl_authenticated,
reject_unauth_destination
制限付き送信者には以下が含まれます
example.com OK
ip_whitelistには以下が含まれます
192.168.1.3 OK
認証されたクライアントまたは IP ホワイトリストに登録されたクライアントからのメールの送信は機能しますが、送信者のドメイン制限は機能しません。認証または client_access が一致すると、送信者の制限はチェックされなくなるようです。
答え1
なぜこれが機能しないのでしょうか?
デフォルトではすべてが許可されます。
制限のリストを、コンマまたは空白で区切って指定します。長い行を続けるには、次の行を空白で始めます。制限は指定された順序で適用され、最初に一致した制限が優先されます。
そして
check_sender_access type:table
指定されたものを検索アクセス(5)
MAIL FROM
アドレス、ドメイン、親ドメイン、または のデータベースを検索しlocalpart@
、対応するアクションを実行します。
したがって、設定では最初example.com
にから許可し/etc/postfix/restricted_senders
、その後に他のすべてを許可します。smtpd_reject_unlisted_sender
それは変わりません。なぜなら:
アドレスが「不明」とみなされるのは、1) 次の場合です。仮想(5)別名または正統派(5)マッピング、および2) アドレスがアドレスクラスに対して有効ではない。クラスベースのアドレス検証の定義については、アドレスクラスREADME。
例えば、ドメインexample.org
は地元、仮想エイリアス、仮想メールボックスまたはリレードメインクラスなので、デフォルトのドメインクラスこのクラスには、宛先テーブルも有効な受信者テーブルもありません。どうやら、他のドメイン クラスに属していないアドレスはすべて、このアドレス クラスで有効です。これは論理的であり、ローカル システムはリモート システムでどのアドレスが使用可能かを知ることができません。
smtpd_sender_restrictions
これには十分である
忘れてくださいsmtpd_reject_unlisted_sender
これは単独でも実行できますsmtpd_sender_restrictions
。
最も簡単な構成は次のようになります。
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/restricted_senders, reject
regex:
別の方法としては、テーブルを使用することもできます。smtpd_sender_restrictions = check_sender_access regex:/etc/postfix/restricted_senders
これにより、正規表現:
/example\.com$/ OK // 550 You are not allowed to use this sender address.
検索結果をテストするには
postmap -q
:$ /usr/sbin/postmap -q [email protected] regexp:/etc/postfix/restricted_senders 550 You are not allowed to use this sender address. $ /usr/sbin/postmap -q [email protected] regexp:/etc/postfix/restricted_senders OK