在處理之前剝離 SpamAssassin 標頭
我有一台執行 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
檢查 SpamAssassins
remove_header
或clear_headers
配置文件選項是否能滿足您的需求。