來自標頭中的 SpamAssassin、後綴和多個地址
我正在解決我在電子郵件掃描伺服器(MailScanner、Spamassassin、Postfix 等)和來自標頭欺騙方面看到的問題。不幸的是,這些組件的某些版本很舊,因此這可能是其中一個或多個組件的錯誤。計劃升級,我只是看看臨時解決方案是否合適,或者這是否是需要延續到升級環境的配置/規則問題。
基本上,我看到在 From 標頭中包含多個地址的消息通過。這本身似乎是符合 RFC 的,據我所見,通常不滿足特定條件,但是幾乎我能發現我們的環境已記錄的每個範例,這是一個欺騙/惡意消息。
以下是一些範例,均來自不同的消息,名稱已更改以保護(可能)無辜者:
From: "confirm@amazon.com" <confirm@amazon.com> <bad@hacker.man> From: John Doe <jdoe@internet.com> <spoof@ing.mail> From: "Trusted Third Party Employee" <trusted.employee@thirdparty.org> <spammer@foo.vn>
像 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}>
我確信這個正則表達式很糟糕,並且可能有更優雅的方式來匹配上面的例子。;)
如果相關,我可以分享特定的配置片段。
有什麼想法嗎?
目前我正在與這種垃圾郵件作鬥爭,為了補充 Deepdigger 的出色答案,我的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
正則表達式部分需要改進,但這條規則幫助我阻止了大多數電子郵件被這個格式錯誤的標頭欺騙。
據我所知,所有這些 From 標頭都違反了 RFC。From 標頭中可以有多個地址,但它們必須用逗號分隔。
看:
所以郵件伺服器應該拒絕該電子郵件(恕我直言)。如果沒有,您可以添加標題檢查以驗證 RFC 格式,否則拒絕電子郵件。但是這個正則表達式會很複雜而且很難看,因為 RFC 幾乎允許顯示名稱中的所有內容。
例如,這將是合法的
From: "confirm@amazon.com <confirm@amazon.com>" <bad@hacker.man>
實際上,我一生中從未收到過包含多個發件人地址的有效電子郵件。此外,我認為顯示名稱中的所有內容都是垃圾,因為它完全由發件人自行決定。無論如何,已知的電子郵件地址都在我的地址簿中(因此它們顯示在我的電子郵件客戶端中),對於所有其他人,我可以丟棄顯示名稱以防止網路釣魚。
換句話說,如果 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。