なぜこれが機能しないのでしょうか?

なぜこれが機能しないのでしょうか?

リレーホストへのメール中継を許可する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

なぜこれが機能しないのでしょうか?

smtpd_sender_restrictions:

デフォルトではすべてが許可されます。

制限のリストを、コンマまたは空白で区切って指定します。長い行を続けるには、次の行を空白で始めます。制限は指定された順序で適用され、最初に一致した制限が優先されます。

そして

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
    

関連情報