web-dev-qa-db-ja.com

リレーサーバーへのアウトバウンドメールにpostfixでsasl / authプレーンを使用する

私のpostfixはAUTHPLAINを発信リレーサーバーに送信しません。数日前は機能していたはずですが、今では「リレーは許可されていません」というバウンスメールが届きます。

メールシステムはAlpineLinux VM postfix、fetchmail、dovecotを使用して実行されます。PostfixはdovecotではなくCyrus SASLlibを使用します。

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を使用して発信セッションをキャプチャしましたが、AUTHPLAINが送信されません。適切なAUTHPLAIN行を使用して、telnetで手動でメールを送信することをテストしましたが、機能しました。

したがって、私の解釈では、その接尾辞は、ある時点でSASL/AUTHPLAINを使用することを決定しません。

何が問題なのですか?

パーミッションはOKで、postmapが呼び出され、postfixが再起動されて再ロードされ、libsaslがインストールされ、postfixレポートがcyrusでビルドされているはずです。私はそれが決まり文句であることを知っていますが、システムは数日前に機能していました。ここでは、ログに表示されていない証明書の有効期限が問題になる可能性がありますか?

1
Rainer Schwarze

postfix send HELOは、AUTHPLAIN行を生成しません

HELOは、拡張機能をネゴシエートする機能のない元のハンドシェイクコマンドです。クライアントがSASLを使用する前に、EHLO(extended-hello)を送信し、サーバーが目的のSASLメカニズムをアドバタイズすることを確認する必要があります。

デフォルトでは、Postfixを含む多くのSMTPクライアントは、単語 "[〜#〜] esmtp [〜#〜]"がサーバーのグリーティングバナーに表示されている場合にのみEHLOを送信します(例:220 foo.example.com ESMTP Sendmail) 。 ESMTPをサポートしていないサーバーは、SASLもサポートしていないと見なされます。

  • サーバーのグリーティングが正しい場合は、誤ってsmtp_never_send_ehloまたはsmtp_pix_workaroundsオプションを有効にしていないことを確認してください。

  • サーバーのグリーティングが間違っているが、それでもEHLOを受け入れる場合は、Postfix設定でsmtp_always_send_ehlo = yesを有効にすることで、EHLOの使用を強制できます。


サーバーを管理している場合は、グリーティングを修正してみてください。これは、他のドメインからの着信メッセージ配信にも影響を与える可能性があります。 ESMTPがなければ、便宜的なSTARTTLSもありません。

たとえば、サーバーがPostfixも実行している場合は、smtpd_bannerオプションに「ESMTP」を含める必要があります。

smtpd_banner = $myhostname ESMTP $mail_name

(接続が、STARTTLSの使用を禁止するためにこの方法を使用するスパム対策ゲートウェイを通過する可能性もあります。EHLO応答から単に削除するのではなく、EHLO自体を禁止しようとします。)


通常、ポート25はメッセージの受信(他のドメインからのインバウンド配信)専用であることに注意してください。587または465は、メッセージの「送信」(クライアントからのアウトバウンド)用のポートです。

したがって、Postfixがローカルクライアントとして機能している場合(リレーホストがあり、認証を使用したいため)、代わりにポート587でリレーホストに接続する必要があります。

ポート465に接続するには、最初からTLSを使用するため、smtp_tls_wrappermode = yesが必要であることに注意してください。 (これは、ファイアウォールがハンドシェイクを改ざんするのを防ぐため、実際には利点です。)

ポート587を使用する場合、TLSはオプションです(「STARTTLS」コマンドを使用してのみアクティブ化されます)が、サーバーがサポートしている場合は、TLSの使用を強制することもできます本当に必要です。これを行うには、smtp_tls_security_level = verifyを設定します。

1
user1686