Exim

在處理之前剝離 SpamAssassin 標頭

  • August 5, 2016

我有一台執行 cPanel/WHM 和 exim 和 SpamAssassin 的伺服器。我一直注意到帶有偽造 spamassassin 標頭的電子郵件繞過某些過濾的問題。我想在通過 spamassassin 之前刪除所有 SpamAssassin 標頭,然後過濾到收件箱/垃圾郵件文件夾中。

在網上搜尋,我能找到的唯一類似實例來自 2004。但是,該使用者和我的 exim 配置非常不同。我不確定如何應用它。我可以對包含消息的文件執行 formail 以刪除標題,但我不知道如何讓 exim 做到這一點。

舉個例子,一條消息將帶有如下標題:

X-Spam-Status: No, score=1.3
X-Spam-Score: 13
X-Spam-Bar: +
X-Ham-Report: Spam detection software, running on the system "serv02.example.com", has
       identified this incoming email as possible spam.  The original message *snip*
X-Spam-Flag: NO

我的 SpamAssassin 會將這些標頭添加到郵件中:

X-Spam-Status: Yes, score=6.8
X-Spam-Score: 68
X-Spam-Bar: ++++++
X-Spam-Report: Spam detection software, running on the system "serv02.example.com", has
       identified this incoming email as possible spam.  The original message *snip*
X-Spam-Flag: YES

但是由於 exim vfilter 規則讀取了第一個 X-Spam 標頭,因此電子郵件最終會出現在使用者的收件箱中,而不是垃圾郵件文件夾中。

Exim for cPanel 使用儲存在 /etc/vfilters 中的 vfilters 並依賴於 X-Spam-Bar 標頭。其他系統可能會使用 X-Spam-Flag-Status 或分數來確定是將郵件保存在收件箱、垃圾郵件文件夾中還是將其刪除。不幸的是,vfilter 將使用第一個匹配項,這是這個問題的癥結所在。


發現過時的解決方案 http://wiki.exim.org/ExiscanExamples#Replacing_foreign_Spamassassin_headers_with_local_ones

添加到 ACL 的某處 warn spam = exiscan:true set acl_m0 = ( $ spam_bar) $ spam_score 設置 acl_m1 = $spam_report

這將為系統過濾器中的以下處理適當地設置 ACL 變數:

添加到系統過濾器:

if first_delivery then
 # ...

 headers remove X-Spam-Score:X-Spam-Report:X-Spam-Checker-Version:X-Spam-Status:X-Spam-Level
 if $acl_m2 is not ""dd then
   headers add "X-Spam-Score: $acl_m0"
   headers add "X-Spam-Report: $acl_m1"
 endif
endif

在 cPanel 中,系統過濾器是 /etc/cpanel_exim_system_filter 並且 acl_mX 變數是不同的,所以讓我們弄清楚這些。將此添加到 cpanel_exim_filters 的末尾

# work out our acl variables!
if first_delivery then
   headers add "X-acl-m0: $acl_m0"
   headers add "X-acl-m1: $acl_m1"
   headers add "X-acl-m2: $acl_m2"
   headers add "X-acl-m3: $acl_m3"
   headers add "X-acl-m4: $acl_m4"
   headers add "X-acl-m5: $acl_m5"
   headers add "X-acl-m6: $acl_m6"
   headers add "X-acl-m7: $acl_m7"
end

— 這樣做並得到: X-acl-m1: user1 X-acl-m2: 1 X-acl-m3: X-acl-m4: X-acl-m5: X-acl-m6: X-acl-米7:

因此,我找到了 exim.conf 中添加標頭的部分並查看了所有 $spam 變數。我想知道他們是否會繼承?讓我們來了解一下。

headers add "X-Test-Spam-Subject: ***SPAM*** $h_subject"
headers add "X-Test-Spam-Score:$spam_score"
headers add "X-Test-Spam-Score-Int: $spam_score_int"
headers add "X-Test-Spam-Bar: $spam_bar"
headers add "X-Test-Spam-Report: $spam_report"

所以 $ spam_score_int is carried over along with $ h_subject,但不是 spam_bar,這很重要

X-Test-Spam-Subject: ***SPAM*** test
X-Test-Spam-Status: 
X-Test-Spam-Score: 33
X-Test-Spam-Bar:
X-Test-Spam-Report:

但是..我意識到標題會通過,這可能會起作用

headers add "X-Test-Spam-Bar: $h_X-Spam-Bar"

結果是:

X-Test-Spam-Bar: +
+++

所以 $h 標頭同時接收到標頭和添加標頭。

解決方案?

將自定義垃圾郵件過濾器添加到 exim.conf 中,然後在 cpanel_exim_filter 中將它們換掉

log_message = "SpamAssassin as ${acl_m1} detected message as spam ($spam_score)"
add_header = X-989Spam-Subject: ***SPAM*** $h_subject
add_header = X-989Spam-Status: Yes, score=$spam_score
add_header = X-989Spam-Score: $spam_score_int
add_header = X-989Spam-Bar: $spam_bar
add_header = X-Spam-Report: $spam_report
add_header = X-989Spam-Flag: YES

add_header = X-989Spam-Status: No, score=$spam_score
add_header = X-989Spam-Score: $spam_score_int
add_header = X-989Spam-Bar: $spam_bar
add_header = X-Ham-Report: $spam_report
add_header = X-989Spam-Flag: NO
log_message = "SpamAssassin as ${acl_m1} detected message as NOT spam ($spam_score)"

好的,現在讓這更加持久。首先,複製您的 cpanel_exim_system 過濾器:

cp /etc/cpanel_exim_system_filter /etc/custom_exim_system_filter

登錄 WHM Main >> Service Configuration >> Exim Configuration Editor,然後點擊 Advanced Editor

向下滾動並將垃圾郵件標題部分更改為如下所示。請注意,您只是將 X-Spam 標頭更改為 X-989Spam 標頭(您當然可以使用您喜歡的任何自定義名稱,只要您的 custom-exim-system-filters 匹配。由於配置文件可能會隨著時間而改變,請確保您只修改 add_header 行。

add_header = X-989Spam-Subject: ***SPAM*** $h_subject
add_header = X-989Spam-Status: Yes, score=$spam_score
add_header = X-989Spam-Score: $spam_score_int
add_header = X-989Spam-Bar: $spam_bar
add_header = X-Spam-Report: $spam_report
add_header = X-989Spam-Flag: YES
  • 和 -
add_header = X-989Spam-Status: No, score=$spam_score
add_header = X-989Spam-Score: $spam_score_int
add_header = X-989Spam-Bar: $spam_bar
add_header = X-Ham-Report: $spam_report
add_header = X-989Spam-Flag: NO

保存您的配置並等待 WHM 刷新。

返回主 >> 服務配置 >> Exim 配置編輯器 >> 過濾器

將系統過濾器文件更改為指向 /etc/custom_exim_system_filter

檢查 SpamAssassinsremove_headerclear_headers 配置文件選項是否能滿足您的需求。

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