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


13

发送邮件时,Postfix会将经过身份验证的用户的IP和用户名插入电子邮件中的Received标头中。虽然这对于跟踪谁发送了从您的邮件服务器发送来的特定电子邮件很有用,但它也涉及隐私。在小规模的情况下,我可以相信所有用户都不会使其帐户遭到破坏并变成垃圾邮件僵尸,我宁愿不广播IP地址和帐户名以供所有人阅读。简而言之,我如何将Postfix设置为不发送此消息:

已接收:来自[xxxx](pc1.example.com [xxxx])(使用具有密码DHE-RSA-AES256-SHA(256/256位)的TLSv1)(未请求客户端证书)(经过身份验证的发件人:用户)。 example.com(Postfix),其ESMTPSA ID为CC77010C148;2011年11月11日,星期五,04:55:18 +0000(UTC)

Answers:


20

标准解决方案是使用header_checks选项。这工作,在邮件然而,如果我们过滤接收到的所有邮件传入和传出线(因为会做),我们可能会失去接受邮件头发送我们,这可能是重要的疑难解答。为了解决这个问题,我们将header_checks仅将邮件应用于不可能发送给我们的邮件-发送到提交端口的邮件(您正在使用提交端口不是吗?)。

这篇文章解释了如何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

现在,我们可以将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展示了如何处理第二种情况。)


你必须打电话postmap submission_header_checks吗?
Mitar 2014年

@Mitar毫无头绪,但是如果您发现自己确实这样做,请随时编辑答案。这些是10.04的旧说明,但是14.04发行后,我可能会对其进行更新。
Michael Kropat 2014年

似乎没有它。:-)
Mitar

1
+1,感谢您的帮助。几年后,我不得不做些微调整。我正在运行Postfix 2.9.6。我将正则表达式更改为:/^Received:.*\(Postfix/ IGNORE因为我的标头中未包含“已验证的发件人”部分。您看到与我的新正则表达式相关的任何风险吗?
Dominic P

1
该答案假定设置了smtpd_sasl_authenticated_header = yes。没有它,则需要Dominic修改的正则表达式。
Bryan Drewery

-1

您可以使用

smtpd_sasl_authenticated_header = no

输入postfix/main.cf以消除外发邮件中的标题信息。


为什么这个答案比@Michael的答案简单得多?这会从所有标头中删除IP,而不仅仅是从通过提交端口收到的邮件中删除IP吗?
knocte

2
无论如何,@ knocte smtpd_sasl_authenticated_header默认设置为“ no”。启用后,Postfix会将用于SASL身份验证的用户名添加到初始的“ Received”标头中-这就是问题中显示的“ Authenticated sender:user”部分。@Michael的答案不仅删除了用户部分,还删除了整个“ Received”标头,包括客户端的IP。
n.st

@ n.st:您是在说Markus的答案不会删除IP,因此这不是问题吗?
knocte

@knocte确实如此。
n.st

1
我需要125岁以上才能投票。我已经对其进行了测试,它仅删除了用户名,而不删除了IP。
约翰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.