Mi exim transmite todo el correo electrónico entrante a retransmisiones SMTP de terceros. Utilizan autenticación SMTP (nombre de usuario/contraseña).
Parece que solo puedo definir UN nombre de usuario/contraseña en la begin authenticators
sección de configuración de Exim. Quiero enrutar cierto correo electrónico a través de un relé (con su propia autenticación de nombre de usuario/contraseña) y otro correo electrónico a través de un segundo relé (su autenticación de nombre de usuario/contraseña es diferente al primero).
Aquí está gran parte de mi configuración. Los begin routers
dominios de retransmisión en la +local_domains
lista smtp-relay-1
y el resto se retransmiten a 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
Lo que quiero es definir una autenticación de nombre de usuario/contraseña separada en la begin authenticators
sección y asignar cada una a un único enrutador/transporte. En este momento, la autenticación de nombre de usuario/contraseña es global y se utiliza para todos los relés.
La documentación de exim dice que coincide con public_name con una autenticación anunciada por el servidor. Entonces, si mis dos relés SMTP se anuncian como AUTH PLAIN
tal, ambos usan ese nombre de usuario/contraseña de autenticador en la configuración. Espero que haya una configuración que me permita vincular una instancia de autenticadores con un enrutador/transporte específico, pero no veo cómo.
Respuesta1
Puede utilizar la client_condition
opción de autenticador (cf.Sección Autenticación SMTPdel manual).
Exim acepta como máximo dos autenticadores para un nombre público determinado: como autenticador del lado del cliente y como autenticador del lado del servidor.
Sin embargo, la funcionalidad que busca ya se encuentra en la configuración predeterminada de Debian: descargue elconfiguración exim4empaquete y extraiga los archivos (es un ar
archivo que contiene dos tar
archivos).
El archivo /etc/exim4/conf.d/auth/30_exim4-config_examples
contiene autenticadores de cliente que:
- lea la contraseña del
/etc/exim4/passwd.client
archivo, por lo que la contraseña no está en la configuración de Exim. El formato del archivo es una línea por servidor en el<servername>:<username>:<password>
formato, - elija la contraseña según el host,
- están bien probados, por lo que no es necesario probar las expansiones de cadenas de Exim.
La configuración de Debian se reduce al siguiente autenticador de cliente:
# 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
Respuesta2
En el mismo autenticador, puede utilizar la condición if para seleccionar el conjunto de nombre de usuario:contraseña para autenticar. Pero necesita la "condición" para elegir qué relé usar primero.
Por ejemplo, para enviar correo a[correo electrónico protegido]utilizará smtp-relay-1.example.com autenticado por mi nombre de usuario: contraseña ultrasecreta, y[correo electrónico protegido]utilizará smtp-relay-2.example.com autenticado por my-username2:top-secret-password2
Los enrutadores y transportes serán los mismos.
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 = *
Los autenticadores deben cambiar a algo como esto
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}}