我主要是 spamassassin (3.4.0-6) + exim4 (4.84.2) 的快乐管理员,在 Debian/jessie 系统上设置服务器端垃圾邮件过滤。
最近有用户报告了一些误报。仔细检查后发现,合法的电子邮件是
- 从某个拨号 IP 地址发送(在多个黑名单中列出)
- 传递到发件人的 ISP 的邮件服务器(使用他们现有的任何身份验证),这
- 然后将电子邮件发送到我的邮件服务器
- 将邮件标记为垃圾邮件,因为“已接收”标头中的 IP 之一被列入黑名单
spamassassin 匹配了一些黑名单规则(RCVD_IN_BL_SPAMCOP_NET
, RCVD_IN_SBL_CSS
, RCVD_IN_SORBS_SPAM
, RCVD_IN_SORBS_WEB
)。请注意,由于 IP 被列入黑名单,电子邮件仅获得了正面分数。
触发垃圾邮件标记的电子邮件中的相关标题是:
Received: from [10.126.95.175] (unknown [109.126.64.1])
by smtpfilter1.public.one.com (Halon) with ESMTPSA
id ee1f1e82-251c-11e7-8f0e-b8ca3afa9d73;
Wed, 19 Apr 2017 16:26:25 +0000 (UTC)
现在鉴于:
发件人的 ISP 的邮件服务器都是干净的(似乎没有在任何黑名单中列出)
我显然不知道发件人如何向他们的 ISP 证明他们的电子邮件是合法的,但我认为确实发生了某种形式的身份验证
...我认为 spamassassin 不应该将该电子邮件标记为垃圾邮件。
准确地说:我的直觉告诉我 spamassassin 应该为直接从黑名单 IP 地址接收的邮件添加垃圾邮件分数。但是,如果邮件通过“干净”的 MTA(ISP 的邮件服务器),sa 应该假定“他们”(ISP)已采取适当的措施来确保电子邮件的合法性。
由于我运行我的设置已经有一段时间了,直到现在还没有很多误报,我想知道:
是上述预期的行为吗?
如果不是,是我这边的问题吗(例如,我错误地配置了我的垃圾邮件分析以将接收链的一部分考虑在内,它不应该考虑。如果是这样,我应该在哪里寻找修复?)
如果不是,是 ISP 方面的问题吗?(例如,他们应该更好地隐藏他们接受授权电子邮件的损坏IP地址。如果是这样,我应该直接向他们投诉吗?)
如果在邮件的Received 标头中列出了中继,则这些 SpamAssassin 规则匹配...
RCVD_IN_BL_SPAMCOP_NET
...在Spamcop DNSBL中,一个基于时间的自动阻止列表。RCVD_IN_SBL_CSS
对于Spamhaus CSS似乎不再存在,但RCVD_IN_SBL
对于包含 CSS 组件的Spamhaus SBL也是如此。虽然
RCVD_IN_SORBS_WEB
更接近您希望他们所有人做的事情:如果您不信任这些测试,您可以随时调整规则分数。
score RCVD_IN_BL_SPAMCOP_NET 0
如果测试匹配,则不添加任何分数,从而导致测试将完全禁用。Spamassassin 不需要仅针对最新的
Received:
标头进行测试,因为这是Received
来自您自己的 MTA 的,它可能已经完成了相同的测试,并且实际上拒绝了来自匹配 IP 地址的邮件,而不是将其标记为垃圾邮件。在Postfix
main.cf
中,等效的收件人限制是:并在ACL 中使用Exim 4.x:
acl_rcpt
exim.conf
如果您
dnslists
在模式下使用 Exim,您可以通过添加标头仅在最后一次 MTA 交付时warn
模拟样式规则RCVD_IN_*
X-blacklisted-at
然后在 Spamassassin 中对该标头的存在(或内容)进行评分,而不是
RCVD_IN_*
:请注意,这些拒绝列表对于您实际需要的内容可能太宽,例如,这
dnsbl.sorbs.net
是一个包含几乎所有可用 SORBS 区域的聚合区域。在根据这些列表拒绝甚至标记之前,您应该熟悉每个列表的目的,并决定您想要变得多么激进。就我个人而言,我更信任SPF、DMARC和贝叶斯过滤,并且在信任 DNSBL 方面非常敏感,即仅使用带有 IP 的列表,当然仅用于垃圾邮件,例如
smtp.dnsbl.sorbs.net
开放的 SMTP 中继服务器或edrop.spamhaus.org
包含“被劫持”的网络块。我找到了一个可以满足我要求的解决方案。可以调整这些黑名单规则以跳过第一个(不受信任的)跃点,而不是调整分数,
这是我所做的调整(更改只是
-notfirsthop
在表达式中添加后缀;例如zen
变成zen-notfirsthop
跳过对原始 IP 的检查):