Configuración de exim4 con demonio SRS

Configuración de exim4 con demonio SRS

Estoy luchando por configurar exim 4 con un demonio SRS externo (paquete Debian srs). El srsd se está ejecutando y convirtiendo direcciones hacia adelante y hacia atrás sin problemas. No puedo usar el código srs incorporado de exim, ya que no está habilitado en Debian (sé que puedo compilarlo yo mismo, pero no es una opción).

Con lo que tengo problemas es con el enrutador srs_forward dentro de exim para agregar etiquetas SRS a los correos reenviados. Tengo implementado el siguiente enrutador de redireccionamiento, que debería ejecutarse solo para mensajes que no sean de error de remitentes y destinatarios no locales, que no se retransmiten a otro mx; al menos entiendo que se deben aplicar srs a dichos mensajes. Por favor corríjame si esto está mal. Tengo el siguiente código:

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

Lo que pude probar y funciona: la ruta de retorno se genera correctamente (líneas con dirección_datos y errores_a, así como la dirección de destino (línea que comienza con datos).

No estoy seguro de las condiciones previas:

senders = ! : 

Esta línea debería evitar que el enrutador se ejecute en busca de mensajes de error.

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

Esta línea debería evitar que el enrutador se ejecute para recibir mensajes de remitentes locales.

domains = ! +local_domains : ! +relay_to_domains

Esta línea debería evitar que el enrutador se ejecute para mensajes a destinatarios locales o para mensajes retransmitidos.

¿Alguien podría aclararlo?

(yo usé unmanualcomo punto de partida, aunque sin éxito.)

Respuesta1

No hiciste la prueba correctamente. La información que pasas al demonio SRS no es correcta:

FORWARD $sender_address_local_part@$sender_address_domain $domain\n

Esto no hace lo que desea: $dominio contiene el dominio del destinatario y no el dominio de envío. Su intención de reescribir la ruta de retorno al dominio por el que se reenvió el mensaje es honorable pero no funciona así: El mensaje llega a su enrutador SRSdespuésel reenvío ya se realizó, por lo que $dominio ya no contiene el dominio al que se envió el mensaje. Deberías usar $primary_hostname o $original_domain. Entonces esta línea debería verse así:

address_data = ${readsocket{/tmp/srsd}\
                {FORWARD $sender_address_local_part@$sender_address_domain $original_domain\n}\
                                    {5s}{\n}{:defer: SRS daemon failure}}

En cuanto a sus condiciones previas, están bien. Puede tomar las líneas "remitentes" y "condición" juntas:

senders = ! : ! *@+local_domains

Sólo necesita asegurarse de que la lista de dominios local_domains realmente contenga todos sus dominios locales (al menos debe contener para el mensaje actualmente enrutado $original_domain y $sender_address_domain).

Documente su configuración si su código se está ejecutando y denos algunas sugerencias aquí. Debe organizar varias cosas más: ACL para verificar los mensajes de rebote entrantes etiquetados con SRS, desetiquetar los correos etiquetados con SRS para incluirlos en la lista gris, desetiquetar los rebotes, asegurarse de no agregar ninguna otra etiqueta como BATV a los mensajes salientes, solucionar el problema para aceptar mensajes etiquetados con SRS con un caso roto, reescriba el texto del mensaje de error de rebote para no incluir la dirección del remitente etiquetado SRS, tal vez negar cualquier rebote no etiquetado, etc. Por lo tanto, se agradecería un buen tutorial. ¡Gracias!

información relacionada