使用 Postfix 发送电子邮件时,如何在“已接收”标头中隐藏发件人的 IP 和用户名?

使用 Postfix 发送电子邮件时,如何在“已接收”标头中隐藏发件人的 IP 和用户名?

发送邮件时,后缀将经过身份验证的用户的 IP 和用户名插入电子邮件的“已接收”标头中。虽然这对于追踪从您的邮件服务器发送的特定电子邮件的发送者很有用,但它也涉及隐私问题。在小规模的情况下,我可以相信所有用户的帐户都不会受到损害并变成垃圾邮件僵尸,我宁愿不广播 IP 地址和帐户名称供所有人阅读。简而言之,我如何设置后缀不发送此内容:

已收到:来自 [xxxx] (pc1.example.com [xxxx])(使用 TLSv1 和密码 DHE-RSA-AES256-SHA(256/256 位))(未请求客户端证书)(已验证的发件人:用户)由 mail.example.com (Postfix) 使用 ESMTPSA id CC77010C148 发送;2011 年 11 月 11 日星期五 04:55:18 +0000 (UTC)

答案1

标准解决方案是使用header_checks选项。这将要但是,如果我们过滤所有收发邮件的接收行(就像这样做一样),我们可能会丢失已发送邮件的接收标头这对于故障排除非常重要。为了解决这个问题,我们将header_checks只对不可能发送给我们的邮件应用该选项——发送给提交港口(你使用提交端口不是吗?)。

我们需要做的是通过清理_服务_名称选择提交服务,以便我们可以设置一个新的清理服务“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

现在我们可以将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

最后,我们需要创建文件/etc/postfix/submission_header_checks,该文件将包含过滤违规 Received 标题行的正则表达式。将哪个正则表达式放入文件中取决于您是否已smtpd_sasl_authenticated_header设置。

如果smtpd_sasl_authenticated_headeryes,则使用:

/^Received:.*\(Authenticated sender:/ IGNORE

否则,使用:

/^Received:.*\(Postfix/ IGNORE

(感谢 Dominic P 和 Bryan Drewery 展示如何处理第二种情况。)

答案2

解决来自 PHPLIST 的两个“已接收”标头的问题。

我们打开/etc/postfix/main.cf。在末尾添加:

header_checks = regexp:/etc/postfix/header_checks

创建文件/etc/postfix/header_checks。我们在其中写入:

/^Received:/ IGNORE

最后,重新加载 postfix

答案3

您可以使用

smtpd_sasl_authenticated_header = no

postfix/main.cf消除发出邮件中的标题信息。

相关内容