Postfix を使用して受信メールに単一のヘッダーを追加するにはどうすればよいでしょうか?

Postfix を使用して受信メールに単一のヘッダーを追加するにはどうすればよいでしょうか?

私は、master.cf で次のように設定されたいくつかの smtpd プロセスを使用して Postfix を実行しています。

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
  -o ...   # internet-only overrides

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
  -o ...   # internal-only overrides

さて、静的な名前と値を持つ単一のヘッダーを追加したいと思います。着信メールは、どの smtpd で受信されたかに応じて異なります。

例:

X-Gert-Postfix-Received-From: the evil internet

検討した選択肢:

  1. 追加するheader_checksオプションを選択し、PREPENDファイル内のアクションを使用します。

    もうすぐ終わりですが、

    • 既存のヘッダーと一致する必要があり、その後の一致でさらに 1 つ追加されます。
    • 特定のヘッダーが常に存在しているわけではなく、たとえば、 がFrom欠落している場合もあります。
    • 既存の がある場合header_checks、2 つのファイルをスタックする簡単な方法はないheader_checkと思います。
  2. を使用するカスタムアプリを構築するミルタープロトコルそしてそれを で Postfix に接続しますsmtpd_milters

    もちろん、これは機能します。自分のアプリでメールを検査し、そこにヘッダーを挿入できます。ヘッダーの追加のような単純なタスクには、過剰なエンジニアリングのように思えます。さらに、別のデーモン アプリやかなりの定型コードなどを実行する必要があり、追加のメンテナンスが必要です。

  3. コメントで提案されているように、check_recipient_access関連する質問)。

    (1を参照)と同じ欠点がありますheader_checks

何か簡単なことを見逃しているような気がします。もっといいアイデアをお持ちの方はいませんか?

答え1

既存の header_checks がある場合、2 つの header_check ファイルをスタックする簡単な方法はないと思います。

実際には、デーモンごとに複数の独立した header_checks ファイルを持つ方法があります。

それぞれ-omaster.cfのオプションは、main.cfのデフォルト値やpostfix設定パラメータを上書きします。デーモンごとに異なるheader_checksを設定するには(例えば/etc/postfix/ヘッダーチェック1そして/etc/postfix/ヘッダーチェック2)、それぞれをオーバーライドする必要がありますヘッダーチェックパラメータ:

# Internet facing one
1.2.3.4:25      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks1

# Internal facing one
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
-o header_checks = regexp:/etc/postfix/header_checks2

こうすることで、完全に独立したヘッダーチェックsmtpd デーモンごとにファイルがあります。そこから、言及したタグを PREPEND するルールを追加できます。

答え2

の制限を回避するにはsmtpd_*_restrictions:

メッセージには、送信者が「null」であっても、エンベロープ送信者が 1 人だけ存在します。そのため、 のcheck_sender_access代わりにを使用しますcheck_recipient_access。リターン パスの詳細は考慮しないため、使用される検索タイプは になりますstatic:。結果を生成するチェックの前に、これを smtpd_sender_restrictions のリストに追加しますACCEPT(postfix はそれ以上の検索を問い合わせません)。

# in main.cf
common_sender_restrictions =
  reject_non_fqdn_sender
  reject_unknown_sender_domain
  ..
internet_sender_restrictions =
  $common_sender_restrictions
  check_sender_access static:{PREPEND X-Gert-Postfix-Received-From: the evil internet}

# in master.cf
192.0.2.0:25        inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$internet_sender_restrictions
10.0.0.1:10026      inet  n       -       y       -       -       smtpd
 -o smtpd_sender_restrictions=$common_sender_restrictions

関連情報