web-dev-qa-db-ja.com

postfix-受信メールと送信メールの異なるヘッダーチェック

Postfixを使用して受信メールと送信メールに異なるheader_checksを適用するにはどうすればよいですか?

デフォルトでは、すべてのheader_checksは着信と発信の両方に適用されます。

5
Zulakis

header_checkscleanupによって行われるため、着信または発信にのみ適用できるとは思いません。

smtp_header_checksは送信メールにのみ適用されます(smtpクライアント)

5

受信メールと送信メールの識別に使用できるメールヘッダーがある場合、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 [〜#〜] 機能を使用することです-単純な正規表現マッチングの代わりに、メッセージ全体をカスタムスクリプトに転送しますこれにより、ヘッダーを検査して受信メールと送信メールを簡単に区別し、必要に応じて後処理を行うことができます。

1
Matija Nalis

質問が正しく理解できれば、/etc/postfix/header_checksファイル、送信メールの場合はこのようなもの/^From: "spammer/ REJECT/^To: [email protected]/ REDIRECT [email protected]

私はこれをずっと前に行ったので、すべての詳細を覚えていませんが、ここから詳細を取得できます [〜#〜] doc [〜#〜]

これにより、メールが着信か発信かに応じてアクションを定義できます。これであなたの質問に答えられることを願っています。

0
APZ