最近我注意到我收到的一些垃圾邮件中有一个重复出现的模式。返回路径和发件人标头始终具有相同的结构。
让我用一个例子来解释一下:
Return-path: <[email protected]>
From: <[email protected]>
To: <[email protected]>
基本上,我想检查返回路径用户部分是否等于发件人用户部分,并添加收件人(“@”更改为“=”)并在收件人前面添加破折号。
我想使用一些 Postfixheader_checks
并拒绝该USER=DOMAIN.COM@
模式,但我收到的大多数合法新闻通讯在其返回路径中也包含该模式(除了之前有一个更复杂的字符串,它永远不会与发件人字段匹配)。
以前有人创建过这样的规则并愿意分享吗?
谢谢!
答案1
SpamAssassin 不允许您在其规则中编写代码或分配变量...。要执行您想要的操作,您最好编写自定义插件(这将使您能够完全访问 perl)。
ALL
也就是说,您可以从技术上执行您在 SpamAssassin 规则编写语法中通过使用标头类型(一次检查所有标头,有点像rawbody
规则)所要求的操作:
header RPATH_EMBEDS_TO_ADDR ALL =~ /\bReturn-Path:[^\r\n]{0,99}-([\w.])=([\w.-]{1,99}\.[a-z]{2,8})\@(?:[^\r\n]{0,99}[\r\n]{1,9}){1,30}To:[^\r\n]{0,99}<\1@\2>/ism
上述规则是昂贵的,如果允许用户名中有破折号,则成本会更高,因为它必须遍历([\w.-])
用户名的所有可能长度。这不仅因为需要大量回溯,还因为需要检查非常长的字符串,所以成本很高。此外,标题Return-Path
可能后标题To
,这意味着您需要第二条规则来让第二个正则表达式处理这种情况。
为这项技术编写自定义的 SpamAssassin 插件会更好。
但是,我想你很快就会发现,这一切都是针对某些类型的批量邮件,其中许多是合法的;Return-Path
标题被用作退回地址许多邮件列表将收件人编码到其中,以衡量其送达率并清理其列表。
如果你真的想要这种东西,我怀疑确切的To
地址是否是标题中存在的地址实际上并不重要Return-Path
。这是一个戏剧性地更快的规则应该具有几乎相同的功效:
header RPATH_EMBEDS_ADDR Return-Path =~ /-[\w.]{1,99}=[\w.-]{1,99}\.[a-z]{2,8}\@/i
另一个需要注意的是,每当邮件被重定向(例如电子邮件转发服务)时,标题Return-Path
都会被重写。这可能会限制该规则的垃圾邮件检测效用。