我有 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
现在使用端口 587 从同一 IP 地址上的连接
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 确实允许您通过将身份验证字符串添加到同一行来在一个命令中发送全部内容。在这种情况下,它将放弃 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 上的第二次连接尝试
但是因为25端口是用来接收邮件的。未使用 SASL。所发生的情况是,服务器应配置为端口 25 上的所有连接仅接受 rcpt: 属于该服务器的地址。这会阻止服务器用作开放中继。
所以发生的事情是服务器正在处理 AUTH PLAIN 命令中的附加信息,并说,这是错误的,但这并不重要,因为我实际上并未在此端口上使用身份验证。
我们从第一个示例的响应中看到,服务器确实有其他防御措施在起作用。
注意:我拥有用于显示连接示例的服务器。