Exim: 「Begin Authenticators」セクションに、SMTP リレーごとに 1 つずつ、複数の認証子を設定できますか?

Exim: 「Begin Authenticators」セクションに、SMTP リレーごとに 1 つずつ、複数の認証子を設定できますか?

私の exim は、すべての受信メールをサードパーティの SMTP リレーに中継します。SMTP 認証 (ユーザー名/パスワード) を使用します。

Exim 構成のセクションでは、1 つのユーザー名/パスワードしか定義できないようですbegin authenticators。特定の電子メールを 1 つのリレー (独自のユーザー名/パスワード認証を使用) 経由でルーティングし、他の電子メールを 2 番目のリレー (ユーザー名/パスワード認証は最初のものと異なります) 経由でルーティングしたいと考えています。

これが私の設定の大部分です。リストbegin routers内のドメインを+local_domainsにリレーしsmtp-relay-1、残りは にリレーしますsmtp-relay-2

begin routers

my_domains_relay:
  debug_print = "R: my_domains_relay for $local_part@$domain"
  driver = manualroute
  domains = +local_domains
  transport = remote_smtp_smarthost
  route_list = * "<+ smtp-relay-1.example.com:465"
  host_find_failed = defer
  no_more

smart_host_relay:
  debug_print = "R: smart_host_relay for $local_part@$domain"
  driver = manualroute
  transport = remote_smtp_smarthost
  route_list = * "<+ smtp-relay-2.example.net:465"
  host_find_failed = defer
  no_more

begin transports

remote_smtp_smarthost:
  debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
  driver = smtp
  port = 465
  hosts_require_tls = *
  hosts_require_auth = *
  protocol = smtps

begin authenticators

login:
  driver = plaintext
  public_name = PLAIN
  client_send = ^my-username^top-secret-password

私が望んでいるのは、セクションで個別のユーザー名/パスワード認証を定義しbegin authenticators、それぞれを単一のルーター/トランスポートに割り当てることです。現在、ユーザー名/パスワード認証はグローバルであり、すべてのリレーに使用されています。

exim のドキュメントには、public_name をサーバーによってアドバタイズされた認証と一致させると書かれています。したがって、両方の SMTP リレーが としてアドバタイズする場合、AUTH PLAIN両方とも構成内の 1 つの認証子のユーザー名/パスワードを使用します。認証子のインスタンスを特定のルーター/トランスポートにリンクできる設定があることを期待していますが、方法がわかりません。

答え1

認証オプションを使用できますclient_condition(cf.セクションSMTP認証マニュアルの)。

Exim は、指定されたパブリック名に対して、クライアント側認証子とサーバー側認証子の 2 つの認証子まで受け入れます。

しかし、あなたが求めている機能はDebianのデフォルト設定にすでに含まれています。exim4 設定ファイルをパッケージ化して抽出します ( ar2 つのアーカイブを含むアーカイブですtar)。

ファイルには、/etc/exim4/conf.d/auth/30_exim4-config_examples次のクライアント認証子が含まれています。

  1. ファイルからパスワードを読み込む/etc/exim4/passwd.clientため、パスワードはEximの設定には含まれません。ファイルの形式は、サーバーごとに1行で<servername>:<username>:<password>
  2. ホストに応じてパスワードを選択してください。
  3. 十分にテストされているため、Exim の文字列展開をテストする必要はありません。

Debian の設定は、次のクライアント認証子に要約されます。

# this returns the matching line from passwd.client and doubles all ^
PASSWDLINE=${sg{\
                ${lookup{$host}nwildlsearch{CONFDIR/passwd.client}{$value}fail}\
                }\
                {\\N[\\^]\\N}\
                {^^}\
            }

plain:
  driver = plaintext
  public_name = PLAIN
.ifndef AUTH_CLIENT_ALLOW_NOTLS_PASSWORDS
  client_send = "<; ${if !eq{$tls_out_cipher}{}\
                    {^${extract{1}{:}{PASSWDLINE}}\
                     ^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}\
                   }fail}"
.else
  client_send = "<; ^${extract{1}{:}{PASSWDLINE}}\
                    ^${sg{PASSWDLINE}{\\N([^:]+:)(.*)\\N}{\\$2}}"
.endif

答え2

同じ認証システムで、if 条件を使用して、認証するユーザー名:パスワードのセットを選択できます。ただし、最初に使用するリレーを選択するための「条件」が必要です。

たとえば、メールを送信する場合[メールアドレス]my-username:top-secret-passwordで認証されたsmtp-relay-1.example.comを使用し、[メールアドレス]my-username2:top-secret-password2 で認証された smtp-relay-2.example.com を使用します

ルーターとトランスポートは同じになります

begin routers

my_domains_relay:
  debug_print = "R: my_domains_relay for $local_part@$domain"
  driver = manualroute
  domains = +local_domains
  transport = remote_smtp_smarthost
  route_list = * "<+ smtp-relay-1.example.com:465"
  host_find_failed = defer
  no_more

smart_host_relay:
  debug_print = "R: smart_host_relay for $local_part@$domain"
  driver = manualroute
  transport = remote_smtp_smarthost
  route_list = * "<+ smtp-relay-2.example.net:465"
  host_find_failed = defer
  no_more

begin transports

remote_smtp_smarthost:
  debug_print = "T: remote_smtp_smarthost for $local_part@$domain"
  driver = smtp
  port = 465
  hosts_require_tls = *
  hosts_require_auth = *

認証装置は次のように変更する必要がある

begin authenticators

login:
  driver = plaintext
  public_name = PLAIN
  client_send = ^${if   eq{$domain}{domain1.com}\
                        {my-username}\
                        {my-username2}}\
                ^${if   eq{$domain}{domain1.com}\
                        {top-secret-password}\
                        {top-secret-password2}}

関連情報