
私は、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
検討した選択肢:
追加する
header_checks
オプションを選択し、PREPEND
ファイル内のアクションを使用します。もうすぐ終わりですが、
- 既存のヘッダーと一致する必要があり、その後の一致でさらに 1 つ追加されます。
- 特定のヘッダーが常に存在しているわけではなく、たとえば、 が
From
欠落している場合もあります。 - 既存の がある場合
header_checks
、2 つのファイルをスタックする簡単な方法はないheader_check
と思います。
を使用するカスタムアプリを構築するミルタープロトコルそしてそれを で Postfix に接続します
smtpd_milters
。もちろん、これは機能します。自分のアプリでメールを検査し、そこにヘッダーを挿入できます。ヘッダーの追加のような単純なタスクには、過剰なエンジニアリングのように思えます。さらに、別のデーモン アプリやかなりの定型コードなどを実行する必要があり、追加のメンテナンスが必要です。
コメントで提案されているように、
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