Exim

如果 From 標頭中的友好名稱與子字元串匹配,則 Exim ACL 將被刪除

  • March 3, 2017

我收到了一種特別可怕的垃圾郵件,可以通過 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 過濾器文件

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