我正在将 MTA 转移到运行 Ubuntu 20.04 LTS 的较新服务器。SMTPS 运行良好,因此允许客户端在身份验证后发送邮件。但是,当从远程 MTA 发送邮件进行本地投递时,postfix 会因以下原因而失败fatal: no SASL authentication mechanisms
。
Dec 28 12:22:03 smtp postfix/smtpd[63402]: connect from unknown[1.2.3.4]
Dec 28 12:22:03 smtp postfix/smtpd[63402]: warning: xsasl_cyrus_server_get_mechanism_list: no applicable SASL mechanisms
Dec 28 12:22:03 smtp postfix/smtpd[63402]: fatal: no SASL authentication mechanisms
Dec 28 12:22:04 smtp postfix/master[63342]: warning: process /usr/lib/postfix/sbin/smtpd pid 63402 exit status 1
Dec 28 12:22:04 smtp postfix/master[63342]: warning: /usr/lib/postfix/sbin/smtpd: bad command startup -- throttling
这里已经存在关于类似问题的问题。但这次有所不同:
- SASL 运行良好,通过 saslauthd 针对 LDAP 目录进行身份验证。因此,SASL 的插件安装没有缺失。
- 通过 SMTPS 连接时身份验证运行良好。但在常规 SMTP 端口 25 上身份验证失败。
使用 netcat 测试 SMTP 连接时,在发送服务器的 HELO 字符串之前会关闭连接。因此,我发现这smtpd_client_restrictions
与/etc/postfix/main.cf:
smtpd_client_restrictions =
permit_sasl_authenticated
# postgrey:
check_policy_service inet:localhost:10023
这是为了防止经过身份验证的发件人的外发邮件被列入灰名单。
代表/etc/postfix/main.cfSASL 配置如下:
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous,noplaintext
smtpd_sasl_tls_security_options = noanonymous
broken_sasl_auth_clients = yes
此处的第 2 行和第 3 行是必需的,以防止在未加密的 SMTP 中进行纯文本登录,但在客户端通过 STARTTLS 启动 TLS 后或客户端通过 SMTPS 连接时接受它。我看到可以放弃 STARTTLS 方案以强制所有身份验证都通过 TLS 加密的 SMTPS,并且我可以通过 master.cf 仅为 SMTPS 启用 SASL。但现有用户根本不需要调整他们的设置。
答案1
据我所知,问题是由于
smtpd_sasl_security_options = noanonymous,noplaintext
与通过 saslauthd 对 LDAP 目录进行 SASL 身份验证相结合。这导致 PLAIN 和 LOGIN 成为唯一可用的登录方法。由于noplaintext
此处的原因,它们都被禁用。我希望 Postfix 在没有可用 SASL 方法时不提供任何身份验证。
用于测试目的我以前可以使固定通过添加另一种登录方法/etc/postfix/sasl2/smtpd.conf:
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN CRAM-MD5
这样,SMTP 就可以接受远程 MTA 在 SMTP 上的传入连接。然而,这不是解决办法目前,实际客户端会选择一种登录方法进行身份验证,尽管这种方法不太可能成功。请参阅http://www.postfix.org/SASL_README.html有关设置 Cyrus SASL 以供 saslauthd 使用的更多信息。
因此,我继续搜索,偶然发现了另一个选项,我显然读错了,因此跳过了传输配置:smtpd_tls_auth_only
。此布尔选项控制是否需要 TLS 进行身份验证。默认情况下设置no
,因此导致为未加密的 SMTP 设置 SASL 身份验证。将此选项切换为yes
后主配置文件文件 SMTP 再次正常运行。
答案2
我发现修复方法是取消注释 master.cf 文件中的这一行
-o smtpd_tls_auth_only=yes