![Mailscanner 和 Postfix:保留除带有自定义标头的邮件之外的所有内容](https://linux22.com/image/559348/Mailscanner%20%E5%92%8C%20Postfix%EF%BC%9A%E4%BF%9D%E7%95%99%E9%99%A4%E5%B8%A6%E6%9C%89%E8%87%AA%E5%AE%9A%E4%B9%89%E6%A0%87%E5%A4%B4%E7%9A%84%E9%82%AE%E4%BB%B6%E4%B9%8B%E5%A4%96%E7%9A%84%E6%89%80%E6%9C%89%E5%86%85%E5%AE%B9.png)
ATM 我正在使用常规方法将所有邮件置于 HOLD 状态,以便将它们从 postfix 传递到 MailScanner,如所述http://www.mailscanner.info/postfix.html:
在 Postfix 配置文件 /etc/postfix/main.cf 中添加以下行:
header_checks = regexp:/etc/postfix/header_checks
在文件 /etc/postfix/header_checks 中添加以下行:
/^Received:/ HOLD
这样做的效果是告诉 Postfix 将所有消息移至 HOLD 队列。
但是我有一些 SMTP 消息,我不需要通过 MailScanner 传递它们,这些消息由自定义标头标识。我需要找到一种方法来绕过 MailScanner 来处理这些消息,但我找不到它,因为我需要检查自定义标头是否存在,而不是 From: 或 To: 地址...
尝试修改 /etc/postfix/header_checks:
/^X-Custom-Header:/ FILTER smtp:[ip.addr.next.hop]:10025
在 mail.log 中我看到了被过滤的消息:
Aug 19 17:52:17 servername postfix/cleanup[19423]: AFB842E33A: filter: header X-Custom-Header: from relay.sender.foo[xx.yy.zz.kk]; from=<[email protected]> to=<[email protected]> proto=ESMTP helo=<mail.sender.foo>: smtp:[ip.addr.next.hop]:10025
如果上述规则是 header_checks 中的唯一规则,它将通过 smtp 传送到下一跳。
现在我需要捕获 Mailscanner 中的所有其他内容(因此在 Postfix HOLD 队列中),那么我该如何告诉 header_checks 执行此操作?如果我留下 /^Received:/ 检查,即使 AFB842E33A 也保留在 HOLD 队列中...
也许这只是一个愚蠢的问题,但是...有什么想法吗?
答案1
是的,甚至有一个解决方案。它被称为header_checks
并且是 的一部分*_restrictions
。格式(取决于你想要什么)在其自身中描述文档。
但我不建议使用 Mailscanner 和 Spamassassin 等队列后过滤器。减少垃圾邮件并通知发件人的更好方法是使用队列前过滤器,例如内置的postscreen
、、、、队列前过滤器和外部工具,例如。client_restrictions
sender_restrictions
recipient_restrictions
policyd-weight
只有队列前过滤器可以减少服务器的负载和资源,并且可以在垃圾邮件到达服务器之前阻止 80% 的垃圾邮件。Mailscanner 尤其在我的个人“讨厌名单”上,因为它与 Postfix 的集成度很低,无法使用 Postfix 内置的反垃圾邮件过滤器和一般过滤器界面。
编辑:由于问题已被编辑,我现在就回答。
FILTER
并不是阻止 Postfix 处理header_checks
文件的操作。它只会告诉“当我完成检查后,我将进行过滤”。因此下一行匹配并将邮件设置为保留。
解决方案(即使它看起来很不完善)是这个header_checks
文件:
/^X-Custom-Header:/ FILTER smtp:[ip.addr.next.hop]:10025
/^X-Custom-Header:/ OK
/^Received:/ HOLD