Skip to main content

Rutas Específicas o smarthost complejo para Exim y cPanel

Configuración de Smart Relay en cPanel/Exim

Smarthosts

A veces, lidiar con Microsoft, Yahoo y toda la gama de Big Tech dedicadas al correo es una misión imposible. Son los eternos enemigos de las empresas de servicios de hosting, por muchas razones, una de ellas es la cultura de "con ellos no tengo problemas".

  • Excepto cuando un correo se pierde y no hay soporte.
  • Excepto cuando alguien borra los correos y no hay soporte.
  • Excepto cuando tu ex (socio, pareja, ...) secuestra la cuenta de tu empresa.
  • Excepto cuando tienes un problema y no hay soporte.

El caso que nos ocupa es la modificación de Exim para cPanel, siguiendo sus especificaciones para construir una red de smarthosts para clientes con problemas.

Aunque está dedicada a cPanel y sus peculiaridades, es fácilmente trasladable a Directadmin.

Editado el dia 21/05/2025 Cambios debidos a la aparición de problemas por message has lines too long for transport. Tras revisarlo y dada la dificultad de testing se cambia de óptica en la configuración.

Funcionamiento en cPanel

cPanel utiliza un script (/usr/local/cpanel/3rdparty/bin/perl/buildeximconf) que:

  1. Lee el archivo /etc/exim_cpanel/exim.conf.local
  2. Procesa todos los includes y configuraciones
  3. Genera un nuevo /etc/exim.conf con toda la configuración consolidada
  4. Verifica la sintaxis antes de aplicar los cambios
  5. Si hay errores, mantiene la configuración anterior

Por esto es importante realizar los cambios en el editor de configuración de Exim en la pestaña Avanzado de WHM, ya que esto asegura que:

  • La sintaxis es correcta
  • Los includes se procesan adecuadamente
  • La configuración es validada antes de aplicarse

Introducción

cPanel utiliza un enfoque modular y eficiente para la configuración de smart relay, permitiendo definir rutas específicas por dominio y rutas por defecto, mientras mantiene la capacidad de excluir ciertos remitentes del enrutamiento inteligente. La configuración se divide en varios archivos dentro del directorio /etc/exim_cpanel/.

Estructura de Archivos

1. Configuración Principal (/etc/exim_cpanel/exim.conf.local)

Para implementar los cambios en la configuración de Exim, hay dos métodos:

Método 1: A través de WHM (Recomendado)

  1. Acceder a WHM
  2. Ir a "Service Configuration" > "Exim Configuration Manager"
  3. Seleccionar la pestaña "Advanced Editor"
  4. Localizar la sección ROUTERSTART y añadir la configuración de abajo
.include_if_exists /etc/exim/routers.pre.conf
  1. Localizar la sección TRANSPORTSTART y añadir la configuración de abajo
remote_smtp_dkim:
  driver = smtp
  hosts_require_tls = *
  interface = ${if exists{/etc/mailips}{${lookup{$sender_address_domain}lsearch*{/etc/mailips}{$value}{}}}{}}
  helo_data = ${if exists{/etc/mailhelo}{${lookup{$sender_address_domain}lsearch*{/etc/mailhelo}{$value}{$primary_hostname}}}{$primary_hostname}}
  dkim_domain = ${perl{get_dkim_domain}}
  dkim_selector = default
  dkim_private_key = /var/cpanel/domain_keys/private/${dkim_domain}
  dkim_canon = relaxed
  message_linelength_limit = 998
  1. Guardar los cambios
  2. WHM ejecutará automáticamente la validación y reconstrucción de la configuración

Método 2: Línea de comandos (Para administradores avanzados)

  1. Editar directamente el archivo añdiendo lso mismos datos en las mismas secciones como en el ejemplo de abajo:
vi /etc/exim_cpanel/exim.conf.local
@ROUTERSTART@
.include_if_exists /etc/exim/routers.pre.conf
@TRANSPORTEND@

@TRANSPORTMIDDLE@

@TRANSPORTSTART@
remote_smtp_dkim:
  driver = smtp
  hosts_require_tls = *
  interface = ${if exists{/etc/mailips}{${lookup{$sender_address_domain}lsearch*{/etc/mailips}{$value}{}}}{}}
  helo_data = ${if exists{/etc/mailhelo}{${lookup{$sender_address_domain}lsearch*{/etc/mailhelo}{$value}{$primary_hostname}}}{$primary_hostname}}
  dkim_domain = ${perl{get_dkim_domain}}
  dkim_selector = default
  dkim_private_key = /var/cpanel/domain_keys/private/${dkim_domain}
  dkim_canon = relaxed
  message_linelength_limit = 998
  1. Ejecutar el script de reconstrucción:
/usr/local/cpanel/scripts/buildeximconf
  1. Si hay errores, el script los mostrará y mantendrá la configuración anterior
  2. Si todo es correcto, verás el mensaje: "Configuration file passes test! New configuration file was installed."

IMPORTANTE: El script buildeximconf no solo recompila la configuración, también:

  • Verifica la sintaxis
  • Actualiza la configuración DKIM
  • Actualiza los permisos necesarios
  • Reinicia los servicios relacionados si es necesario

2. Router Smart Routes (/etc/exim_cpanel/routers.pre.conf)

Define el router para el enrutamiento inteligente:

