spamassassin 对来自拨号地址的电子邮件有误报

spamassassin 对来自拨号地址的电子邮件有误报

我主要是一个 spamassassin (3.4.0-6) + exim4 (4.84.2) 的快乐管理员,在 Debian/jessie 系统上设置服务器端垃圾邮件过滤。

最近有用户报告了一些误报。仔细检查后发现,合法的电子邮件

  1. 从某个拨号 IP 地址发送(该地址被列入多个黑名单)
  2. 传递给发件人 ISP 的邮件服务器(使用他们现有的任何身份验证),
  3. 然后将电子邮件发送到我的邮件服务器
  4. 由于“已接收”邮件头中的一个 IP 被列入黑名单,因此该邮件被标记为垃圾邮件

spamassassin 匹配了一些黑名单规则(RCVD_IN_BL_SPAMCOP_NETRCVD_IN_SBL_CSSRCVD_IN_SORBS_SPAMRCVD_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 地址。如果是这样,我应该直接向他们投诉吗?)

答案1

这些 SpamAssassin 规则符合条件消息中的中继已接收标头被列入...

尽管RCVD_IN_SORBS_WEB更接近于你希望他们做的事情:

检查测试的 IP 地址最后一个不受信任的中继违反 SORBS 维护的 DNSBL。

如果你不相信这些测试,你可以随时调整规则分数.score RCVD_IN_BL_SPAMCOP_NET 0如果测试匹配则不会增加任何分数,导致测试将被完全禁用。

Spamassassin 无需仅针对最新的Received:标头进行测试,因为这是Received来自您自己的 MTA 的,它可以执行相同的测试并实际拒绝来自匹配 IP 地址的邮件,而不是将其标记为垃圾邮件。

后缀 main.cf同等的接收者限制将是:

smtpd_recipient_restrictions =

    reject_rbl_client sbl.spamhaus.org,
    reject_rbl_client bl.spamcop.net,
    reject_rbl_client dnsbl.sorbs.net

Exim 4.xacl_rcptACL中exim.conf

deny     message  =  Access denied - $sender_host_address\
                     listed by $dnslist_domain\n$dnslist_text
         dnslists =  sbl.spamhaus.org : \
                     bl.spamcop.net : \
                     dnsbl.sorbs.net

dnslists如果您在模式下使用 Exim warn,则可以通过添加标头来模拟RCVD_IN_*仅在最后一个 MTA 交付中执行的样式规则X-blacklisted-at

warn     message  =  X-blacklisted-at: $dnslist_domain
         dnslists =  sbl.spamhaus.org : \
                     bl.spamcop.net : \
                     dnsbl.sorbs.net

然后在 Spamassassin 中对该标头的存在性(或内容)进行评分,而不是RCVD_IN_*

header LAST_RCVD_BLACKLISTED exists:X-blacklisted-at
score LAST_RCVD_BLACKLISTED 10.0

请注意,这些拒绝列表可能太宽泛,不适合您的实际需要,例如,这dnsbl.sorbs.net是一个包含几乎所有有 SORBS 区域。在根据这些列表拒绝甚至标记之前,您应该熟悉每个列表的用途,并决定您想要的积极程度。

我个人相信防晒指数DMARC贝叶斯过滤更多,并且在信任 DNSBL 时非常敏感,即只使用仅用于垃圾邮件的 IP 列表,例如smtp.dnsbl.sorbs.net开放 SMTP 中继服务器或edrop.spamhaus.org包含“被劫持的”网络块。

答案2

我找到了一个可以满足我要求的解决方案。无需调整分数,只需调整黑名单规则即可跳过第一个(不受信任的)跳转,

这是我所做的调整(变化只是-notfirsthop在表达式中添加后缀;例如,zen跳过zen-notfirsthop对原始 IP 的检查):

header RCVD_IN_SBL              eval:check_rbl_sub('zen-notfirsthop', '127.0.0.2')
header RCVD_IN_SBL_CSS      eval:check_rbl_sub('zen-notfirsthop', '127.0.0.3')
header RCVD_IN_BL_SPAMCOP_NET   eval:check_rbl_txt('spamcop-notfirsthop', 'bl.spamcop.net.', '(?i:spamcop)')

相关内容