少し前の話ですが、使っていたpostfixのメールサーバが一台「TLS is required」を記録してしまい、メールが配送されなくなった、という対処を実施したためご報告です。
postfixでエラー
アラートメールの配送に使っているpostfix、単体でメールサーバとして稼働しているわけではなく、リレーサーバとしてプロバイダやsendgridのような配信専門のメールサーバへフォワードするような使い方をしています。
そのメールサーバで、以下のようなエラーが記録されてsendgridへのメールのリレーが拒否されるようになってしまいました。
メールログには、
--------------------------------------------------------------
TLS is required, but was not offered by host smtp.sendgrid.net[%Global IP%]
--------------------------------------------------------------
が出てしまいメールが配送できなくなったことが記録されていました。
メッセージの意味は、
TLS が必要ですが、ホスト smtp.sendgrid.net[%Global IP%] によって提供されませんでした
との記載だけど相手SMTPは提供しているんですよね…。ポートが原因なのかな?
postfix設定の調整
「TLS is required」となっているので、可能性がありそうなのは、やはり暗号化の部分。
ネット上でよく見掛けたのは、
--------------------------------------------------------------
smtp_enforce_tls = yes
--------------------------------------------------------------
の行をyes⇒noに変更してみる、という対処。
加えて「/etc/postfix/tls_policy」に記載のある、
--------------------------------------------------------------
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
--------------------------------------------------------------
この部分。
しかし、実際には稼働中のpostfixで上記オプションは使われていなかったのとpostfixのディレクトリは
※画面はイメージです。
情報にあった「/etc/postfix/tls_policy」というディレクトリもファイルもなく手詰まりに。とはいえ、問題がTLSであることは明白なので、TLS関連を見直してみようと考えて、既存の設定からそれらしい設定を見直してみることにしました。
main.cfの設定を見直してみる
設定ファイルを眺めているうちに、/etc/postfix/main.cfに似たようなオプションを発見しました。
※画面はイメージです。
ここの、
--------------------------------------------------------------
smtp_tls_security_level = encrypt
--------------------------------------------------------------
これじゃない?
http://www.postfix-jp.info/trans-2.3/jhtml/TLS_README.html
によれば、(「クライアントTLSセキュリティレベル」の項を以下抜粋)
--------------------------------------------------------------
日和見TLS
"may" TLSセキュリティレベルでは、TLS暗号化は日和見主義になります。サーバがSTARTTLS ESMTP機能をサポートしていると、SMTPトランザクションは暗号化されます。そうでなければ、メッセージは平文で送られます。Postfix 2.3以降では、日和見TLSは "smtp_tls_security_level = may" をセットすることで設定可能です。
--------------------------------------------------------------
とあるので、切り分けにもなりそうだと考えました。ちなみに「TLS暗号化の強制は "smtp_tls_security_level = encrypt" 」なので、現状は強制されているはずです。
そこで、/etc/postfix/main.cfの記述を
--------------------------------------------------------------
#smtp_tls_security_level = encrypt
smtp_tls_security_level = may
--------------------------------------------------------------
既存のオプションをコメントアウトし、上述のサイト曰くの日和見TLSに変更するようにしました。
動作を確認
「/etc/postfix/main.cf」を編集した後で、
リロード「sudo /etc/init.d/postfix restart」実行後に、
「sudo postsuper -r ALL」でキューの再送要求。
すると、ログでは、
--------------------------------------------------------------
Jun 8 04:29:56 hogepmail postfix/smtp[xxxxx]: 000XX00000: TLS is required, but was not offered by host smtp.sendgrid.net[%Global IP%]
Jun 8 04:29:57 hogepmail postfix/smtp[xxxxx]: 000XX00000: to=<root@hoge.hoge.net>, orig_to=<root>, relay=smtp.sendgrid.net[%Global IP%]:587, delay=948, delays=947/0.12/0.28/0, dsn=4.7.4, status=deferred (TLS is required, but was not offered by host smtp.sendgrid.net[%Global IP%])
--------------------------------------------------------------
となっていたのが
--------------------------------------------------------------
Jun 8 12:22:26 hogepmail postfix/qmgr[xxxx]: 000XX00001: from=<root@hoge.hoge.net>, size=1219, nrcpt=1 (queue active)
Jun 8 12:22:26 hogepmail postfix/local[xxxx]: 000XX00010: to=<root@hoge.hoge.net>, orig_to=<root>, relay=local, delay=29297, delays=29297/0.05/0/0.02, dsn=2.0.0, status=sent (forwarded as 539C840417)
Jun 8 12:22:26 hogepmail postfix/qmgr[xxxx]: 000XX00011: removed
--------------------------------------------------------------
と、キューが流れていきました。成功。
なにか暗号化の部分で仕様の変更があったのかなぁ…。
ちなみに、複数台同じ「smtp_tls_security_level = encrypt」で別のイントラネット環境ごとにpostfixを稼働させていますが、ある一つのイントラネットでのみ発生しており、その他のpostfixは「smtp_tls_security_level = encrypt」のまま正常稼働していることから、イントラ内の構成変更の可能性もありそうでした(そこのイントラはノータッチなので推測しかできないのですが。)