web-dev-qa-db-ja.com

特定の「to」アドレスの「from」を書き換えます

PostfixがAmazon SESリレーを介してメールを送信する設定があります。メール転送以外はすべて正常に機能しています。

このトピックについては、少なくとも here および here についてはすでに議論されていますが、頭に入れられない点がまだいくつかあります。

問題は、Amazon SESがメールを送信しないことです。この場合、_From:_は検証されません。したがって、内部アドレスが外部に転送する必要があり、送信者も外部である場合、メールは送信されません。

これを解決するために、現在main.cfで次の設定を使用しています

_header_checks = regexp:/etc/postfix/first_header_checks
smtp_header_checks = regexp:/etc/postfix/second_header_checks
sender_canonical_maps = regexp:/etc/postfix/sender_canonical
sender_canonical_classes = envelope_sender
smtpd_data_restrictions = check_sender_access pcre:/etc/postfix/sender_access
_

First_header_checksを使用

_/^From:(\s)?(.*)/i PREPEND X-Original-From: $2
/^To:(\s)?(.*)$/i PREPEND X-Original-To: $2
_

second_header_checks

_/^From:(.*)/i REPLACE From: <[email protected]>
_

sender_canonical

_/.*/    [email protected]
_

sender_access

_/(.*)/  prepend Reply-To: <$1>
_

これは受信メールに最適です。 [email protected]がメールを[email protected]に送信し、new @ another-external.comに転送されます

_Reply-To: <[email protected]>
X-Original-To: <[email protected]>
To: [email protected]
From: <[email protected]>
X-Original-From: <[email protected]>
_

問題は、これはサーバーからの送信メールでも発生します。たとえば、me @ verified-domain.comがメールを送信すると、送信元は返信なしに書き換えられ、返信先が設定されます。これを修正したい。メールヘッダーは、転送される受信メールに対してのみ書き換える必要があります。

私は!/^From:(\s)?(.*@verified-domain\.com)/のような正規表現を使ってみましたが、今のところうまくいきません。

3
kero

Postfix 2.1以降では、regexおよびpcreテーブル内の条件演算子をサポートしています。あなたの場合second_header_checksこれらの条件文を使用すると、次のようになります。

if !/^From:(.*)@verified-domain.com/i
/^From:(.*)/i REPLACE From: <[email protected]>
endif

実際に次のようなものを送信せずに、ルックアップテーブルをテストできます。

peter@mail:~peter $ cat msgheaders
From: <[email protected]>
To: [email protected]

peter@mail:~peter $ postmap -hmq - regexp:/etc/postfix/second_header_checks < msgheaders
From: <[email protected]>     REPLACE From: <[email protected]>

peter@mail:~peter $ cat msgheaders-1
From: <[email protected]>
To: [email protected]

peter@mail:~peter $ postmap -hmq - regexp:/etc/postfix/second_header_checks < msgheaders-1
peter@mail:~peter $ 
4
Peter Zhabin

私はこれと非常に似た何かを別のメールサービスで実行しようとしていましたが、ここで私がそれを解決した方法です(このスレッドから多くの助けを得た後):

  1. 外部宛先の例のローカルで実行されているsmtpデーモンへのネクストホップを設定するトランスポートマップを設定します。[email protected] smtp:localhost:9999
  2. ローカルで実行中の新しいsmtpデーモンをmaster.cfに追加し、ヘッダーチェック、正規マップ、およびcanonical_classesをこのデーモンのみに適用します
  3. ローカルで実行されているデーモンでcontent_filterを使用して、外部宛先のmxサーバーをポイントします。鉱山はこんな感じでした-o content_filter=smtp:[mx.somedomain.com]:25
  4. ローカルで実行されているデーモンでsmtpd_recipient_restrictionsを変更して、リレーとして機能するようにする必要がある場合があります。例えば: -o smtpd_recipient_restrictions=permit_mynetworks,defer(これは理想的でない可能性があります。ライブにプッシュする前に、dbl check security policy)

よろしくお願いします。詳細が必要な場合は、私がお手伝いします。

1
smiley