我正在使用一个只发送邮件(新闻通讯)的 Postfix 服务器。
我读到我应该在 Postfix 上启用 TLS 和/或 SSL 以提高邮件传递性能。这是真的吗?Postfix 下的 SSL 和 TLS 之间有区别吗?
我的 Postfix 安装中默认已经有以下三行:
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
所以我想知道 SSL/TLS 是否已默认启用?这些自动生成的 pem 和密钥文件是什么?如何用我的 HTTPS 证书替换它们?我的域名已经有 HTTPS 证书。我可以对 Postfix 和 Nginx 使用相同的证书吗?
答案1
启用加密对交付性能没有帮助,但建议这样做,因为它可以提高电子邮件隐私. 传输过程中加密电子邮件已成为一种标准,这一点您可以从 Google 的透明度报告中看出。传输中的电子邮件加密。
虽然 SSL 和旧版 TLS 已被弃用,但电子邮件是一种向后兼容的基础设施,它认为任何加密都比没有加密好,并且愿意回退到未加密的连接。因此,中间人攻击很容易,而像通过机会主义 DANE TLS 实现 SMTP 安全性之类的技术(RFC 7672) 的发明是为了在保持向后兼容性的同时提高安全性。
默认情况下(自 2020 年 5 月起),Postfix 中的 SSLv2 和 SSLv3 均已禁用
smtp_tls_protocols
– 客户端组件交付邮件 &smtpd_tls_protocols
– 服务器组件接收邮件。
我的回答总结了当前的最佳实践以及如何在 Postfix 中实现它们。
入站 TLS
您目前拥有 Postfix 附带的自签名默认“蛇油”证书。您说您已经拥有 Web 服务器的证书,并且您当然可以使用该证书链和密钥的路径,但为了让这个答案对其他人更有用,您也可以用免费的 Let's Encrypt 证书替换它们。为此,
- 在同一台机器上使用(或安装)Web 服务器HTTP-01 挑战和
- 使用它创建的证书来接收邮件。
请注意
您当前的
smtpd_use_tls
被替换为smtpd_tls_security_level
在 Postfix ≥ 2.3 中。使用:smtpd_tls_security_level=may
对于 Postfix ≥ 3.4,配置服务器密钥和证书的首选方法是通过
smtpd_tls_chain_files
参数。注意正确的顺序:私钥在证书链之前:smtpd_tls_chain_files = /etc/letsencrypt/live/mail.example.com/privkey.pem, /etc/letsencrypt/live/mail.example.com/fullchain.pem
Let's Encrypt 已开始发行ECC 证书默认情况下自 Certbot 2.0 起有些 SMTP 服务器不支持。在这种情况下,如何从 Let's Encrypt 获取 Postfix 的 ECC 和 RSA 证书?包括添加附加 RSA 证书。
每RFC 3207,4您应该在公开引用的 SMTP 服务器上使用机会性 TLS:
公开引用的 SMTP 服务器不得要求使用 STARTTLS 扩展来本地传递邮件。此规则可防止 STARTTLS 扩展破坏 Internet SMTP 基础架构的互操作性。公开引用的 SMTP 服务器是在 Internet 邮件地址右侧域名的 MX 记录(或 A 记录,如果不存在 MX 记录)中列出的 Internet 主机的端口 25 上运行的 SMTP 服务器。
使用 Let's EncryptCertbotsystemctl reload postfix
意味着您的证书会在 2-3 个月的周期内自动更新。Postfix 不会自动加载这些更新的证书,因此使用 Certbot--deploy-hook
或定期使用 cronjob重新加载 Postfix ( ) 可能是明智之举。
出站 TLS
如果您想在出站邮件上为接收服务器添加 TLS 身份验证,可以使用机会主义 DANEsmtp_tls_security_level
。使用 DANE 要求您的 DNS 解析器具有 DNSSEC 功能,并且它仅对已发布 TLSA 策略的域进行身份验证。同样,这是在不破坏向后兼容性的情况下提高隐私的最佳实践。
dane
- 机会性 DANE TLS。在此安全级别,目标的 TLS 策略是通过 DNSSEC 获得的。要使 TLSA 策略生效,必须对目标域的包含 DNS 区域进行签名,并且必须配置 Postfix SMTP 客户端的操作系统以将其 DNS 查询发送到能够验证签名记录的递归 DNS 名称服务器。
# TLS, DNSSEC and DANE for SMTP client
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_security_level = dane
smtp_dns_support_level = dnssec
如果您不能使用 DANE,您可以手动指定您知道具有加密的域列表,并单独对它们强制使用 TLS,使用smtp_tls_policy_maps
:
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
使用这个 Berkeley DB,内容/etc/postfix/tls_policy
可能如下所示:
# Encrypt all mail to @gmail.com using any MX with TLS 1.2
gmail.com encrypt protocols=TLSv1.2
# Ecrypt all mail delivered using a specific nexthop destination
[contoso-com.mail.protection.outlook.com] encrypt
使用 Let's Encrypt 的 DANE 进行入站 TLS
为了完整性,如果您还发布自己的 TLSA 记录,出站 DANE 验证效果会更好。使用 Let's Encrypt,自动发布当前证书的指纹有点麻烦。相反,您可以使用 DANE-TA(2),如中所述请避免使用带有 LE 证书的“3 0 1”和“3 0 2”DANE TLSA 记录:
_25._tcp.mail.example.com. IN TLSA 2 1 1 (
60B87575447DCBA2A36B7D11AC09FB24A9DB406FEE12D2CC90180517616E8A18
)
此外,要使其正常工作,您需要为您的域名建立一个 DNSSEC 签名区域。
答案2
在 Postfix 上启用 TLS 和/或 SSL,以提高邮件传递性能
不会。TLS 为用户和传输过程提供加密,但不会影响可传递性,除非您发送到仅接受 TLS 的服务器。什么将要提高可传递性就是正确设置 DKIM、DMARC、MTA-STS 记录等。这是一个复杂的问题,不利于在这里给出单一的答案。
SSL 和 TLS 之间的区别
对于您的目的而言没有什么区别。
默认启用
发送:是,接收:否 - 已安装默认自签名证书。网络上和 上有很多指南man postfix
。此外Postfix TLS 文档
用我的 https 证书替换它们
大多数人会直接进入。再说一次,网络和人类是你的朋友。