外部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
この行は、ローカル受信者へのメッセージまたはリレーされたメッセージに対してルーターが実行されないようにする必要があります。
誰か明確にしていただけませんか?
(私は 手動 を開始点として使用しましたが、成功しませんでした。)
あなたはきちんとテストしませんでした。 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でタグ付けされた送信者アドレスを含めないようにします。タグ付けされていないバウンスを拒否するなど、良いチュートリアルをいただければ幸いです。ありがとう!