SRSデーモンを使用したexim4の設定

SRSデーモンを使用したexim4の設定

外部 SRS デーモン (Debian パッケージ srs) を使用して exim 4 を設定するのに苦労しています。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 (data で始まる行))。

前提条件がよくわかりません:

senders = ! : 

この行により、ルータがエラー メッセージを実行するのを防ぐことができます。

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

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

domains = ! +local_domains : ! +relay_to_domains

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

誰か説明してもらえませんか?

(私はマニュアル出発点としては成功しなかったものの。

答え1

適切にテストされていません。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 タグ付き送信者アドレスを含まないようにバウンス エラー メッセージ テキストを書き換えること、タグなしバウンスを拒否することなど。そのため、優れたチュートリアルがありがたいです。ありがとうございます!

関連情報