Spamassasin 规则标记特定 MX IP

Spamassasin 规则标记特定 MX IP

我注意到大量垃圾邮件与同一范围的 IP 相关。

所有垃圾邮件都有不同的 HTML 文本(虽然是英文的,但毫无意义)和一些嵌入的图片(我屏蔽了),但实际上显然是机器生成的,内部格式非常相似。顺便说一句,所有链接和外部图片都被我的邮件程序屏蔽了。

我注意到的是,“发件人”地址域的 MX 都位于一小段 IP 范围内,它们都位于同一个 VPS 服务“Node Outlet India LLP”上。所以有人正在使用此服务来托管垃圾邮件机器人农场。

我想生成一个 spamassassin 规则,内容如下:

  • 提取“来自”域
  • 查找该域名的 MX
  • 查找该 MX 的 IP
  • 它看起来像 36.255.24.x/21 吗
  • 给它一个高分,例如 +2

我使用在 Linux 上运行的 spamd 代理和 spamassassin。

为了说明起见,这里有一个例子:垃圾邮件来自 [电子邮件保护]

源邮件通过了 SPF、DMARC 和 DKIM 签名 - 全部合法 - 但它是垃圾邮件。仅凭这些检查,它就被评为正常邮件。

唯一像垃圾邮件的是内容。大部分是 HTML 和域外链接嵌入图片和少量文本,只有这些功能让它有垃圾邮件评分,但分数不高。这些电子邮件显然是为了避开反垃圾邮件措施而设计的。

我对 stufftobuy.com 执行 MX RR DNS 查找,您会得到 mail.stufftobuy.com,对 mail.stufftobuy.com 执行 A RR DNS 查找,它会从所有来自域 MX 记录指向的少数地址范围之一返回 IPV4。

我需要做更多的分析,但它似乎仅来自两个服务器场,一个在印度,另一个在土耳其。

在 1000 封电子邮件中,单个 IPV4 可能只会出现两次。

我不能直接评分或屏蔽 stufftobuy.com,因为该实际域名只能使用一次。下一条消息可能来自 makecatvids.com 或其他地方。

同样,我不能盲目地阻止 postfix 中的数千个 IPV4,因为这样会让人认为 ISP 很糟糕,而不是他们的客户之一。

更新:我可以看到askdns 插件存在,但我看不出一条规则如何融入另一条规则。单一的 DNS 查找是不够的。

答案1

更重要的是:确保您使用的是发件人 IP 信誉,例如通过Spamhaus 禅SpamCop 阻止列表。默认情况下,这些已包含在 SpamAssassin 中(请参阅RCVD_IN_PBLRCVD_IN_BL_SPAMCOP_NET),只需确保您已邮件::SpamAssassin::插件::DNSEval正确加载并且您在启用网络测试的情况下运行(这也是 AskDNS 所必需的)。

邮件::SpamAssassin::插件::AskDNS无法做到这一点。您需要编写自己的插件才能完成您想要的操作。

但是,也许这样使用 AskDNS 可以让你接近:

ifplugin Mail::SpamAssassin::Plugin::AskDNS

askdns   JM_SPF_HAS_36_255 _AUTHORDOMAIN_ TXT /\sip4:36\.255\.(?:2[0-4]|3[01])\./
describe JM_SPF_HAS_36_255 From header's SPF record blesses an IP in 36.255.24.0/21
score    JM_SPF_HAS_36_255 2.0

endif

这将检查发件人策略框架标头发件人域的 (SPF) 记录。注意事项:

  • SPF 是允许发送代表域名发送邮件(见下文)
  • SPF 检查 SMTP 连接HELOmail from命令中的域,不是标题
  • SPF 记录可以包含域,可以包括其他记录等,但此规则仅查看 IP
    例如:v=spf1 ip4:198.51.100.21 mx a include:example.com ~all存在问题:
    • 此处仅明确列出了一个 IP,且不匹配
    • MX 记录可能匹配,但它被列为仅此而已mx,我们无法将其解析为 IP
    • A 记录也是如此
    • 同上,也许有一个a或另一个include:…可能列出此 IP

关于第一点:MX 记录指的是接收邮件,因此我认为 SPF 的允许列表发送尽管我无法说出您的确切意图,但在一般情况下,主持人更为相关。


更新:你提到这些垃圾邮件密钥管理信息系统-signed。假设它们都共享相同的签名域,只需基于此进行阻止(无需网络查找!):

header   JM_DKIM_EVIL_EXAMPLE_COM  DKIM-Signature =~ /\sd=evil\.example\.com;/
describe JM_DKIM_EVIL_EXAMPLE_COM  Message has DKIM signed by evil.example.com
score    JM_DKIM_EVIL_EXAMPLE_COM  2.0

您需要为每个找到的签名域 ( d=…) 指定一条规则,我认为这个数字很小。
或者,您可以使用正则表达式交替。例如:
/\sd=(?:(?:evil|spammer)\.example\.com|bad\.example\.info);/将阻止d=evil.example.com;d=spammer.example.com;d=bad.example.info;

相关内容