header_checks の実施ポイントの制御

Postfix でコンテンツフィルタの結果によって header_checks 機能を使おうと思ってハマったので、メモです。

構成は ↓ な感じで、特に凝ったことはしてません。

submission(587/tcp) -> content_filter(8025/tcp) -> smtpd(8026/tcp)

この状態で content_filter で append したヘッダ(X-SpamState)の値に応じて別アドレスへ転送したいので

  • > smtpd(8026/tcp)

この位置でだけ header_checks 機能を on にしょうと思いました。が、main.cf に普通に

header_checks = regexp:/etc/postfix/header_checks

を入れると、content_filter の前にも header_checks が掛かってしまいます。これでは

  1. content_filter の前
  2. smtpd の前

の 2回、header_checks が掛かってしまいます。そこで master.cf の各サービスで

  -o header_checks=

として off に出来ないかと思ったのですがダメでした orz。ググってみたところ Postfix-jp ML の以下のアーカイブを発見。

ということで

  1. cleanup の機能なので smtp にいくら -o header_checks= としてもダメ
  2. header_check を off にした cleanup(ex. cleanup2) を作って、それを -o cleanup_service_name=cleanup2 として指定する

ことで期待通りの動きになったようです。

でももう少しスッキリ設定できないもんかなぁ… と。いや、きっと出来ると思いますが、とりあえず現時点での回避策(?)を忘れないうちにメモっておくことにします。続きはまたそのうち。これはきっと milter-manager を使えという神のお告げに違いない(^^;。やっぱり milter に切り替えた方が色々柔軟にできるんだろうなぁ… 来月の勉強会で色々教わったら、今後は milter 信者になろうかな。