Postfix はまり道 with Dr.WEB

2.2 vs 2.3 話しの続きみたいになってますが、2.2 と 2.3 でデフォルト設定が違っていて Dr.WEB でハマった例がまた一つ。

2.3 の標準状態です。

% telnet xxx.xxx.xxx  25
Trying 192.168.0.1...
Connected to xxx.xxx.xxx.xxx.
Escape character is '^]'.
220 xxx.xxx.xxx.xxx ESMTP Postfix
EHLO yyyy.yyy.yyy.yyy
250-xxx.xxx.xxx.xxx
250-PIPELINING
250-SIZE 102400000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM: 
250 2.1.0 Ok
RCPT TO:  NOTIFY=FAILURE
250 2.1.5 Ok
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

で 2.2 の標準状態です。

% telnet xxx.xxx.xxx  25
Trying 192.168.0.1...
Connected to xxx.xxx.xxx.xxx.
Escape character is '^]'.
220 xxx.xxx.xxx.xxx ESMTP Postfix
EHLO yyyy.yyy.yyy.yyy
250-xxx.xxx.xxx.xxx
250-PIPELINING
250-SIZE 102400000
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
MAIL FROM: 
250 2.1.0 Ok
RCPT TO:  NOTIFY=FAILURE
501 5.7.1 DSN support is disabled
QUIT
221 2.0.0 Bye
Connection closed by foreign host.

これで何が問題になったかといえば、Dr.WEB メールデーモンの検証をしていたら

Apr 12 22:06:08 test drweb-receiver: [3065256848] receiver.MRS WARN Unsupported option: [NOTIFY=FAILURE]
Apr 12 22:06:08 test postfix/smtpd[9554]: warning: proxy 127.0.0.1:8025 rejected "RCPT TO: 
  NOTIFY=FAILURE": "555 5.5.4 Unsupported option: NOTIFY=FAILURE"

というエラーがログに記録されてメッセージが拒否されてしまったのです。これに関してベンダーのエンジニアと話しをしたら

の 2つの URL から「相手が悪い」という回答でクローズされかかった*1のですが、Postfix の公式サイトで以下のコンテンツを発見!

Postfix version 2.3 introduces support for Delivery Status Notifications as described in RFC 3464. This gives senders control over successful and failed delivery notifications.

Postfix DSN Support

なんと 2.3 から DSN が標準でサポートされてしまった(!?)んですねぇ。で、

  • postfix 2.3 は DSN をサポートしている
  • Dr.WEB メールデーモンは DSN をサポートしていない

ため、postfix が受け取ったメールを Dr.WEB メールデーモンが処理できなかった*2訳です。ということで今日の教訓は

  1. 昔はサポートしてなかったけど、今の Postfix は DSN をサポートしてる!
  2. ベンダーの回答にくじけず、証拠を突きつけよう!

ちなみに postfix で DSN を無効にするには main.cf に

smtpd_discard_ehlo_keywords = dsn

と書いて再ロードすれば OK です。

*1:ググってもこの辺しか引っ掛からないんですよね...

*2:After queue モードでなければ大丈夫でしょうけど、検証のために Before queue モードにしてました