フィルタリング前のドメインごとの rspamd ホワイトリスト/ブラックリスト

フィルタリング前のドメインごとの rspamd ホワイトリスト/ブラックリスト

残念ながら、rspamd の GitHub ディスカッション ボードで何の応答も得られないので、おそらくここには rspamd プレフィルター モードの経験がある人がいるかもしれません。

rspamd が、どれだけスパムだと判断しても、特定のドメイン リストからのすべてのメールを受け入れるようにしようとしています。残念ながら、これは必要なことです。送信者を操作したり、通常は何かを隠したい人が使うその他の怪しいことをするのが良いアイデアだと考える人が多すぎるからです。これは、メールがスパムかどうかを評価する前に実行されるはずのプレフィルタ モードを使用すると最も簡単に実現できるはずです。さらに、悪名高いスパム メールが認識されない場合に、ブロック リストに使用することもできます。もちろん、rspamd に何がスパムで何がそうでないかを教えることはできますが、それだけでは十分ではないようです。また、ログでは、ほとんどのドメインに対してプレフィルタの適用を拒否する理由がわかりません。皆さんの誰かが提案してくれるかもしれません。

現在、私はマルチマップ設定を使用して、受け入れリストとブロック リストのプレフィルターを設定しています。そのため、local.d/multimap.conf には次の内容が含まれています。

ACCEPTLIST_SENDER_DOMAIN {
      #type = "header";
      #header = "from";
      type = "from";
      prefilter = "true";
      filter = "email:domain";
      map = "file:///etc/rspamd/local.d/acceptlist.sender.domain.map";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      #type = "header";
      #header = "from";
      type = "from";
      prefilter = "true";
      filter = "email:domain";
      map = "file:///etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      score = 10.0;
      action = "add_header"; # Prefilter mode
  }

各ブロックの上部にある 2 つのコメントは、ヘッダーと from ヘッダーをフィルターしようとしたときに表示されたものですが、直接フィルターできるので、これを試してみましたが、役に立ちませんでした。また、パスと file:///path/to/file の両方を使用してマップにファイルを追加してみましたが、どちらの方法でも成功しませんでした。rspamd.log にも役立つ情報は何も表示されません (常に表示されるエラーは、そのモジュールを無効にできないため、dkim キーをロードできないことに関するものだけです)。この構成を overwrite.d にコピーしても役に立ちません。何かアイデアはありますか?

私は Debian 11 で、rspamd リポジトリから直接 rspamd 3.4-1~bullseye を実行しています。

答え1

私の最後の回答はかなり役立ちましたが、全体的にはまだ解決されていない問題がいくつかあることがわかりました。

何らかの理由で、ACCEPTLIST_SENDER_DOMAINしばらく前にマップ ファイルから削除したドメインがまだ追加されます。rspamd を複数回再起動しましたが、そのドメインを忘れることはありません。また、削除して役立つキャッシュも見つかりません。

これに加えて、マルチマップは、指定されたドメインからのメールを、どのような場合でも受け入れることになっています。ただし、ドメインがヘッダーにある場合のみでFrom:、それ以外の場合は受け入れません。以前、ホワイトリストに誤って追加したドメインは、私たちのメーリングリストのドメインでした。したがって、私たちのメーリングリストはヘッダーをFrom:独自のアドレスに置き換えることはないため、マルチマップに基づいて rspamd がこれらのメールを受け入れることはそもそもないはずです。しかし、理論上は false によって除外されるはずのスパムメールが、依然としてスパムとしてマークされていますACCEPTLIST_SENDER_DOMAIN。今のところ、マルチマップ設定に ; を再度追加しましたprefilter=true。これで問題が解決するかもしれません。しかし、全体として、rspamd はまだ期待どおりに動作しません。

