Exim と spamassassin のカスタムルール

Exim と spamassassin のカスタムルール

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 によって追加のポイントは追加されていません。何が問題なのでしょうか?

答え1

まず、「message」修飾子は必要なものではなく、ACL 内のメッセージにヘッダーを追加する場合は「add_header」を使用する必要があります。http://www.exim.org/exim-html-current/doc/html/spec_html/ch42.html#SECTaddheadaclその部分についてさらに詳しい情報が必要な場合。

しかし、あなたがしようとしていることは、あなたが使用している方法ではうまくいかないと思います。eximの内部では、各ACLを処理するときにACLが実行され、ACLが完了、すべてのヘッダーの追加と削除が行われます。これら両方を同じ DATA ACL で実行しているため、最初の比較で追加されたヘッダーは、スパム コマンドがスキャンしている一時ファイル内のメッセージにはまだ実際には追加されていません。

1 つのオプションは、スパム スキャンを実行し、ヘッダーが追加された条件を検出し、比較時にスパム スコアを保持する変数にそのスコアを追加して、スパムかどうかを確認することです。

2 番目のオプション (私見ではこちらの方がよい) は、スパム スキャンを実行するために 2 人の異なるユーザーを使用することです。1 つ目のユーザーでは、スパム スコアを (たとえば) 5.0 に設定します。2 つ目のユーザーでは、スパム スコアを 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

関連情報