Spamassasin正则expression式正文和标题检查不工作

我们正在尝试在Spamassasin中用一个简单的规则来标记networking钓鱼邮件作为垃圾邮件。 但不幸的是,我们无法得到一个工作检查。

基本上我们试图实现的是,如果邮件的发件人不是来自我们的域@ 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让我们知道正则expression式是正确的。 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. 

build议的解决scheme工作!

你原来的规则:

 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
  • 那些真的很贵。 除非必须,否则请尽量不要四处张望
  • 我build议你自己定义规则,这样你就可以记住它们是你的
  • 你真的想要这些正则expression式中的双引号? 这可能是问题
  • 这真的应该是一个正则expression式吗? 您是否尝试匹配内嵌转发元数据?
  • 考虑到你的门槛应该在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 

我已经否定了你的第一个检查,并将它限制在From头的地址(参见meta规则的修订版)。 我也放了大量的文字边界( \b )标记,以确保您不会抓到“myexample.org”或“example.org.in”或其他古怪的东西。 无限的范围是非常昂贵的,所以我已经把它们修剪成0-99个字符,并且通过防止它们匹配双引号来确保你不会看得太远。 我也删除了你的$因为SpamAssassin崩溃了所有的空白(行结束可能不是你认为的地方;使用\b和类似的要好得多)。

我认为3分是非常高的。 除此之外,你可能想要考虑SA的黑名单function。

实际上,您应该确保已经正确安装并configuration了SpamAssassin的DKIM , SPF和DMARC插件(这些插件是反欺骗技术,可以实现您正在尝试做的许多事情)。 您的DNSBL和URI DNSBLconfiguration正确,并且您正在使用(和训练!) 贝叶斯 。 像Razor和Pyzor这样的第三方模糊查找function也可以帮助您发现垃圾邮件。

我说这些东西是因为这个规则是费力的,昂贵的,而且没有规模(你需要为每个域创build一个),但主要是因为它看起来并不有效(目标“签名”不是非常垃圾的,会得到误报)。