Postfixを使用して受信メールと送信メールに異なるheader_checks
を適用するにはどうすればよいですか?
デフォルトでは、すべてのheader_checksは着信と発信の両方に適用されます。
header_checks
はcleanup
によって行われるため、着信または発信にのみ適用できるとは思いません。
smtp_header_checks
は送信メールにのみ適用されます(smtpクライアント)
受信メールと送信メールの識別に使用できるメールヘッダーがある場合、Postfix 3.2以降では、次のように header_checks を短絡できます。
_/^Received: .*detect_outgoing_mails/ PASS
/^X-Something: this rule will only match on incoming mails/ HOLD
_
(ただし、以前と同じようにALLに一致するか、受信メールまたは送信メールのみに一致するオプションのみが提供され、比較的新しいPostfixバージョンが必要です)
より良い代替手段として、1つのポート(送信:tcp/587)で常に「送信」メール(メールリレーサーバーとして機能するクライアントからのメール)を受信でき、tcp/25で受信メールを受信できる場合、次のように、_master.cf
_を使用して、それぞれのheader_checksをオーバーライドします。
_submission inet n - n - - smtpd
-o smtpd_enforce_tls=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o header_checks=pcre:/etc/postfix/header_checks.relay
smtp inet n - - - 200 smtpd
-o strict_rfc821_envelopes=yes
-o header_checks=pcre:/etc/postfix/header_checks.mx
_
しかし、リレーするクライアントがtcp/25を残りの世界として使用している場合は機能しません。もしそうなら、あなたは彼らのために別のポートを設定することができ、それは機能しますが、それの実現可能性はすべてのユーザーに彼らの設定を変更するように説得するあなたの能力に依存します。
予備のIPがある場合は、ユーザーに対してほとんど透過的にすることもできます。ユーザーのリレーサーバーと、IPを使用したMXの両方に_smtp.example.org
_があるとします_a.a.a.a
_、ドメインのMXを変更できますIP _b.b.b.b
_に変換してから、1つのsmtpdサーバーを_a.a.a.a
_で1セットのヘッダーチェックを使用し、別のsmtpdサーバーを_b.b.b.b
_で別のヘッダーチェックセットを使用します。これは、同じDNS名を維持し、DNSビューを使用して内部クライアントに内部IPを提示し、残りの世界に外部IPを提示できる場合に、たとえば192.168.x.x/24からのユーザーのみをリレーする場合はさらに簡単です。
そして3番目の方法は、_header_check
_の代わりにpostfix [〜#〜] filter [〜#〜] 機能を使用することです-単純な正規表現マッチングの代わりに、メッセージ全体をカスタムスクリプトに転送しますこれにより、ヘッダーを検査して受信メールと送信メールを簡単に区別し、必要に応じて後処理を行うことができます。
質問が正しく理解できれば、/etc/postfix/header_checks
ファイル、送信メールの場合はこのようなもの/^From: "spammer/ REJECT
/^To: [email protected]/ REDIRECT [email protected]
私はこれをずっと前に行ったので、すべての詳細を覚えていませんが、ここから詳細を取得できます [〜#〜] doc [〜#〜]
これにより、メールが着信か発信かに応じてアクションを定義できます。これであなたの質問に答えられることを願っています。