Exim: "Begin Authenticators" 섹션에 각 smtp 릴레이마다 하나씩 여러 인증자가 있을 수 있습니까?

Exim: "Begin Authenticators" 섹션에 각 smtp 릴레이마다 하나씩 여러 인증자가 있을 수 있습니까?

내 exim은 들어오는 모든 이메일을 타사 smtp 릴레이로 릴레이합니다. 그들은 smtp 인증(사용자 이름/비밀번호)을 사용합니다.

begin authenticatorsExim 구성 섹션 에서는 하나의 사용자 이름/비밀번호만 정의할 수 있는 것 같습니다 . 특정 이메일을 하나의 릴레이(자체 사용자 이름/비밀번호 인증 포함)를 통해 라우팅하고 다른 이메일은 두 번째 릴레이(사용자 이름/비밀번호 인증이 첫 번째 릴레이와 다름)를 통해 라우팅하고 싶습니다.

내 구성의 대부분은 다음과 같습니다. 목록 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

인증자 옵션을 사용할 수 있습니다 client_condition(참조:섹션 SMTP 인증매뉴얼의).

Exim은 주어진 공개 이름에 대해 최대 2개의 인증자를 클라이언트측 인증자와 서버측 인증자로 허용합니다.

그러나 당신이 찾고 있는 기능은 이미 데비안의 기본 구성에 있습니다:exim4-config파일을 패키지하고 추출합니다( ar두 개의 아카이브가 포함된 아카이브 tar).

파일에는 /etc/exim4/conf.d/auth/30_exim4-config_examples다음과 같은 클라이언트 인증자가 포함되어 있습니다.

  1. 파일 에서 비밀번호를 읽으면 /etc/exim4/passwd.client비밀번호가 Exim의 구성에 포함되지 않습니다. 파일 형식은 서버당 한 줄씩 <servername>:<username>:<password>,
  2. 호스트에 따라 비밀번호를 선택하고,
  3. 잘 테스트되었으므로 Exim의 문자열 확장을 테스트할 필요가 없습니다.

데비안 구성은 다음 클라이언트 인증자로 요약됩니다:

# 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-condition을 사용하여 인증할 사용자 이름:비밀번호 세트를 선택할 수 있습니다. 하지만 먼저 사용할 릴레이를 선택하려면 "조건"이 필요합니다.

예를 들어 다음 주소로 메일을 보내는 경우[이메일 보호됨]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}}

관련 정보