我注意到大量垃圾邮件与同一范围的 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_PBL
和RCVD_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 连接
HELO
和mail 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;
。