有没有办法让 spamassassin 对邮件正文的顶行进行更重的评分?

mat*_*tdm 9 spam spamassassin

许多垃圾邮件通过我运行的邮件服务器上的过滤器,使用相对简单的技巧,从顶部的几行(非常明显的)减肥或其他骗局文本开始,然后是来自编程文档的较大正文— 或者,最邪恶的是,从 Stack Exchange 中抓取的文本。充其量,Spamassassin 将其视为 BAYES_50,并且碰巧其余消息的构造足够仔细,以至于它们不会命中其他触发器。(例如,标题是最小的和正确的。)通常,所包含的摘录与我的合法利益密切相关,以至于邮件的整体评分为 BAYES_00,因为非常垃圾的令牌只是被系统管理员解决问题的多汁金块所淹没。

最上面的部分显然是垃圾邮件(事实上​​,它往往与之前作为垃圾邮件接收和训练的垃圾邮件非常相似),以至于我有点惊讶它竟然能通过——但显然确实如此。这似乎是一个单独的传球,它对消息的前 25 行(左右)进行了评分,并且权衡重重将解决问题。有没有办法做到这一点?


有几个人建议编写自定义正则表达式。我不想进入这个,因为这是一场不断失败的战斗。这是人们在贝叶斯垃圾邮件分类广泛使用之前所做的,而且通常很糟糕。没有人能跟上。这并不比为每条垃圾邮件点击删除键更有效,而且我需要做更多的工作。

贝叶斯垃圾邮件过滤工作。它甚至适用于这个垃圾邮件,如果我把“折叠上方”部分分开并只分析那部分,去掉诱饵/箔条。问题是:我怎样才能让 Spamassassin 做到这一点?

小智 1

我自己就是一个(小小的)生动的反垃圾邮件斗士。由于你遇到的许多问题,几年前我最终自己做了肮脏的事情。

现在,这不是对您特定问题的答案,而是对您特定问题的答案。所以请不要因此而投反对票。

我解决这个问题的方法是修改 XMail 服务器使用的 sa_filter-post.pl 脚本,该脚本在电子邮件文件上调用 spamc 并在那里做一些小事情,不是处理整个文件,而是处理它的特定部分,基于一些特定的规则(由我硬编码)。是的,正则表达式,但到目前为止它们对我有用(我在这个脚本之前和之后确实有一堆其他脚本,因此可能会发挥作用)

例如,我有一个可以提取电话号码的正则表达式。垃圾邮件发送者将其保留完整,因此直接只处理文件的中间 400 个字符(通过反复试验,我确实从 200 个字符开始处理到了 400 个字符)。请注意,与文件中的内容相比,很难从您所看到的内容中找出中间内容。

还有一个与 html 表具有相同的结构,其中包含“产品”、虚拟页眉和不可用的页脚,因此我将其删除,将“产品”注释列删除,然后将其传递给 spamc。

等等,你就明白了。

但并不是所有的规则都是完美的,所以我在这里做了一点魔法,为每个规则分配一个私人分数,我根据规则的行为方式对这些分数进行硬编码并在需要时向上或向下调整(有时我最终会一起删除所有规则) )。然后我用私人分数修改 SA 分数。我这样做的原因是因为出于某种原因 SA 只给出了像 4 这样的分数。一些明显的垃圾邮件规则,我也有强烈的感觉要抓住它们。因此,我给了他们一点点提升,使其超过 5.0,再加上一些考虑其他变量(电子邮件来源、电子邮件目标、标头结构等)的后处理脚本,它或多或少会杀死垃圾邮件出去。

现在我意识到这不是你所希望的,但就我而言,它给了我很大的权力来控制扫描的内容,只是我需要手动设置,然后时不时地进行一些触摸-值/正则表达式的 ups。

但在你的情况下,事情要容易得多,因为你所要做的就是使用一个简单的 bash 脚本,该脚本将由你的 MX 而不是 spamc 调用,并让该脚本使用 head 命令只获取你想要的第一个字节数,将该临时文件传递给 spamc。

脚本的内容在一定程度上取决于您的邮件服务器,但这应该不难理解。

(请注意,我只谈论了我的大部分设置,以便您可以看到此选项的可能性)

PS:我个人从来没有收到过这种垃圾邮件(里面有与编程相关的好东西),所以我想知道你是否还没有激怒某人,现在你成为了目标。这可以解释特制的电子邮件。我之所以想到这种可能性,是因为几年前,当我在各种 IT 论坛和群组中非常活跃时,我确实惹恼了一些人,并且我的服务器时不时地受到各种类型的攻击,包括垃圾邮件。但那时候的白痴可没这么聪明:)