Exim
如果 From 標頭中的友好名稱與子字元串匹配,則 Exim ACL 將被刪除
我收到了一種特別可怕的垃圾郵件,可以通過 From 標頭中的純文字名稱輕鬆辨識。
基本上格式是這樣的:
From: "foo" <some-random-address@example.com>
我想編寫一個 ACL 數據條件來檢查是否
foo
在 From 標頭中。你會怎麼做?我相信它會進入DATA ACL部分。
我認為 Jim U 的回答可能是實現我的目標的更好方法,但為了記錄,這是我在 DATA ACL 中的做法:
acl_check_data: # Blacklist if friendly name matches any patterns. drop condition = ${if match{$h_from:}{"foo"}} message = Blacklisted. log_message = Blacklisted nasty.
這會導致
550 Blacklisted.
SMTP 客戶端出錯並立即關閉連接。
根據標頭欄位有條件地丟棄郵件:
exim.conf
system_filter = /etc/exim/system_filter.conf
system_filter.conf
if $header_from matches "foo.*<" or $header_from contains "@morespam.com" or $h_subject contains "Viagra" then seen finish endif
只有當 foo 出現在 From 標頭的友好部分中時,第一個條件才會匹配。正則表達式不區分大小寫。
最好在進行任何更改後測試過濾器文件。中的語法錯誤
system_filter.conf
將使傳入的消息暫時無法傳遞。測試
exim -bF /etc/exim/system_filter.conf <spam.eml
垃圾郵件.eml
Subject: This is Spam Viagra From: Fred Foo Jones <someuser@example.com> To: John Smith <someother@mydomain.com> Date: Mon, 22 Aug 2016 07:26:20 -0500 This is the body of the e-mail.
測試將告訴您消息是否會被傳遞、丟棄(“已完成”),或者過濾器文件中是否存在錯誤(您會收到類似的消息,
Filter error: unknown filtering command "asldkf" near line 75 of filter file
)不是 ACL 解決方案,但對我來說很容易維護。當條件改變時,我只需要更新 system_filter.conf`。
我放置
system_filter
在 exim.conf 文件(主配置設置)的頂部。seen finish
是黑洞命令;它指示 exim 已完成對消息的處理。參考:Exim 過濾器文件