我们正在尝试使用 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.
建议的解决方案奏效了!
你原来的规则:
一些批评:
__KFRAUD_BODY
而不是__FRAUD_BODY
怎么样:
我已经否定了您的第一次检查并将其限制在 From 标头中的地址(请参阅
meta
规则的修订)。我还添加了大量的单词边界 (\b
) 标记,以确保您不会发现“myexample.org”或“example.org.in”或其他奇怪的东西。无限范围非常昂贵,因此我将它们缩减为 0-99 个字符,并通过防止它们匹配双引号来确保您不会看得太远。我还删除了你的,因为 SpamAssassin 会折叠所有空格(行尾可能不是你认为的位置;使用和类似$
的效果要好得多)。\b
我认为3分是非常高的。其他任何事情,您可能都想考虑 SA 的黑名单功能。
确实,您应该确保已正确安装和配置 SpamAssassin 的DKIM、SPF和DMARC插件(这些反欺骗技术可以实现您正在尝试做的大部分事情)。您的DNSBL和URI DNSBL配置正确,并且您正在使用(和培训!)Bayes。Razor和Pyzor等第三方模糊查找也可以帮助捕获错过的垃圾邮件。
我说这些是因为这条规则费力、昂贵且无法扩展(您需要为每个域创建一个),但主要是因为它看起来并不有效(目标“签名”不是非常垃圾邮件,而且您会得到误报)。