萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦基礎知識 >  >> 健康知識

Linux 郵件伺服器必學:Procmail 進階垃圾郵件過濾規則實戰

Linux 郵件架構 (Sendmail/Postfix + Dovecot) 雖穩定,但缺乏內建垃圾郵件過濾。Procmail 作為強大的郵件投遞代理 (MDA),可透過靈活的規則檔 (.procmailrc) 實現精準過濾、分類、轉寄甚至銷毀垃圾郵件。本文從基礎語法到進階組合規則,完整示範 Procmail 反垃圾郵件實戰技巧。

Procmail 基礎架構

  • 系統層設定檔:/etc/procmailrc (影響所有用戶)
  • 用戶層設定檔:$HOME/.procmailrc (個人化規則)
  • 核心變數:MAILDIR (郵件目錄)、DEFAULT (預設信箱)、SENDMAIL (發送程式路徑)

常用規則語法速查

:0                    # 開始一條配方
* ^From:.*spammer@bad.com   # 條件:正則比對 From 標頭
* ^Subject:.*推銷          # 多條件 AND 邏輯
{
  :0
  /dev/null               # 動作:丟棄 (黑洞)
}

實戰範例庫

範例 1:封鎖特定寄件者

:0
* ^From:.*bill@microsoft.com
/dev/null

範例 2:隔離可疑郵件至專屬資料夾 (供事後稽核)

:0
* ^From:.*bill@microsoft.com
* ^Subject:.*competition
mail/antitrust/

範例 3:複製一份轉寄給安全團隊並存檔

:0 c
* ^From:.*bill@microsoft.com
* ^Subject:.*competition
! security@mycompany.com

:0
* ^From:.*bill@microsoft.com
* ^Subject:.*competition
mail/antitrust/

範例 4:多條件組合 + 關鍵字過濾

:0
* ^From:.*sexcity
/dev/null

:0
* ^Subject:.*(viagra|cialis|lottery|inheritance)
* ^Content-Type:.*text/html
spam/suspicious/

範例 5:利用 SpamAssassin 整合分數判斷

:0fw
| spamassassin

:0
* ^X-Spam-Status: Yes
spam/caught/

:0
* ^X-Spam-Level: \*\*\*\*\*
spam/high-score/

部署與測試檢核表

  1. 修改 .procmailrc 後,以 procmail -m .procmailrc < test_mail.eml 測試單封郵件。
  2. 檢查 /var/log/mail.log 或 procmail.log (需在設定檔啟用 LOGFILE LOGABSTRACT) 確認規則觸發狀況。
  3. 確保 SENDMAIL 路徑正確,否則轉寄會失敗。
  4. 定期備份規則檔,版本控管 (Git) 追蹤變更歷程。

避坑指南

  • 錯誤的正則會誤判正常郵件 → 先用測試信驗證。
  • 規則順序至關重要:具體規則在前,通用規則在後。
  • 勿將所有垃圾郵件直接 /dev/null,保留隔離區供誤判救援。
  • Procmail 不支援多執行緒,大量郵件湧入時可能成為瓶頸,考慮前端掛載 Postfix + Policyd/SpamAssassin 分流。

Procmail 雖屬經典工具,但其正則表達式靈活度與管線處理能力,至今仍是客製化郵件過濾邏輯的最佳選擇。善用規則組合,即可打造專屬的「智慧型垃圾郵件防火牆」。

copyright © 萬盛學電腦網 all rights reserved