我正在尝试让我的电子邮件服务器加密我的电子邮件服务器与其他服务器之间的连接。它目前可以通过 TLS 连接到自身,但似乎无法通过加密连接到其他服务器。
在 postfix main.cf 中 - 通过设置强制内部加密:
smtpd_tls_security_level = encrypt
一切都与内部 TLS 连接兼容,电子邮件已发送到 Gmail、Yahoo 等。但当我尝试强制服务器到服务器加密通过设置:
smtp_tls_security_level = encrypt
电子邮件未送达。它们被发送到普通的 TLS 电子邮件提供商,如 Gmail、Yahoo 等。两者都有相同的证书。
smtpd_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.example.com/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/mail.example.com/chain.pem
smtp_tls_key_file = /etc/letsencrypt/live/mail.example.com/privkey.pem
smtp_tls_cert_file = /etc/letsencrypt/live/mail.example.com/cert.pem
smtp_tls_CAfile = /etc/letsencrypt/live/mail.example.com/chain.pem
可能存在什么问题?
如果有必要,我会购买更好的证书,但我还没有读到过它会如此。我尝试过自签名、Cloudflare TLS 和 Let's Encrypt 证书,它们都产生相同的结果。
master.cf 或 main.cf 有问题吗?
答案1
当发送服务器到服务器时,您的服务器成为客户端(smtp_ params)。
您可以参考完整的Postfix SMTP 客户端文档在这里。
关于您的配置,smtp_tls_CAfile
应指向您的受信任证书存储(用于验证远程服务器证书),而不应是您的服务器证书。受信任证书存储可能位于不同的位置/文件中,具体取决于所使用的发行版。
smtp_tls_CAfile = /etc/ssl/certs/ca-bundle.crt
此外,除非远程服务器使用它来验证邮件提交,否则我不会配置任何客户端证书。因此将删除smtp_tls_key_file
和smtp_tls_cert_file
条目。错误地配置此项可能会导致您无法发送邮件。
我对服务器的 TLS 客户端配置的最低要求是:
smtp_tls_security_level = may
smtp_tls_loglevel = 1
为 Postfix SMTP 客户端激活 TLS(may
如果远程服务器支持,则使用该值将使用 TLS,encrypt
将强制执行它)。
将日志级别设置为 1,这样您就可以通过生成如下日志条目来判断是否正在使用 TLS:
postfix/smtp[7867]: Trusted TLS connection established to someserver.domain.net[0.0.0.0]:25: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
不要忘记重新加载或重新启动 postfix。