treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

TLS is requiredでSMTPサーバが送信できなくなる

少し前の話ですが、使っていた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のディレクトリは

f:id:treedown:20210712160430p:plain※画面はイメージです。
情報にあった「/etc/postfix/tls_policy」というディレクトリもファイルもなく手詰まりに。とはいえ、問題がTLSであることは明白なので、TLS関連を見直してみようと考えて、既存の設定からそれらしい設定を見直してみることにしました。

main.cfの設定を見直してみる

設定ファイルを眺めているうちに、/etc/postfix/main.cfに似たようなオプションを発見しました。

f:id:treedown:20210712160733p:plain※画面はイメージです。

ここの、
--------------------------------------------------------------
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」のまま正常稼働していることから、イントラ内の構成変更の可能性もありそうでした(そこのイントラはノータッチなので推測しかできないのですが。)