Postfix: selección del host de retransmisión en función del encabezado de correo From: en lugar del remitente del sobre

9

He configurado con éxito Postfix para retransmitir correos electrónicos a través de Mandrill usando SASL y sender_dependent_relayhost_mapscon una tabla MySQL para que diferentes remitentes se conecten a Mandrill usando su propio nombre de usuario y clave API de Mandrill.

Hasta ahora todo bien, pero tengo tres usuarios que usan un proveedor de servicios de correo electrónico y el remitente en el sobre del mensaje está configurado en "[email protected]" para los tres usuarios, y el único lugar que contiene el correo electrónico del usuario real dirección está en la ciudad: email cabecera .

Estoy contento con la seguridad (o la falta de ella) de usar el encabezado de correo electrónico From: ya que solo reenvío los correos enviados a direcciones de correo electrónico específicas que están estrictamente controladas, pero agradecería mucho las sugerencias sobre cómo puedo especifique el mejor relayhost basado en el valor de la cabecera From: . ¿Hay alguna forma de establecer que el valor del sobre sea el mismo que el campo De? ¿O alguna otra forma de hacer esto?

Adrian Savage
fuente
¿Usaron los tres usuarios la misma credencial SASL?
masegaloeh
No, cada uno tiene una credencial SASL diferente. Cuando envían correos directamente desde su cliente de correo, identifica correctamente su retransmisión de correo y sus credenciales SASL en función de su dirección de envío. El uso del infusionmail.com ESP está haciendo imposible en esta etapa realizar la misma búsqueda basada en el remitente, ya que el remitente es el mismo y solo el encabezado de correo electrónico From: es diferente.
Adrian Savage

Respuestas:

5

Basado en este hilo en la lista de correo postfix: transporte diferente para todo el correo introducido a través de sendmail (1) , parece que su caso fue posible. Lamentablemente, no puede confiar solo en dos tablas sender_dependent_relayhost_mapsy smtp_sasl_password_maps. Necesitas modificarlo master.cf. La idea es utilizar header_checkspara enrutar el correo electrónico a diferentes transportes. Luego, en cada transporte, definimos el cliente smtp que utiliza credenciales independientes y host de retransmisión.

Primero defina header_checks en main.cf y su tabla pcre

#main.cf
header_checks = pcre:/etc/postfix/header_dependent_relay

#/etc/postfix/header_dependent_relay

/^From:.*specialsender1\@example\.com/       smtp1:[host1.example.com]
/^From:.*specialsender2\@example\.com/       smtp2:[host2.example.com]
/^From:.*specialsender3\@example\.com/       smtp3:[host3.example.com]

Bueno, ahora tenemos la configuración smtp1, smtp2, smtp3transporte en master.cf

#master.cf
smtp1    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp1.relay
smtp2    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp2.relay
smtp3    unix  -       -       -       -       10       smtp
    -o smtp_sasl_password_maps=hash:/etc/postfix/smtp3.relay

El archivo smtpX.relaytiene contenido similar, por ejemplo

[hostX.example.com]   userX:passwordX

Descargo de responsabilidad:

masegaloeh
fuente
0

Esto funcionó para mí con un cambio: la acción "FILTRO" debe agregarse en el archivo header_dependent_relay :

#/etc/postfix/header_dependent_relay

/^From:.*specialsender1\@example\.com/       FILTER smtp1:[host1.example.com]
/^From:.*specialsender2\@example\.com/       FILTER smtp2:[host2.example.com]
/^From:.*specialsender3\@example\.com/       FILTER smtp3:[host3.example.com]

Ver http://www.postfix.org/header_checks.5.html

Aurel
fuente