編集: 最初の問題を解決するために、ヘッダーを明示的にチェックするように切り替えましたFrom:。type:from は、これをチェックする前にエンベロープの送信元をチェックするので、信頼性が大幅に向上するはずです (もちろん、From ヘッダーを変更するのは非常に簡単ですが、過去数年間に発生したインシデントのうち、メインのスパム フィルターでキャッチされなかったものは片手で数えられるほどです)。

ACCEPTLIST_SENDER_DOMAIN {
      type = "header";
      header = "From:";
      prefilter = true;
      map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
      symbol ="ACCEPTLIST_SENDER_DOMAIN";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      type = "header";
      header = "From:";
      prefilter = true;
      map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      action = "add_header"; # Prefilter mode
  }

しかし、何らかの理由で、これらのシンボルがトリガーされると、メールのヘッダーに次の内容が表示されます。

X-Rspamd-Pre-Result: action=no action;
    module=multimap;
    Matched map: ACCEPTLIST_SENDER_DOMAIN

この場合のアクションは、設定で指定されているように、明らかに「受け入れる」必要があります。設定ダンプでは次のようになります。

multimap {
    ACCEPTLIST_SENDER_DOMAIN {
        action = "accept";
        map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
        description = "Sender domain is on allowed";
        symbol = "ACCEPTLIST_SENDER_DOMAIN";
        prefilter = true;
        type = "header";
        header = "From";
}
    BLOCKLIST_SENDER_DOMAIN {
        action = "add_header";
        map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
        description = "Sender domain is on blocked";
        symbol = "BLOCKLIST_SENDER_DOMAIN";
        prefilter = true;
        type = "header";
        header = "From";
}
    [...]
}

答え2

プレフィルタ値の周囲に引用符は不要だと思います。

prefilter = true;

また、アクションがすでに適用されているため、プレフィルター マップでスコアを構成しても役に立たない可能性があります。

お役に立てれば幸いです!

答え3

これで動作するはずです。まさにあなたが望んでいることを実装できました。私の local.d/multimap.conf には次の内容が含まれています:

特定のドメインからのメールを受信するため

WHITELIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/${LOCAL_CONFDIR}/local.d/whitelist.sender.domain.map";
      symbol ="WHITELIST_SENDER_DOMAIN";
      description = "WHITELIST map for SENDERS Domain - Action accept";
      action = "accept";
  }
# For rejecting domains
BLACKLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/${LOCAL_CONFDIR}/local.d/blacklist.sender.domain.map";
      symbol ="BLACKLISTED_DOMAIN";
      description = "Blacklist map for Senders Domain - Action reject";
      action = "reject";
  } 

前述のマップ ファイルを local.d にまったく同じ名前で作成し、フィルターするドメイン名を入力する必要があります。 1 行に入力できるドメイン名は 1 つだけです。 ファイルには読み取り権限が必要です。

また、メッセージにアクションが設定されている場合は、それ以降のほとんどのチェックはスキップされることに注意してください。

答え4

@cz.steve SpamAssassin も思ったように動作していなかったので、rspamd を使用するようにすべてを再構築しました。変更により、ホワイト リストとブラック リストが有効になりましたが、正確には私が意図したとおりには動作しませんでした。私が望んでいたのは、指定されたドメインをヘッダー内のみに一致させFrom:、他のすべてのヘッダーには一致させないことでした。これを実現することは可能ですか?

現在私の設定は次の通りです:

ACCEPTLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/etc/rspamd/local.d/acceptlist.sender.domain.map";
      symbol ="ACCEPTLIST_SENDER_DOMAIN";
      description = "Sender domain is on allowed";
      action = "accept"; # Prefilter mode
  }

BLOCKLIST_SENDER_DOMAIN {
      type = "from";
      filter = "email:domain";
      map = "/etc/rspamd/local.d/blocklist.sender.domain.map";
      symbol = "BLOCKLIST_SENDER_DOMAIN";
      description = "Sender domain is on blocked";
      action = "add_header"; # Prefilter mode
  }

関連情報