Spamassassin规则来比较返回path和来自域

最近我注意到了一些我得到的垃圾邮件中的重复模式。 返回path和标题始终具有相同的结构。

我举个例子来解释一下:

Return-path: <[email protected]> From: <[email protected]> To: <[email protected]> 

基本上,我想检查返回path的用户部分是否等于From用户部分,添加了To(“@”改为“=”),并在To前加上一个破折号。

我想使用一些Postfix的header_checks并拒绝USER=DOMAIN.COM@模式,但是我收到的大多数合法的新闻组都包含在它的返回path中(除了之前有一个更复杂的string,它与From字段不匹配) 。

有没有人创造过这样的规则,并且关心分享?

谢谢!

SpamAssassin不允许您在其规则中编写代码或分配variables… 做你想做的事情,你最好编写一个自定义的插件(这将使你完全访问Perl)。

也就是说,你可以通过使用标题typesALL (它一次检查所有头文件,类似于rawbody规则)在技术上做你在SpamAssassin规则编写语法中要求的内容:

 header RPATH_EMBEDS_TO_ADDR ALL =~ /\bReturn-Path:[^\r\n]{0,99}-([\w.])=([\w.-]{1,99}\.[az]{2,8})\@(?:[^\r\n]{0,99}[\r\n]{1,9}){1,30}To:[^\r\n]{0,99}<\1@\2>/ism 

上面的规则是昂贵的 ,如果你允许在用户名中使用破折号,它将会更加昂贵,因为它将不得不遍历用户名的所有可能的长度([\w.-]) 。 这个代价很高,不仅因为它需要大量的回溯,还因为它需要检查很长的string。 另外, Return-Path头部可能 To头部后面 ,这意味着你需要第二个正则expression式来处理这种情况。

为这个技术写一个定制的SpamAssassin插件会更好。

不过,我想你很快就会发现,这一切都是针对某些types的大宗邮件,其中许多是合法的。 Return-Path头被用作退回地址,并且许多邮件列表将收件人编码到其中以便测量其传送能力并清理其列表。

如果你真的想要这样的事情,我怀疑它实际上并不重要,确切的To地址是在Return-Path头。 这是一个显着更快的规则,应该有几乎相同的功效:

 header RPATH_EMBEDS_ADDR Return-Path =~ /-[\w.]{1,99}=[\w.-]{1,99}\.[az]{2,8}\@/i 

另外值得一提的是,无论何时redirect邮件(例如电子邮件转发服务), Return-Path标题都会被重写。 这可能会限制该规则的垃圾邮件检测实用程序。