![在 Postfix 中强制发送邮件使用 TLS](https://linux22.com/image/722437/%E5%9C%A8%20Postfix%20%E4%B8%AD%E5%BC%BA%E5%88%B6%E5%8F%91%E9%80%81%E9%82%AE%E4%BB%B6%E4%BD%BF%E7%94%A8%20TLS.png)
我想对某些(并非全部)域的外发邮件启用强制 TLS 加密。
我解决了传入如果我设置了邮件:
smtp_tls_security_level = may
smtp_tls_policy_maps = hash:/etc/postfix/tls_policy
以及tls_policy
example.com encrypt
来自接收域 example.com 的所有连接均通过 TLS 进行。
我该如何执行这个传出某些域名的邮件?
答案1
您需要查看 TLS 策略映射功能。它是为特定场景设计的。它允许您指定“可以”或“必须”来分隔域;如下所示:
example.net secure match=example.net:.example.net
anotherexample.net may match=anotherexample.com:.anotherexample.com
在这里阅读更多内容:
答案2
您可以通过以下方式实现此目的:smtpd_tls_received_header
和header_checks
。
以下是快速未经测试例如,和 可能并不完全合适,但它可能是一个有用的起点。建议从或WARN
操作开始INFO
进行测试。
考虑到尝试匹配的多行性质,也可能nested_header_check
比 更合适header_checks
。
main.cf
header_checks = pcre:$config_directory/smtpd_tls
smtpd_tls
if /Return-Path:.+<.+@(example\.com)>/
!/Received: from ([^ ]+) \([^\)]+) +
\(using [^ ] with cipher [^ ]+ [^(]+\)\)
+[^(]+\)
+by mx1\.example\.net/x
REJECT mail from $1 must be sent using TLS
endif
这是为了匹配来自 example.com 的所有邮件,如果它不包含类似于以下内容的模式,则拒绝它:
Received: from smtp.example.com (smtp.example.com [192.0.2.1])
(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))
(No client certificate requested)
by mx1.example.com