发送邮件时,Postfix将经过身份验证的用户的 IP 和用户名插入到电子邮件的 Received 标头中。虽然这对于跟踪谁发送了从您的邮件服务器发送的特定电子邮件很有用,但它也有隐私问题。在一个小规模的情况下,我可以相信所有用户不会让他们的帐户受到损害并变成垃圾邮件僵尸,我宁愿不广播 IP 地址和帐户名称以供所有人阅读。简而言之,我如何设置Postfix不发送这个:
收到:来自 [xxxx] (pc1.example.com [xxxx])(使用 TLSv1 和密码 DHE-RSA-AES256-SHA(256/256 位))(未请求客户端证书)(经过身份验证的发件人:用户)通过邮件。带有 ESMPSA ID CC77010C148 的 example.com (Postfix) 用于;2011 年 11 月 11 日星期五 04:55:18 +0000 (UTC)
Mic*_*pat 24
标准解决方案是使用header_checks选项。但是,如果我们过滤所有传入和传出邮件的接收行(就像这样做),这将起作用,我们可能会丢失发送给我们的邮件的 Received 标头,这对于故障排除很重要。为了解决这个问题,我们将header_checksonly 应用于不可能发送给我们的邮件——发送到提交端口的邮件(您正在使用提交端口,是吗?)。
这篇文章解释了如何header_checks专门应用于提交端口。我们需要做的是将cleanup_service_name选项传递给提交服务,以便我们可以设置一个新的清理服务“subcleanup”。的相关部分/etc/postfix/master.cf可能如下所示:
submission inet n - - - - smtpd
-o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o milter_macro_daemon_name=ORIGINATING
-o cleanup_service_name=subcleanup
Run Code Online (Sandbox Code Playgroud)
现在我们可以将header_checks选项传递给新的清理服务。那部分/etc/postfix/master.cf可能看起来像这样:
cleanup unix n - - - 0 cleanup
subcleanup unix n - - - 0 cleanup
-o header_checks=regexp:/etc/postfix/submission_header_checks
Run Code Online (Sandbox Code Playgroud)
最后,我们需要创建文件/etc/postfix/submission_header_checks,该文件将包含过滤有问题的 Received 标题行的正则表达式。您在文件中放入哪个正则表达式取决于您是否已smtpd_sasl_authenticated_header设置。
如果smtpd_sasl_authenticated_header是yes,则使用:
/^Received:.*\(Authenticated sender:/ IGNORE
Run Code Online (Sandbox Code Playgroud)
否则,请使用:
/^Received:.*\(Postfix/ IGNORE
Run Code Online (Sandbox Code Playgroud)
(感谢 Dominic P 和 Bryan Drewery 展示了如何处理第二种情况。)