让 postfix 使用 sasl / auth plain 向中继服务器发送邮件

让 postfix 使用 sasl / auth plain 向中继服务器发送邮件

我的 postfix 不向传出中继服务器发送 AUTH PLAIN。几天前它肯定能正常工作,但现在我收到了“不允许中继”的退回邮件。

邮件系统在 Alpine Linux VM 中使用 postfix、fetchmail 和 dovecot 运行。Postfix 使用 Cyrus SASL lib,而不是 dovecot lib。

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_密码:

[RELAY_HOST] USER:PASSWORD

我使用 tcpdump 捕获了传出会话,但未发送 AUTH PLAIN。我使用正确的 AUTH PLAIN 行测试了使用 telnet 手动发送邮件,结果成功了。

所以我的解释是,postfix 在某些时候不会决定使用 SASL / AUTH PLAIN。

可能是什么问题呢?

权限应该没问题,postmap 已调用,postfix 已重新启动并重新加载,libsasl 已安装,postfix 报告已使用 cyrus 构建。我知道这是陈词滥调,但几天前系统还可以正常工作。这里是不是证书过期了,我在日志中没有看到?

答案1

postfix 发送 HELO,不产生 AUTH PLAIN 行

HELO 是原始的握手命令,不具备任何协商扩展的能力。在客户端可以使用 SASL 之前,它必须发送 EHLO(扩展问候语)并检查服务器广告所需的 SASL 机制。

默认情况下,许多 SMTP 客户端(包括 Postfix)仅在出现“远程邮件传输协议“出现在服务器的欢迎横幅中(例如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 响应中删除,而是试图禁止 EHLO 本身。)


请注意,端口 25 通常仅用于消息接收(从其他域传入的传递) - 587 或 465 是用于消息“提交”(从客户端传出)的端口。

因此,如果您的 Postfix 充当本地客户端(因为它具有中继主机并想要使用身份验证),那么它实际上应该连接到端口 587 上的中继主机。

请注意,连接到端口 465 需要smtp_tls_wrappermode = yes,因为它从一开始就使用 TLS。(这实际上是一个优势,因为它可以防止防火墙篡改握手。)

使用端口 587 时,TLS 是可选的(仅使用“STARTTLS”命令激活),但您也可以确实应该如果服务器支持,则强制使用 TLS。为此,请设置smtp_tls_security_level = verify

相关内容