web-dev-qa-db-ja.com

SRSデーモンを使用したexim4構成

外部SRSデーモン(Debianパッケージsrs)を使用してexim4をセットアップするのに苦労しています。 srsdは実行されており、アドレスを前後に正常に変換しています。 eximの組み込みsrsコードは、Debianで有効になっていないため、使用できません(自分でコンパイルできることはわかっていますが、オプションではありません)。

私が問題を抱えているのは、転送されたメールにSRSタグを追加するためのexim内のsrs_forwardルーターです。私は次のリダイレクトルーターを配置しています。これは、非ローカル送信者と非ローカル受信者からの非エラーメッセージに対してのみ実行され、別のmxには中継されません。少なくとも、このようなメッセージにsrsが適用されることは理解しています。これが間違っている場合は、私を訂正してください。私は次のコードを持っています:

srs_forward:
  debug_print = "R: srs_forward for $local_part@$domain"
  driver = redirect
  senders = ! :
  condition = ${if ! match_domain{$sender_address_domain}{+local_domains}}
  domains = ! +local_domains : ! +relay_to_domains
  address_data = ${readsocket{/tmp/srsd}\
                {FORWARD $sender_address_local_part@$sender_address_domain $domain\n}\
                                        {5s}{\n}{:defer: SRS daemon failure}}
  errors_to = ${quote_local_part:${local_part:$address_data}}@${domain:$address_data}
  data = ${quote_local_part:$local_part}@$domain
  headers_add = X-SRS: Sender address rewritten from $sender_address to ${quote_local_part:${local_part:$address_data}}@$$
  repeat_use = false
  allow_defer
  no_verify

テストして機能するもの:リターンパスが正しく生成されます(address_dataとerrors_toの行、およびto-address(データで始まる行)。

前提条件がわかりません。

senders = ! : 

この行は、エラーメッセージに対してルーターが実行されないようにする必要があります。

condition = ${if ! match_domain{$sender_address_domain}{+local_domains}}

この行は、ローカル送信者からのメッセージに対してルーターが実行されないようにする必要があります。

domains = ! +local_domains : ! +relay_to_domains

この行は、ローカル受信者へのメッセージまたはリレーされたメッセージに対してルーターが実行されないようにする必要があります。

誰か明確にしていただけませんか?

(私は 手動 を開始点として使用しましたが、成功しませんでした。)

3
Adrian Zaugg

あなたはきちんとテストしませんでした。 SRSデーモンに渡す情報が正しくありません。

FORWARD $sender_address_local_part@$sender_address_domain $domain\n

これはあなたが望むことをしません:$ domainは受信者ドメインを含み、送信ドメインを含みません。メッセージが転送されたドメインへのリターンパスを書き換えるというあなたの意図は尊重されますが、次のようには機能しません:メッセージはSRSルーターにヒットします転送はすでに行われているので、$ domainはメッセージの送信先のドメインはもう含まれていません。 $ primary_hostnameまたは$ original_domainを使用する必要があります。したがって、この行は次のようになります。

address_data = ${readsocket{/tmp/srsd}\
                {FORWARD $sender_address_local_part@$sender_address_domain $original_domain\n}\
                                    {5s}{\n}{:defer: SRS daemon failure}}

あなたの前提条件に関係することは、彼らは大丈夫です。 「送信者」と「条件」の行を一緒に取ることができます。

senders = ! : ! *@+local_domains

ドメインリストlocal_domainsに実際にすべてのローカルドメインが含まれていることを確認する必要があります(少なくとも、現在ルーティングされているメッセージ$ original_domainと$ sender_address_domainには含まれている必要があります)。

コードが実行されている場合は、構成を文書化し、ここにいくつかのヒントを提供してください。さらにいくつかのことを調整する必要があります:受信SRSタグ付きバウンスメッセージを検証するACL、グレーリスト用にSRSタグ付きメールのタグを外す、バウンスのタグを外す、発信メッセージにBATVなどの他のタグを追加しないようにする、回避してSRSタグ付きメッセージを受け入れるケースが壊された場合は、バウンスエラーメッセージのテキストを書き直して、SRSでタグ付けされた送信者アドレスを含めないようにします。タグ付けされていないバウンスを拒否するなど、良いチュートリアルをいただければ幸いです。ありがとう!

0
Adrian Zaugg