私はpostfix + dovecot + pgsqlを持っています。すべてが期待どおりに動作します。最近スパムを防ぐために、設定のいくつかを変更しました。これで、ログに次のものが表示されます。
localhost postfix/smtpd[2299]: warning: restriction `reject_authenticated_sender_login_mismatch' ignored: no SASL support
localhost postfix/smtpd[2299]: warning: restriction `reject_unauthenticated_sender_login_mismatch' ignored: no SASL support
localhost postfix/smtpd[2299]: warning: restriction `reject_authenticated_sender_login_mismatch' ignored: no SASL support
localhost postfix/smtpd[2299]: warning: restriction `reject_unauthenticated_sender_login_mismatch' ignored: no SASL support
しかし!
$ postconf -a
cyrus
dovecot
そして
$ ldd /usr/sbin/postfix | grep sasl
libsasl2.so.3 => /usr/lib/libsasl2.so.3 (0x00007f9508e75000)
私の記憶が正しい場合は、「pacman」を介してpostfixをインストールしました。
警告が表示される理由と回避策は何ですか?
アップデート1:
sudo postconf | grep -i smtpd_sasl
smtpd_sasl_auth_enable = yes
smtpd_sasl_authenticated_header = no
smtpd_sasl_exceptions_networks =
smtpd_sasl_local_domain =
smtpd_sasl_path = private/auth
smtpd_sasl_security_options = noanonymous, noplaintext
smtpd_sasl_service = smtp
smtpd_sasl_tls_security_options = noanonymous
smtpd_sasl_type = dovecot
アップデート2:
その後、master.cf
私はこれを見つけました:
smtp inet n - n - - smtpd
-o smtpd_sasl_auth_enable=no
これが理由なのでしょうか?
アップデート3:
返品:
submission inet n - y - - smtpd
-o syslog_name=postfix/submission
-o smtpd_tls_security_level=encrypt
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_sasl_type=dovecot
-o smtpd_sasl_path=private/auth
-o smtpd_sasl_security_options=noanonymous
-o milter_macro_daemon_name=ORIGINATING
-o smtpd_sasl_local_domain=$myhostname
-o smtpd_client_restrictions=permit_sasl_authenticated, reject
-o smtpd_recipient_restrictions=permit_sasl_authenticated, reject
答え1
まず、メールの送受信に同じIPアドレス(スマートホストと呼ばれる)を使用するとします。
この場合、メッセージは通常、ポート587で送信するために直接送信されますが、ポート25で受信されます。
これはなぜ重要ですか?これは、postfixがポートを使用して接続を処理する方法を識別するためです。
SMTPサーバーの実際のログを見てみましょう。最初のログはポート25接続で発生します。
Nov 26 07:33:45 box postfix/smtpd[128819]: connect from host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5]
Nov 26 07:35:01 box postfix/smtpd[128819]: warning: restriction `reject_authenticated_sender_login_mismatch' ignored: no SASL support
Nov 26 07:35:02 box postfix/smtpd[128819]: NOQUEUE: reject: RCPT from host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5]: 554 5.7.1 Service unavailable; Client host [86.157.106.5] blocked using zen.spamhaus.org; https://www.spamhaus.org/query/ip/86.157.106.5; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<desktop>
Nov 26 07:35:13 box postfix/smtpd[128819]: disconnect from host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5] ehlo=2 starttls=1 auth=0/1 mail=1 rcpt=0/1 quit=1 commands=5/7
これで、同じIPアドレスから接続するには、ポート587を使用します。
Nov 26 07:40:53 box postfix/smtpd[130170]: disconnect from unknown[185.218.234.97] ehlo=1 mail=1 rcpt=0/1 rset=1 quit=1 commands=4/5
Nov 26 07:43:12 box postfix/submission/smtpd[130244]: connect from host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5]
Nov 26 07:43:31 box postfix/submission/smtpd[130244]: warning: host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5]: SASL plain authentication failed:
Nov 26 07:43:36 box postfix/submission/smtpd[130244]: disconnect from host86-157-106-5.range86-157.btcentralplus.com[86.157.106.5] ehlo=2 starttls=1 auth=0/1 quit=1 commands=4/5
すべての接続に対して同じAUTH PLAINコマンドを使用します。プレーンテキストの検証
何が起こったのか。
まず、理想的な世界では、認証方法がサポートされていると仮定して、クライアントは独自にAUTH PLAINを送信し、サーバーから応答334を受け取ります。その後、クライアントは認証情報を送信します。
ただし、AUTH PLAINを使用すると、同じ行に認証文字列を追加して、1つのコマンドですべてを送信できます。この場合、334行を放棄してすぐに認証に進みます。
250 SMTPUTF8
ehlo desktop
250-box.timothydutton.co.uk
250-PIPELINING
250-SIZE 134217728
250-VRFY
250-ETRN
250-AUTH PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250 SMTPUTF8
auth plain <base64 string with email address and wrong password>
535 5.7.8 Error: authentication failed:
quit
221 2.0.0 Bye
closed
上記は実際にはポート587の2番目の接続試行から得られました。
ただし、ポート25は電子メールの受信に使用されるためです。 SASLは使用されません。ポート25のすべての接続がそのサーバーに属するアドレスであるrcptのみを許可するようにサーバーを構成する必要があります。これにより、サーバーがオープンリレーとして機能するのを防ぎます。
したがって、何が起こっているのかは、サーバーがAUTH PLAINコマンドの追加情報を処理し、これが間違っていると言うことです。ただし、実際にはこのポートで認証を使用していないため、重要ではありません。
最初の例の応答では、サーバーは他の防御機能が動作していることがわかります。
注:私は接続の例を示すために使用されるサーバーを所有しています。