在 .procmailrc 中的标题中检测来自随机域名的垃圾邮件

在 .procmailrc 中的标题中检测来自随机域名的垃圾邮件

垃圾邮件来自一个知名组织,该组织大量销售从无人机到扫地机器人等各种仿冒品,并在From:Message-ID:Reply-To:字段中使用随机域名, 完全不同,甚至没有共同的尾随xyz.com
(非垃圾邮件往往至少共享Message-ID:和 的域名Reply-To:。)

~/.procmailrc 中的配方能否检测到此类垃圾邮件,然后将其转发到垃圾邮件文件夹?

  • 喜欢带有命名捕获组的正则表达式吗?

  • 关于使用“A”或“a”链接动作的一些信息?

  • 按照其手册页的建议,递归调用 procmail?

  • 将邮件标题传递给用具有更好的字符串处理能力的语言编写的脚本的“过滤器”?


例如:namebrandwigs.com、mysuburbankitchen.com、aliyun.com。

From [email protected]  Wed Mar 17 09:27:54 2021
Return-Path: <[email protected]>
X-Original-To: ---
Delivered-To: ---
Received: from mysuburbankitchen.com (unknown [5.253.84.113])
        by --- (Postfix) with ESMTP id 332025E236
        for <--->; Wed, 17 Mar 2021 09:27:53 -0500 (CDT)
To: ---
Subject: drone with new features
Message-ID: <[email protected]>
Date: Wed, 17 Mar 2021 08:13:03 +0100
From: "Jake Allen" <[email protected]>
Reply-To: [email protected]
MIME-Version: 1.0
X-Mailer-Sent-By: 1
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: 8bit
Status: RO

<html>
<head>
</head>
<body>
<span style="display: block; text-align: left;"><span style="display:
block; text-align: left;">Hi,<br /><br /><span>Hope all is well.</span><br
/>We are contacting you today to let you know that we have got the
following new drone, ready to ship to worldwide customers.<span><span><br
/><br /></span></span></span></span><span style="display: block;
text-align: left;"><span style="display: block; text-align:
left;"></span></span><span style="display: block; text-align: left;"><span
style="display: block; text-align: left;"><span style="display: block;
text-align: left;"></span></span></span><span style="display: block;
text-align: left;">Explore new places and amp up your videography skills
with the our F9 4K HD camera drone.
...

其他示例,格式类似,但邮件正文中缺少可标记的文本:

  • 来自 motivationwatch.com / musicalley.com 的皮革按摩椅
  • 来自 mtndewkid.com / myhondafitev.com / constructiongear.com 的 roomba
  • 来自 hairrehablondon.com / hairocean.com / hotmail.com 的视频投影仪

答案1

这是一个 Procmail 配方,它实现了我思考你可能会问。

它用得分这是一个有点晦涩但偶尔有用的功能。简而言之,如果From:标头带有域名(因为总是有域名),我们会分配 1 分,然后如果Reply-To:Message-Id:标头在 后有相同的字符串,则从分数中减去 1 分@

:0:
*    1^0 ^From:.*@\/[^@<>   ]+
* $ -1^0 ^Message-Id:.*@$\MATCH\>
* $ -1^0 ^Reply-To:.*@$\MATCH\>
suspicious

我预测这将有相当高的误报率,但如果你收到大量包含这种特定模式的垃圾邮件,也许它可以为你提供价值,特别是如果你能将它与白名单结合起来。

我仍然建议您suspicious定期检查文件夹,并将任何误报找出并放回到您的常规收件箱中。

这是使用您提供的示例进行的演示,/dev/null仅供演示使用。

bash$ procmail -m VERBOSE=yes /tmp/procmailrc </tmp/sample 
procmail: [16] Fri Mar 19 09:06:29 2021
procmail: Rcfile: "/tmp/procmailrc"
procmail: Assigning "MAILDIR=/home/tripleee"
procmail: Assigning "MATCH="
procmail: Matched "namebrandwigs.com"
procmail: Score:       1       1 "^From:.*@\/[^@<>  ]+"
procmail: Score:       0       1 "^Message-Id:.*@()namebrandwigs\.com\>"
procmail: Score:       0       1 "^Reply-To:.*@()namebrandwigs\.com\>"
procmail: Assigning "LASTFOLDER=/dev/null"
procmail: Opening "/dev/null"
 Subject: drone with new features
  Folder: /dev/null                            1373

一个具体的复杂之处在于,这不允许子域名命中;允许发送者并不难,但相反的情况要棘手得多,因为在一般情况下,你无法真正知道域名是(例如在和TLD 中)还是(例如在 等 TLD 中)或者甚至更长(就像和日本的一些县的情况一样,等等)。Message-id: <[email protected]>From: real name <[email protected]>From: sender <[email protected]>labels.here.com.frmany.labels.here.co.uk.com.auk12.place.name.us

更详细地说,为第一个配方行中的第一个匹配1^0分配一个1分数,而其他匹配则不加分。标记从匹配的字符串中捕获其后的字符串,即标题中\/最后一个符号后的所有内容。然后在以下配方行中使用该变量来引用此捕获的字符串;语法生成与文字字符串匹配的正则表达式转义模式。后续配方有一个标志,用于告诉 Procmail 将任何变量(即)插入配方条件,以及一个计分指令,用于为条件的第一次匹配减一,然后如果再次匹配则不减一。@MATCH$\MATCH$$MATCH-1^0

手册页解释了所有这些构造,但可能相当复杂;也许还可以参阅Procmail 快速参考虽然其内容更加密集,但或许也更容易阅读和理解。

我将其作为一个单独的答案发布,以免将此处的内容与我的其他答案混淆,该答案基本上是试图阻止您仅使用 Procmail 创建自己的垃圾邮件过滤器。

答案2

基于一些有限的例子,很难想出任何具体的东西,今天行之有效,明天继续有效。如果你的实际的问题实际上是“我如何才能防止 Procmail 发送垃圾邮件”,对此的明显、简单且有据可查的答案是“运行像 SpamAssassin 这样的全光谱垃圾邮件过滤器并检查其结果”。即便如此,您的准确率可能永远不会达到 100%;但对于一个您只需配置并忘记的工具来说,SpamAssassin 做得不错。它广泛依赖于外部服务,这些服务为垃圾邮件发送者使用的 IP 地址、URL 和其他网络资源提供动态信誉信息,因此实际上在幕后进行了大量操作。

SpamAssassin wiki 上的 UsedViaProcmail有更多说明。简而言之,安装并配置好 SpamAssassin 后,请尝试以下操作

:0fw
* < 512000
| spamassassin

:0:
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
almost-certainly-spam

:0:
* ^X-Spam-Status: Yes
probably-spam

第二个冒号:0:只有在您向需要锁定的邮箱发送邮件时才是正确的(例如 mbox 文件,但绝对不是 Maildir 目录;但根据您问题中的示例,您似乎在 mbox 上)。如果您经常收到大垃圾邮件,也许可以删除大小条件* < 512000或调整数字。SpamAssassin 标准 Procmail 样板包含一个锁定文件,这在您的个人系统上是不必要的,在共享主机上可能是可疑的,还有一些围绕断线的奇怪的货物崇拜巫术,From我认为这实际上从来都不正确。

如果您想要针对您提供的样本的具体建议,请理解,即使经过深入研究且绝对真实的事实可以让您完全有信心地丢弃这些特定消息,不会出现误报,但对于处理任何其他消息几乎毫无用处,和/或明天或下周就会过时。

相关内容