今日はちょっと前の記録から。
postfixでメールリレーをしている際に、
「said: 530 5.7.0 Must issue a STARTTLS command first (in reply to MAIL FROM command))」
となったご報告です。
元々このサーバ…
このサーバ、結構前からイントラネット内に設置していたメールサーバです。アラートメールが発行されたらイントラネット内でそのアラートメールをインターネットに出す前にこのメールサーバで集約してインターネット上のメールサーバに送り出す役目を担っています。
ですが、昔の設定で動作していたものが、リレー先のサーバが変わったために動作しなくなっていました。その対処をした時のメモです。
昔は正常に動作していたので当然「smtpd_sasl_~」で始まる設定もすべて実施済みですし、「smtpd_use_tls = yes」をはじめとしたSSL関連も設定済み、「smtp_sasl_~」で始まる設定も実施し、元々は正常動作していました。これが動作しなくなった、というのがこの話のシチュエーションです。
エラー内容
インターネット上のメールサーバへリレーする時に、こんな感じでエラーログが記録されるようになりました。
May 20 12:00:00 mailhost postfix/smtp[10000]: 779AEFEE38: to=<user@hoge.jp>, orig_to=<user>, relay=hostname.hoge.jp[XXX.XXX.XX.XX]:587, delay=0.14, delays=0.05/0.03/0.05/0.01, dsn=5.7.0, status=bounced (host hostname.hoge.jp[XXX.XXX.XX.XX] said: 530 5.7.0 Must issue a STARTTLS command first (in reply to MAIL FROM command))
注目したいのは
「said: 530 5.7.0」がエラーコード
「Must issue a STARTTLS command first (in reply to MAIL FROM command))」がエラーメッセージです。
要するにSTARTTLSコマンドを最初に実行してくれないとダメよ、とリレー先のサーバがもうしております。
いままでなかったオプションいるのかなぁ・・・と思い
「smtpd_tls_auth_only = no」や「smtp_sasl_tls_security_options = noanonymous」を追加するも動作は同じ。「Must issue a STARTTLS command first」が出続けました。
メーラで設定を確認してみようと
メーラでリレー先のメールサーバの仕様を再確認、ここでちゃんとメールの送受信ができないのならアレコレ試すのも徒労に終わってしまうかもしれない。
さて、やってみると…
POP3の認証について問題なく通るのですが、SMTP認証は試行してエラーになる、という動作に。
うーん、暗号化、ですかねぇ。
ポートは587でOKだから暗号化かと思い、なし⇒自動⇒SSL⇒TLSと試してみた。
結果として、暗号化にTLSを指定した時だけ正常に完了、他はエラーとなってしまいメールの送信ができない、という結果に。
なるほど。
結論
結論から言うと
postfixのバージョン2.3以降では設定として
「smtp_tls_security_level = may」
を入れないといけない、ということが分かりました。知識が古いといけませんなぁ。覚えとこう。
最終的に「smtp_tls_security_level = may」を入れてpostfixをリスタートしたところ、ログも正常送信できる、という表記に変わりました。
May 20 13:00:00 mailhost postfix/smtp[10000]: 1C11FFEE38: to=<user@hoge.jp>, orig_to=<user>, relay=hostname.hoge.jp[XXX.XXX.XX.XX]:587, delay=0.34, delays=0.05/0.11/0.1/0.09, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued as 38E681E10D3)
「status=sent」となっているので正常に送信が完了したことが分かります。続けて「250 2.0.0 Ok: queued as キュー番号」とありますのでメールは送信できたことが分かります。
ただその前に追加した「smtpd_tls_auth_only = no」や「smtp_sasl_tls_security_options = noanonymous」は必要なのかどうか、ちょっと未検証です。もしかしたらこの二つもいれた上で「smtp_tls_security_level = may」を入れたからよかったのかもしれないし、そうでないかもしれない。
時間を作ってこの辺の動作の違いはちゃんと調べておきたいなぁ…でも時間ないなぁ…。