![Postfix - 从中继主机中排除具有特定标头值的消息?](https://linux22.com/image/567497/Postfix%20-%20%E4%BB%8E%E4%B8%AD%E2%80%8B%E2%80%8B%E7%BB%A7%E4%B8%BB%E6%9C%BA%E4%B8%AD%E6%8E%92%E9%99%A4%E5%85%B7%E6%9C%89%E7%89%B9%E5%AE%9A%E6%A0%87%E5%A4%B4%E5%80%BC%E7%9A%84%E6%B6%88%E6%81%AF%EF%BC%9F.png)
从以下基本配置开始将 Postfix 中的所有消息中继到 PostMarkApp.com:
#start postmarkapps settings
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = static:secret:secret (where "secret is your API key")
smtp_sasl_security_options = noanonymous
relayhost = [smtp.postmarkapp.com]:25
#end postmarkapp settings
问题在于,如果某些东西开始出现错误信息,它们都会通过 PostMark 进行处理,并且会产生费用。
绕过的一种方法relayhost
是设置sender_dependent_relayhost_maps
并将某些地址映射回 yourdomain.com。但这在 Web 应用中不起作用,因为所有邮件都由同一用户发送,但发件人标头不同。
sender_dependent_relayhost_maps
那么,我怎样才能达到与查看发件人或主题标题而不是仅仅查看用户相同的效果呢?
答案1
您需要 Postfix 2.5 或更高版本。
然后进入main.cf
设置smtp_header_checks = pcre:/etc/postfix/dont_relay_this_header
。
以/etc/postfix/dont_relay_this_header
书面形式
/^Subject:.*viagra/ REJECT You are not allowed to send out advertisement
根据需要更改 dont_relay_this_header 文件的内容。更多信息请参阅header_checks手动的。
答案2
我通过从另一端攻击来解决这个问题,即不要通过中继主机向某个收件人发送邮件。
编辑/etc/postfix/main.cf
:
#start postmarkapps settings
transport_maps = hash:/etc/postfix/transport
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = static:secret:secret (where "secret is your API key")
smtp_sasl_security_options = noanonymous
relayhost =
#end postmarkapp settings
编辑/etc/postfix/transport
:
[email protected] :
* smtp:[smtp.postmarkapp.com]:25
然后跑postmap /etc/postfix/transport
。
现在我只需将所有错误消息发送到[电子邮件保护]并且它们不通过 PostMark 发送。