私の postfix は、送信リレー サーバーに AUTH PLAIN を送信しません。数日前までは機能していたはずですが、現在は「リレーは許可されていません」というバウンス メールが届きます。
メール システムは、postfix、fetchmail、dovecot を使用して Alpine Linux VM で実行されます。Postfix は、dovecot ではなく、Cyrus SASL ライブラリを使用します。
main.cf の関連部分:
relayhost = [RELAY_HOST]
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/mailsrv/etc/postfix/sasl_passwd
smtp_sasl_security_options =
sasl_passwd:
[RELAY_HOST] USER:PASSWORD
tcpdump を使用して送信セッションをキャプチャしましたが、AUTH PLAIN は送信されませんでした。適切な AUTH PLAIN 行を使用して telnet で手動でメールを送信するテストを行ったところ、正常に動作しました。
したがって、私の解釈では、postfix はある時点で SASL / AUTH PLAIN を使用することを決定しないということです。
何が問題なのでしょうか?
権限は正常で、postmap が呼び出され、postfix が再起動して再ロードされ、libsasl がインストールされ、postfix は cyrus でビルドされたことを報告します。決まり文句だとはわかっていますが、システムは数日前までは動作していました。ログには表示されていない証明書の有効期限切れが問題になっている可能性がありますか?
答え1
postfixはAUTH PLAIN行を生成しないHELOを送信します
HELOは、拡張をネゴシエートする機能を持たないオリジナルのハンドシェイクコマンドです。クライアントがSASLを使用する前に、EHLO(拡張hello)を送信し、サーバーが広告する必要な SASL メカニズム。
デフォルトでは、Postfixを含む多くのSMTPクライアントは、「ESMTP" がサーバーのグリーティングバナーに表示されます (例220 foo.example.com ESMTP Sendmail
)。ESMTP をサポートしていないサーバーは、SASL もサポートしていないものとみなされます。
サーバーの挨拶が正しい場合は、
smtp_never_send_ehlo
またはsmtp_pix_workarounds
オプションを誤って有効にしていないことを確認してください。サーバーのグリーティングが間違っているが、それでも EHLO を受け入れる場合は、
smtp_always_send_ehlo = yes
Postfix 設定で有効にすることで EHLO の使用を強制できます。
サーバーを管理している場合は、グリーティングを修正してみてください。これは、他のドメインからの受信メッセージの配信にも影響する可能性があります。たとえば、ESMTP がなければ、日和見的な STARTTLS もありません。
たとえば、サーバーが Postfix も実行している場合は、smtpd_banner
オプションに「ESMTP」を含める必要があります。
smtpd_banner = $myhostname ESMTP $mail_name
(また、接続がスパム対策ゲートウェイを通過し、この方法を使用して STARTTLS の使用を禁止しようとしている可能性もあります。この場合、単に EHLO 応答から STARTTLS を削除するのではなく、EHLO 自体を禁止しようとします。)
通常、ポート 25 はメッセージ受信 (他のドメインからの受信配信) のみを目的としており、ポート 587 または 465 はメッセージの「送信」(クライアントからの送信) を目的としていることに注意してください。
したがって、Postfix がローカル クライアントとして動作している場合 (リレーホストがあり、認証を使用する必要があるため)、代わりにポート 587 でリレーホストに接続する必要があります。
ポート 465 への接続にはsmtp_tls_wrappermode = yes
、最初から TLS を使用するため、 が必要であることに注意してください。(これは、ファイアウォールによるハンドシェイクの改ざんを防ぐという点で、実際には利点です。)
ポート587を使用する場合、TLSはオプションです(「STARTTLS」コマンドを使用してのみ有効になります)が、本当にそうすべきサーバーがサポートしている場合は TLS の使用を強制します。これを行うには、 を設定しますsmtp_tls_security_level = verify
。