Linux 郵件架構 (Sendmail/Postfix + Dovecot) 雖穩定,但缺乏內建垃圾郵件過濾。Procmail 作為強大的郵件投遞代理 (MDA),可透過靈活的規則檔 (.procmailrc) 實現精準過濾、分類、轉寄甚至銷毀垃圾郵件。本文從基礎語法到進階組合規則,完整示範 Procmail 反垃圾郵件實戰技巧。
/etc/procmailrc (影響所有用戶)$HOME/.procmailrc (個人化規則)MAILDIR (郵件目錄)、DEFAULT (預設信箱)、SENDMAIL (發送程式路徑):0 # 開始一條配方
* ^From:.*spammer@bad.com # 條件:正則比對 From 標頭
* ^Subject:.*推銷 # 多條件 AND 邏輯
{
:0
/dev/null # 動作:丟棄 (黑洞)
}
:0
* ^From:.*bill@microsoft.com
/dev/null
:0
* ^From:.*bill@microsoft.com
* ^Subject:.*competition
mail/antitrust/
:0 c
* ^From:.*bill@microsoft.com
* ^Subject:.*competition
! security@mycompany.com
:0
* ^From:.*bill@microsoft.com
* ^Subject:.*competition
mail/antitrust/
:0
* ^From:.*sexcity
/dev/null
:0
* ^Subject:.*(viagra|cialis|lottery|inheritance)
* ^Content-Type:.*text/html
spam/suspicious/
:0fw
| spamassassin
:0
* ^X-Spam-Status: Yes
spam/caught/
:0
* ^X-Spam-Level: \*\*\*\*\*
spam/high-score/
.procmailrc 後,以 procmail -m .procmailrc < test_mail.eml 測試單封郵件。/var/log/mail.log 或 procmail.log (需在設定檔啟用 LOGFILE LOGABSTRACT) 確認規則觸發狀況。SENDMAIL 路徑正確,否則轉寄會失敗。/dev/null,保留隔離區供誤判救援。Procmail 雖屬經典工具,但其正則表達式靈活度與管線處理能力,至今仍是客製化郵件過濾邏輯的最佳選擇。善用規則組合,即可打造專屬的「智慧型垃圾郵件防火牆」。