我有一台运行 sendmail 的 CentOS 5.x 服务器,无法与某些收件人服务器协商 TLS。我正在调查此事。
但与此同时,我注意到,如果发生 TLS 握手错误,sendmail 将不会回退到使用标准未加密的传送方法。这是正常行为吗?
我希望这个逻辑能够实现,如果(且仅当)我明确要求域这样做。例如,如果我在 /etc/mail/access 中添加了 TLS_SRV 选项。在这种情况下,我没有这样做。本质上,Sendmail 只运行“机会性 TLS”。
到目前为止我遇到的所有信息都表明这个问题是预期行为并且是硬编码的......
按照http://www.sendmail.org/m4/starttls.html#disable_starttls:
默认情况下,只要可能,就会使用 STARTTLS。但是,有些损坏的 MTA 无法正确实现 STARTTLS。为了能够向这些 MTA 发送(或从这些 MTA 接收),可以使用与访问映射配合使用的规则集 try_tls (srv_features)。访问映射的条目必须标有 Try_TLS (Srv_Features),并引用连接系统的主机名或 IP 地址。
如果未使用访问数据库,则在所有情况下都允许连接,包括入站和出站,除非 ${verify} 中的值为 SOFTWARE,在这种情况下不允许连接。
这两个简介都表明,当另一方声称支持 TLS 时,try_tls 功能是跳过 TLS 的唯一选项。我知道这是一个选项,但它很麻烦,因为这意味着每当出站域出现问题时,我都需要手动设置例外。
还有其他方法可以让 sendmail 恢复吗?
答案1
根据此主题,后备功能tls_failures
是在此补丁中实现。显然,这将在一定次数的 TLS 握手失败后自动使用纯文本。
注意:此补丁已集成在 8.16 中(至少可作为快照使用)
截至本文发布时,8.16 尚未发布,所以现在你必须使用/etc/mail/access
或/etc/mail/access_db
作为塞斯建议,并确保重建.db
使用makemap hash /etc/mail/access < /etc/mail/access
至于tls_failures
全球使用的安全风险;考虑到这是机会性 TLS首先,我认为不使用这个新选项只会在某些非常特殊的情况下才会有帮助,在这些情况下,收件人邮件服务器会被暂时重新配置并稍后进行更正。
答案2
您可以为某些主机禁用 TLS。例如:
# Try_TLS:gmail.com NO
我也向你指出http://www.sendmail.org/m4/starttls.html
禁用 STARTTLS 并设置 SMTP 服务器功能
默认情况下,只要可能,就会使用 STARTTLS。但是,有些损坏的 MTA 无法正确实现 STARTTLS。为了能够向这些 MTA 发送(或从这些 MTA 接收),可以使用与访问映射配合使用的规则集 try_tls (srv_features)。访问映射的条目必须用 Try_TLS (Srv_Features) 标记,并引用连接系统的主机名或 IP 地址。只需使用标记即可指定默认情况。例如,访问映射中的以下条目:
Try_TLS:broken.server NO
Srv_Features:my.domain v
Srv_Features: V
将在向 broken.server(或该域中的任何主机)发送时关闭 STARTTLS,并在 TLS 握手期间仅为 my.domain 中的主机请求客户端证书。RHS 上 Srv_Features 的有效条目列在“Sendmail 安装和操作指南”中。