Postfix DSN Support


はじめに

Postfixバージョン2.3では RFC 3464 に記述されているような配送状態通知 (DSN) のサポートを導入しました。これにより送信者は配送の成功通知もしくは失敗通知の制御ができるようになります。

特に、DSNをサポートすることでeメール送信者は以下のことが特定できるようになります:

DSNサポートの実装に当たってSMTP MAIL FROM および RCPT TO コマンドにパラメータが追加されており、また追加SMTPコマンドパラメータの機能のサブセットを提供する新しいPostfix sendmailコマンドラインオプションも用意されています。

このドキュメントには以下の話題に関する情報があります:

"成功" 通知の範囲を制限する

不達メールのレポートと同様、successful DSNレポートの配送は必要以上に内部インフラストラクチャの情報を漏らしてしまう可能性があります。残念ながら、"成功" 通知の要求を許可しないようにするには他のDSN要求も許可しないようにする必要があります。RFCでは機能のサブセットをネゴシエーションで決めるオプションは提供されていません。

これは思ったほど悪いことではありません。リモートから入ってくるメールに対してDSNを無効にしても、DSNをサポートしているリモートの送信者はメールがあなたのPostfixゲートウェイにうまく到達したということは通知されます; 送信者は、配送が成功したというあなたの内部システムからの通知を受け取らないだけなのです。リモートの送信者が失うものはほんのわずかです: 彼らはPostfixが配送の遅延もしくは失敗をどのように報告すべきか指定することはできません。

信頼するクライアントからのDSN要求は許可するがランダムなよそ者からの要求を拒否したいのであれば、smtpd_discard_ehlo_keyword_address_maps 機能を使ってください (全てのクライアントに対してDSNを無効にする方法は以下を参照してください):

/etc/postfix/main.cf:
    smtpd_discard_ehlo_keyword_address_maps = 
        cidr:/etc/postfix/esmtp_access

/etc/postfix/esmtp_access:
    # Allow DSN requests from local subnet only
    192.168.0.0/28      silent-discard
    0.0.0.0/0           silent-discard, dsn
    ::/0                silent-discard, dsn

ネットワークからのDSN要求の利用を全て拒否したいのであれば、smtpd_discard_ehlo_keywords 機能を使ってください:

/etc/postfix/main.cf:
    smtpd_discard_ehlo_keywords = silent-discard, dsn

Postfix sendmail コマンドラインインターフェース

PostfixにはDSNサポートのための Sendmail 互換コマンドラインオプションが2つあります。

Postfix VERP サポートとの互換性

Postfixバージョン2.3以前では、VERP形式の配送を要求するために sendmail(1) コマンドは -V コマンドオプションを使っていました。Postfix 2.3以降でVERP形式の配送を要求するには、-V の代わりに -XV を指定しなければいけません。

VERP形式の配送のために -V を使おうとしているかどうかを、Postfix 2.3 sendmail(1) コマンドは認識します。正しい処理をおこなった上で、新しい文法になったことを指摘します。