spamassassin 誤報來自撥號地址的電子郵件
我主要是 spamassassin (3.4.0-6) + exim4 (4.84.2) 的快樂管理員,在 Debian/jessie 系統上設置伺服器端垃圾郵件過濾。
最近有使用者報告了一些誤報。仔細檢查後發現,合法的電子郵件是
- 從某個撥號 IP 地址發送(在多個黑名單中列出)
- 傳遞到發件人的 ISP 的郵件伺服器(使用他們現有的任何身份驗證),這
- 然後將電子郵件發送到我的郵件伺服器
- 將郵件標記為垃圾郵件,因為“已接收”標頭中的 IP 之一被列入黑名單
spamassassin 匹配了一些黑名單規則(
RCVD_IN_BL_SPAMCOP_NET
,RCVD_IN_SBL_CSS
,RCVD_IN_SORBS_SPAM
,RCVD_IN_SORBS_WEB
)。請注意,由於 IP 被列入黑名單,電子郵件僅獲得了正面分數。觸發垃圾郵件標記的電子郵件中的相關標題是:
Received: from [10.126.95.175] (unknown [109.126.64.1]) by smtpfilter1.public.one.com (Halon) with ESMTPSA id ee1f1e82-251c-11e7-8f0e-b8ca3afa9d73; Wed, 19 Apr 2017 16:26:25 +0000 (UTC)
現在鑑於:
- 發件人的 ISP 的郵件伺服器都是乾淨的(似乎沒有在任何黑名單中列出)
- 我顯然不知道發件人如何向他們的 ISP 證明他們的電子郵件是合法的,但我認為確實發生了某種形式的身份驗證
…我認為 spamassassin 不應該將該電子郵件標記為垃圾郵件。
準確地說:我的直覺告訴我 spamassassin 應該為直接從黑名單 IP 地址接收的郵件添加垃圾郵件分數。但是,如果郵件通過“乾淨”的 MTA(ISP 的郵件伺服器),sa 應該假定“他們”(ISP)已採取適當的措施來確保電子郵件的合法性。
由於我執行我的設置已經有一段時間了,直到現在還沒有很多誤報,我想知道:
- 是上述預期的行為嗎?
- 如果不是,是我這邊的問題嗎(例如,我錯誤地配置了我的垃圾郵件分析以將接收鏈的一部分考慮在內,它不應該考慮。如果是這樣,我應該在哪裡尋找修復?)
- 如果不是,是 ISP 方面的問題嗎?(例如,他們應該更好地隱藏他們接受授權電子郵件的損壞IP地址。如果是這樣,我應該直接向他們投訴嗎?)
我找到了一個可以滿足我要求的解決方案。可以調整這些黑名單規則以跳過第一個(不受信任的)躍點,而不是調整分數,
這是我所做的調整(更改只是
-notfirsthop
在表達式中添加後綴;例如zen
變成zen-notfirsthop
跳過對原始 IP 的檢查):header RCVD_IN_SBL eval:check_rbl_sub('zen-notfirsthop', '127.0.0.2') header RCVD_IN_SBL_CSS eval:check_rbl_sub('zen-notfirsthop', '127.0.0.3') header RCVD_IN_BL_SPAMCOP_NET eval:check_rbl_txt('spamcop-notfirsthop', 'bl.spamcop.net.', '(?i:spamcop)')
如果在郵件的Received 標頭中列出**了中繼,則這些 SpamAssassin 規則匹配…
RCVD_IN_BL_SPAMCOP_NET
…在Spamcop DNSBL中,一個基於時間的自動阻止列表。RCVD_IN_SBL_CSS
對於Spamhaus CSS似乎不再存在,但RCVD_IN_SBL
對於包含 CSS 組件的Spamhaus SBL也是如此。雖然
RCVD_IN_SORBS_WEB
更接近您希望他們所有人做的事情:check根據 SORBS 維護的 DNSBL測試最後一個不受信任的中繼的 IP 地址。
如果您不信任這些測試,您可以隨時調整規則分數。
score RCVD_IN_BL_SPAMCOP_NET 0
如果測試匹配,則不添加任何分數,從而導致測試將完全禁用。Spamassassin 不需要僅針對最新的
Received:
標頭進行測試,因為這是Received
來自您自己的 MTA 的,它可能已經完成了相同的測試,並且實際上拒絕了來自匹配 IP 地址的郵件,而不是將其標記為垃圾郵件。在Postfix
main.cf
中,等效的收件人限制是:smtpd_recipient_restrictions = reject_rbl_client sbl.spamhaus.org, reject_rbl_client bl.spamcop.net, reject_rbl_client dnsbl.sorbs.net
並在ACL 中使用Exim 4.x:
acl_rcpt``exim.conf
deny message = Access denied - $sender_host_address\ listed by $dnslist_domain\n$dnslist_text dnslists = sbl.spamhaus.org : \ bl.spamcop.net : \ dnsbl.sorbs.net
如果您
dnslists
在模式下使用 Exim,您可以通過添加標頭僅在最後一次 MTA 傳遞時warn
模擬樣式規則RCVD_IN_*``X-blacklisted-at
warn message = X-blacklisted-at: $dnslist_domain dnslists = sbl.spamhaus.org : \ bl.spamcop.net : \ dnsbl.sorbs.net
然後在 Spamassassin 中對該標頭的存在(或內容)進行評分,而不是
RCVD_IN_*
:header LAST_RCVD_BLACKLISTED exists:X-blacklisted-at score LAST_RCVD_BLACKLISTED 10.0
請注意,這些拒絕列表對於您實際需要的內容可能太寬,例如,這
dnsbl.sorbs.net
是一個包含幾乎所有可用 SORBS 區域的聚合區域。在根據這些列表拒絕甚至標記之前,您應該熟悉每個列表的目的,並決定您想要變得多麼激進。就我個人而言,我更信任SPF、DMARC和貝氏過濾,並且在信任 DNSBL 方面非常敏感,即僅使用帶有 IP 的列表,當然僅用於垃圾郵件,例如
smtp.dnsbl.sorbs.net
開放的 SMTP 中繼伺服器或edrop.spamhaus.org
包含“被劫持”的網路塊。