如何header_checks
使用 Postfix 对收发邮件应用不同的方式?
默认情况下,所有 header_checks 都适用于传入和传出。
答案1
header_checks
是由cleanup
所以我不认为您只能将它应用于传入或传出。
smtp_header_checks
仅适用于发送邮件(smtp 客户端)
答案2
如果有一个邮件头,你可以用它来识别哪些是收到的邮件,哪些是发出的邮件,那么使用 postfix 3.2 或更新版本,你可以短路header_checks, 喜欢:
/^Received: .*detect_outgoing_mails/ PASS
/^X-Something: this rule will only match on incoming mails/ HOLD
(但它仍然只为您提供匹配全部(与以前一样)或仅匹配传入或仅匹配传出邮件的选项,并且需要相对较新的 postfix 版本)
作为一个更好的选择,如果您总是可以在一个端口(提交:tcp / 587)上接收“传出”邮件(来自您作为邮件中继服务器的客户端的邮件)并在 tcp / 25 上接收传入邮件,您应该能够使用它master.cf
来覆盖每个邮件的 header_checks,如下所示:
submission inet n - n - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o header_checks=pcre:/etc/postfix/header_checks.relay
smtp inet n - - - 200 smtpd
-o strict_rfc821_envelopes=yes
-o header_checks=pcre:/etc/postfix/header_checks.mx
但如果您中继的客户端也和世界其他地方一样使用 tcp/25,那么这种方法就行不通了。如果是这样,您可以为他们设置备用端口,这样就可以了,但可行性取决于您说服所有用户更改设置的能力。
如果您有多余的 IP 可用,您还可以使其对用户基本透明:假设您既有smtp.example.org
用户的中继服务器,又有 IP 为 的 MX a.a.a.a
,您可以将域的 MX 更改为 IP b.b.b.b
,然后使用一个 smtpd 服务器进行a.a.a.a
一组标头检查,使用另一个 smtpd 服务器进行b.b.b.b
另一组标头检查。如果您只为来自 192.168.xx/24 的用户进行中继,则这甚至更容易,此时您甚至可以保留相同的 DNS 名称并使用 DNS 视图为内部客户端显示内部 IP,为世界其他地方显示外部 IP。
第三种方法是使用后缀筛选功能而不是header_check
简单的正则表达式匹配,它会将整个消息转发到您的自定义脚本进行处理,然后可以通过检查标题轻松区分传入和传出的邮件,然后根据需要进行任何后处理。
答案3
如果我理解你的问题正确的话,你应该能够通过文件来做到这一点
/etc/postfix/header_checks
,就像这样发送邮件
/^From: "spammer/ REJECT
/^To: [email protected]/ REDIRECT [email protected]
我很久以前就这样做过,所以不记得所有的细节,但你可以从这里获得更多信息文档
这将允许您根据邮件是传入还是传出来定义操作,我希望这能回答您的问题。