Debian

spamassassin 誤報來自撥號地址的電子郵件

  • May 9, 2017

我主要是 spamassassin (3.4.0-6) + exim4 (4.84.2) 的快樂管理員,在 Debian/jessie 系統上設置伺服器端垃圾郵件過濾。

最近有使用者報告了一些誤報。仔細檢查後發現,合法的電子郵件是

  1. 從某個撥號 IP 地址發送(在多個黑名單中列出)
  2. 傳遞到發件人的 ISP 的郵件伺服器(使用他們現有的任何身份驗證),這
  3. 然後將電子郵件發送到我的郵件伺服器
  4. 將郵件標記為垃圾郵件,因為“已接收”標頭中的 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_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.xacl_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 區域的聚合區域。在根據這些列表拒絕甚至標記之前,您應該熟悉每個列表的目的,並決定您想要變得多麼激進。

就我個人而言,我更信任SPFDMARC貝氏過濾,並且在信任 DNSBL 方面非常敏感,即僅使用帶有 IP 的列表,當然僅用於垃圾郵件,例如smtp.dnsbl.sorbs.net開放的 SMTP 中繼伺服器或edrop.spamhaus.org包含“被劫持”的網路塊。

引用自:https://serverfault.com/questions/845504