smart_routes_router:
  driver = manualroute
  domains = !+local_domains
  transport = remote_smtp_dkim
  condition = ${if exists{/etc/exim/skip_smart_senders}\
              {${lookup{$sender_address_domain}nwildlsearch{/etc/exim/skip_smart_senders}{no}{yes}}}\
              {yes}}
  route_list = * ${lookup{$domain}nwildlsearch{/etc/exim/smart_routes.txt}{$value}{${lookup{*}nwildlsearch{/etc/exim/smart_routes.txt}{$value}{}}}}
  hosts_randomize = true

3. Smart Routes (/etc/exim_cpanel/smart_routes.txt)

Archivo principal de rutas que combina rutas específicas y la ruta por defecto:

gmail.com: hetzner-xer08.domain.tld:hetzner-xer06.domain.tld:hetzner-xer01.domain.tld:hetzner-xer02.domain.tld:hetzner-xer04.domain.tld
hotmail.com: hetzner-xer06.domain.tld:hetzner-xer07.domain.tld
hotmail.es: hetzner-xer06.domain.tld:hetzner-xer07.domain.tld
outlook.com: hetzner-xer06.domain.tld:hetzner-xer07.domain.tld
outlook.es: hetzner-xer06.domain.tld:hetzner-xer07.domain.tld
live.com: hetzner-xer06.domain.tld:hetzner-xer07.domain.tld
yahoo.com: hetzner-xer02.domain.tld:hetzner-xer03.domain.tld
yahoo.es: hetzner-xer02.domain.tld:hetzner-xer03.domain.tld

# Rutas específicas para dominios institucionales
policia.es: hetzner-xer11.domain.tld:hetzner-xer06.domain.tld

# Rutas específicas para clientes
amenabarobrasyproyectos.com: hetzner-xer01.domain.tld:hetzner-xer07.domain.tld

# Ruta por defecto para todos los demás dominios. Es necesario el wildcard
*: hetzner-xer11.domain.tld:hetzner-xer01.domain.tld:hetzner-xer06.domain.tld

el # funciona como cometario, por lo que se peude usar para activar o desactivar una ruta para un destnio particular

la existencia de * es ncesaria. He realizado otras configuraciones más complejas, para evitarlo pero alfinal,s iempre aparecen muchos problemas, para los que no tengo tiempo actualemente. Con esta, puedo garatinzar el funcionamiento de todos los correos a dominios externos.

4. Exclusiones de Smart Routing (/etc/exim_cpanel/skip_smart_senders)

Define qué remitentes deben usar el routing estándar de Exim:

# Excluir solo el hostname completo del smart routing
servidor02.domain.tld
# Excluir algun dominio emisor en particular
exclude-domain.tld

Diferencias con DirectAdmin

Puedes consultar como Configuración de Smart Relay en DirectAdmin/Exim

  1. Estructura de Configuración

    • DirectAdmin: Utiliza un único archivo con un router y un transporte
    • cPanel: Sistema modular con includes condicionales
  2. Granularidad

    • DirectAdmin: Una configuración global para todos los dominios
    • cPanel: Permite configurar rutas específicas y exclusiones
  3. Flexibilidad

    • DirectAdmin: Configuración más directa pero menos flexible
    • cPanel: Sistema modular que permite activar/desactivar componentes
  4. Balanceo de Carga

    • DirectAdmin: Usa hosts_randomize para balanceo aleatorio
    • cPanel: Balanceo implícito mediante lista de servidores por dominio

Funcionamiento

  1. Proceso de Enrutamiento

    • Primero verifica si el remitente debe ser excluido (skip_smart_senders)
    • Si no está excluido, busca una ruta específica para el dominio destino
    • Si no encuentra ruta específica, usa la ruta por defecto (*)
  2. Redundancia y Balanceo

    • Múltiples servidores pueden especificarse para cada ruta
    • Balanceo mediante hosts_randomize
    • Failover implícito al siguiente servidor en la lista
  3. Exclusiones

    • Sistema simple pero efectivo para excluir remitentes específicos
    • Útil para correos del sistema y casos especiales

Ventajas del Enfoque Modular

  1. Control Granular

    • Exclusión selectiva de remitentes
    • Rutas específicas por dominio
    • Ruta por defecto como fallback
  2. Mantenimiento Simple

    • Archivos independientes para cada función
    • Cambios no requieren modificar la configuración principal de Exim
    • Fácil activar/desactivar funcionalidades
  3. Robustez

    • Sistema de fallback en múltiples niveles
    • Configuración a prueba de fallos
    • Fácil diagnóstico y debugging

Notas de Implementación

  1. Los archivos deben tener permisos adecuados
  2. El hostname en skip_smart_senders debe ser el FQDN exacto
  3. Los cambios en las rutas no requieren reinicio del servicio
  4. El orden de los servidores determina la prioridad de uso

Esta implementación ofrece mayor flexibilidad y control granular sobre el enrutamiento del correo saliente, aunque requiere más mantenimiento que la solución más simple de DirectAdmin.

Aviso

Esta documentación y su contenido, no implica que funcione en tu caso o determinados casos. También implica que tienes conocimientos sobre lo que trata, y que en cualquier caso tienes copias de seguridad. El contenido el contenido se entrega, tal y como está, sin que ello implique ningún obligación ni responsabilidad por parte de Castris

Si necesitas soporte profesional puedes contratar con Castris soporte profesional.