![让 postfix 将特定警告转发给 milter](https://linux22.com/image/786047/%E8%AE%A9%20postfix%20%E5%B0%86%E7%89%B9%E5%AE%9A%E8%AD%A6%E5%91%8A%E8%BD%AC%E5%8F%91%E7%BB%99%20milter.png)
我在 Debian 下运行 postfix 2.11.3。
我安装了一个自主开发的邮件过滤器,它与 CONNECTION、HELO、MAIL FROM、RCPT TO、HEADERS 和 EOM 一起运行,多年来一直运行良好。它使用标准邮件过滤器 API。
当发送者指定语法不正确的地址时,我会看到来自 postfix 的以下错误(其中 xxx.xxx.xxx.xxx 代表发送者的 IP 地址):
postfix/smtpd[29109]: warning: Illegal address syntax from example.com[xxx.xxx.xxx.xxx] in MAIL command: <[email protected]>
postfix/smtpd[29109]: disconnect from example.com[xxx.xxx.xxx.xxx]
此时,postfix 终止连接,但我想知道是否有办法让 milter 知道此警告并对其做出响应。
发生此类错误后,连接是否可以维持?如果可以,我可以让 milter 在处理错误后触发断开连接。
提前感谢您的任何想法和建议。
答案1
你可以反过来做:无条件地将所有连接和所有成功交付放入合适的(例如 SQL)日志中。然后,您可以(不一定与正在进行的 SMTP 会话同步)过滤日志,查找未能交付给至少一个收件人的连接。因为干净地断开连接的客户端、在初始问候后无法继续的客户端、发送垃圾邮件的客户端和最终被本地策略拒绝的提交之间没有太大区别。您可以将它们全部视为相同。
话虽如此,在推出任何复杂(从而引入新的边缘情况和不良错误状态)机制之前,请考虑仅使用简单的防火墙规则限制每个 IP 前缀的活动连接数。将行为不当的客户端的影响降低到可容忍的水平,然后不再关心它们浪费了多少周期,只要它们不浪费管理员的时间。