Spamassasin 正则表达式正文和标头检查不起作用

Spamassasin 正则表达式正文和标头检查不起作用

我们尝试使用 Spamassasin 中的一条简单规则将钓鱼邮件标记为垃圾邮件。但不幸的是,我们无法对其进行有效的检查。

基本上,我们想要实现的是,如果邮件的发件人是不是来自我们的域名@example.org,但正在使用伪造的显示名称。

以下是一个例子:

From: "Firstname Lastname <[email protected]>" <[email protected]>

因此我们制定了以下 SA 规则,但没有奏效

header __FRAUD_HEADER From =~ /.*@(?!example\.org)/i 
body __FRAUD_BODY /".*\@example\.org.*"(?!.*\@example\.org.*$)/i 
meta COMPANY_FRAUD (__FRAUD_HEADER && __KFRAUD_BODY) 
describe COMPANY_FRAUD Fake Sender - Phishing Attempt 
score COMPANY_FRAUD 100

对于为什么这没有成功,有什么想法吗?

regex101.com 告诉我们正则表达式是正确的。Spamassasin 也没有抱怨错误。

编辑:我想我搞错了他们如何伪造发件人。这是我认为他们如何伪造/伪装发件人地址的摘录

# telnet mail.example.org 25
Trying 10.20.30.40...
Connected to mail.example.org.
Escape character is '^]'.
220 mail.example.org ESMTP
EHLO a.mailserver.com
250-mail.example.org
250-PIPELINING
250-SIZE
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
MAIL FROM:[email protected]
250 2.1.0 Ok
RCPT TO: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
TO: [email protected]
FROM: "Firstname Lastname" [email protected]
SUBJECT: Something
Spam/Phishing message text goes here
.
250 2.0.0 Ok: queued as 123456789
quit
221 2.0.0 Bye
Connection closed by foreign host.

提出的解决方案有效!

答案1

您的原始规则:

header __FRAUD_HEADER From =~ /.*@(?!example\.org)/i 
body __FRAUD_BODY /".*\@example\.org.*"(?!.*\@example\.org.*$)/i 
meta COMPANY_FRAUD (__FRAUD_HEADER && __KFRAUD_BODY) 
describe COMPANY_FRAUD Fake Sender - Phishing Attempt 
score COMPANY_FRAUD 100

一些批评:

  • 我发现一个拼写错误:您的元规则依赖于__KFRAUD_BODY而不是__FRAUD_BODY
  • 这些真的很贵。除非万不得已,否则尽量不要使用环视
  • 我建议用你自己的名字来命名你的规则,这样你就能记住它们是你的
  • 你真的想在正文正则表达式中使用双引号吗?这可能是问题所在
  • 这真的应该是正文正则表达式吗?您是否尝试匹配内联转发元数据?
  • 鉴于你的阈值应该在 5-10 之间,因此 100 分的分数太高了

怎么样:

header __DW_NONFRAUD_HEADER  From:addr =~ /\bexample\.org$/i 
body   __DW_FRAUD_BODY       /"[^"]{0,99}\@example\.org\b[^"]{0,99}"(?!.{0,99}\@example\.org\b)/i 
meta     DW_COMPANY_FRAUD    (!__DW_NONFRAUD_HEADER && __DW_FRAUD_BODY) 
describe DW_COMPANY_FRAUD    Fake Sender - Phishing Attempt 
score    DW_COMPANY_FRAUD    3

我否定了您的第一次检查,并将其限制为仅针对发件人标题中的地址(请参阅规则的修订meta)。我还放入了大量的单词边界 ( \b) 标记,以确保您不会遇到“myexample.org”或“example.org.in”或其他奇怪的东西。无限范围非常昂贵,因此我将它们缩减为 0-99 个字符,并通过阻止它们匹配双引号来确保您不会看得太远。我还删除了您的,$因为 SpamAssassin 会折叠所有空格(行尾可能不在您认为的位置;最好使用\b和类似的)。

我认为 3 分已经很高了。其他分数不高的话,您可能需要考虑 SA 的黑名单功能。

实际上,你应该确保已经正确安装和配置了 SpamAssassin 的插件密钥管理信息系统防晒指数, 和DMARC(这些是反欺骗技术,可以实现您要执行的大部分操作)。您的域名解析URI 域名服务配置正确并且您正在使用(和培训!)贝叶斯. 第三方模糊查找,如剃刀皮佐尔还可以帮助捕获错过的垃圾邮件。

我之所以这么说,是因为这条规则费力、昂贵,而且不可扩展(您需要为每个域创建一个),但主要是因为它看起来并不有效(目标“签名”并不是很垃圾,您会得到误报)。

相关内容