プロジェクト

全般

プロフィール

付与したヘッダをPostfixでチェックする

Rspamdのadd_headerで付与したメールをPostfixでそのまま判定する場合、
header_checksでは判定が出来ない。これは次のような判定順であるため。

smtpd(smtp_milter) → cleanup(header_checks→non_smtp_milter) → incoming

rspamdはnon_smtp_milterなので、rspamdで付与したヘッダを判定するためには
non_smtp_milterのあとにheader_checksを行う必要があるが、この順番は変更できない。

メールボックスがルのであればprocmailなどで読めば良いが、メーリングリストや
転送用エイリアスなどはメールボックスがないのでこの方法では対応が出来ない。
出来ればメールサーバのキュー内で対応したい。

設定

milterの結果のチェックを想定した「milter_header_checks」が別途存在するので、
これを設定することでrspamdが付与したヘッダを直後にチェックすることができる。

ここでは例としてスパム判定されたメールをrejectせず、かつ配送もせず、人の目で
検査するためのアドレスに転送する設定を行います。rspamdはデフォルトではスパム
判定された際に「X-Spam: Yes」というヘッダを付与するので、これを検査します。

  • 下記の設定を追加します
    # vi /etc/postfix/main.cf
    ----------------------------------------
    milter_header_checks = regexp:/etc/postfix/milter_checks
    
  • テーブルファイルを作成します
    # vi /etc/postfix/milter_checks
    ----------------------------------------
    /^X-Spam:\sYes/     REDIRECT 転送先メールアドレス
    
    • そのほかにreject、discard、holdなどがありますが、それらはrspamd側でも設定可能です。
      あくまでrspamd側を変えずに動作を変更するか、rspamdでは簡単には対応出来ないredirectなど
      を設定する際に本設定を使うと良いかと思われます。
  • サービスを再起動して適用します
    # systemctl restart postfix
    

以降テーブルのみを変更する場合はpostfixは再起動しなくても良いですが、子プロセス
が再起動する際に新しいテーブルが読まれるので、即時反映したい際は再起動します。

以上でスパム判定されたヘッダが付与されたメールが別のアドレスに転送されます。