![SpamAssassin、Postfix 和发件人标头中的多个地址](https://linux22.com/image/732571/SpamAssassin%E3%80%81Postfix%20%E5%92%8C%E5%8F%91%E4%BB%B6%E4%BA%BA%E6%A0%87%E5%A4%B4%E4%B8%AD%E7%9A%84%E5%A4%9A%E4%B8%AA%E5%9C%B0%E5%9D%80.png)
我正在处理电子邮件扫描服务器(MailScanner、Spamassassin、Postfix 等)和发件人邮件头欺骗方面的问题。不幸的是,这些组件的某些版本较旧,因此这可能是其中一个或多个组件中的错误。计划进行升级,我只是看看临时解决方案是否合适,或者这是否是需要延续到升级环境的配置/规则问题。
基本上,我看到收到的消息在发件人标头中包含多个地址。这本身似乎符合 RFC 规定,但据我所知,通常不会满足特定条件,但是我发现我们的环境记录的几乎每个示例都是欺骗性/恶意消息。
这里有几个例子,均来自不同的信息,名字均已更改以保护(可能的)无辜者:
From: "[email protected]" <[email protected]> <[email protected]>
From: John Doe <[email protected]> <[email protected]>
From: "Trusted Third Party Employee" <[email protected]> <[email protected]>
Outlook 等电子邮件客户端似乎只显示第一个地址。MailScanner/SpamAssassin 使用最后一个地址。
基本上,类似下面的正则表达式似乎可以捕获这些问题(无论是在 Postfix 中的 header_check 中还是在 Spamassassin 中的规则中):
^From: .*?<[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}>.*<[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}>
我确信这个正则表达式很糟糕,并且可能有更优雅的方法来匹配上面的例子。;)
如果相关的话,我可以分享具体的配置片段。
有什么想法吗?
答案1
目前,我正在打击这种垃圾邮件,并补充伟大的回答的深挖者目前我有这条规则在我的 Spamassassin 中。
describe LOCAL_TWO_FROM_EMAILS The From has two emails, probably email spoofing
header LOCAL_TWO_FROM_EMAILS From =~ /<.*\@.*>\s+<.*\@.*>/i
score LOCAL_TWO_FROM_EMAILS 9.0 # Set this value at your discretion
正则表达式部分需要改进,但是这条规则帮助我阻止了大多数被这个格式错误的标题欺骗的电子邮件。
答案2
据我所知,所有这些发件人标头都违反了 RFC。发件人标头中可以有多个地址,但它们必须用逗号分隔。
看:
因此邮件服务器应该拒绝该电子邮件(恕我直言)。如果没有,您可以添加标头检查以验证 RFC 格式,否则拒绝该电子邮件。但这个正则表达式会很复杂且丑陋,因为 RFC 允许在显示名称中使用几乎所有内容。
例如这是合法的
From: "[email protected] <[email protected]>" <[email protected]>
实际上,我一生中从未收到过包含多个发件人地址的有效电子邮件。此外,我认为显示名称中的所有内容都是垃圾,因为这完全由发件人决定。已知的电子邮件地址无论如何都在我的地址簿中(因此它们会显示在我的电子邮件客户端中),对于所有其他地址,我可以丢弃显示名称以防止网络钓鱼。
换句话说,如果 SpamAssassin 使用标题行中的最后一个有效电子邮件地址作为真实地址,您可以执行相同操作并删除其他所有内容:
/^From:.*[[:space:]]+<?([a-zA-Z0-9._?=#$|'*%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,63})>?[[:space:]]*$/ REPLACE From: ${1}
注意:匹配有效电子邮件地址格式的模式在形式上并不正确,但很实用。另请参阅https://www.regular-expressions.info/email.html有关电子邮件地址格式正则表达式的讨论。