Exim

Exim 和 spamassassin 自定義規則

  • October 17, 2012

我已經安裝並執行了 exim 和 spamassassin(由 exiscan 使用),但我想添加自定義規則,如果“to”和“envelope-to”不相同,它將為電子郵件添加一些點。我在 local.cf 中添加了以下規則:

header      EXIM_SENDER_SWAP        X-Sender-Swap =~ /To_envelope-to/
describe    EXIM_SENDER_SWAP        To doesnt match envelope-to
score       EXIM_SENDER_SWAP        2.0

並在 exim.conf 中行

 acl_check_data:

     warn message = X-Subject-Swap: To_envelope-to
         condition = ${if !match {${lc:$h_envelope-to:}}{${lc:$h_to:}}{yes}{no}}

我正在發送測試消息,exim 添加了相應的標題,但 spamassassin 沒有添加額外的點。怎麼了?

首先,“消息”修飾符不是您想要的,而是當您想在 ACL 中向消息添加標頭時使用“add_header”。如果您需要有關該部分的更多資訊,請閱讀http://www.exim.org/exim-html-current/doc/html/spec_html/ch42.html#SECTaddheadacl 。

但是,我認為您嘗試做的事情不會以您使用的方式起作用。在 exim 處理每個 ACL 的過程中,ACL 執行,然後當 ACL完成時,所有標頭的添加和刪除都完成了。您在同一個 DATA ACL 中執行這兩項操作,這意味著第一次比較添加的標頭實際上尚未添加到垃圾郵件命令正在掃描的臨時文件中的消息中。

一種選擇是進行垃圾郵件掃描,檢測您將添加標題的條件,然後在比較時將該分數添加到保存垃圾郵件分數的變數中,以查看它是否是垃圾郵件。

第二種選擇,我認為更好的選擇是讓您使用兩個不同的使用者來執行垃圾郵件掃描。對於一個,您將垃圾郵件分數設置為(例如)5.0。對於第二個,您將垃圾郵件分數設置為 3.0。這比正常限制少 2 分,這與在垃圾郵件分數上增加 2 分相同。

然後您的 ACL 節可能看起來像(未經測試):

warn condition = ${if !match {${lc:$h_envelope-to:}}{${lc:$h_to:}}{yes}{no}}
    set $acl_m_env_ok = 1
    spam = strict_user:true

warn condtion = ${if eq{$acl_m_env_ok}{1} {no}{yes}}
    spam = normal_user:true

warn add_header = X-Spam-Score: $spam_score
    add_header = X-Spam-Report: $spam_report

deny condition  = ${if eq{$acl_m_env_ok}{1}}
    condition  = ${if >{$spam_score_int}{30}}
    message    = This message with mismatched header/envelope score $spam_score_points...REJECTED

deny condition  = ${if >{$spam_score_int}{50}}
    message    = This message scored $spam_score points...REJECTED

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