Solucionar el error SMTP de Exim: Helo con IP local no válido

Dic
03

Solucionar el error SMTP de Exim: Helo con IP local no válido

Cuanto tenemos un servidor con CentoOS o Debian y utilizamos Exim como servidor de correo es posible que se se produzco un error cuando intentamos enviar emails mediante SMTP. Esto ocurre cuando para enviar emails utilizamos, por ejemplo, Mozilla Thunderbird, Microsoft Outlook, Apple Mail y otros clientes de correo.

El error ocurrirá cuando intentemos enviar un email, momento en el que el servidor de correo nos responderá un mensaje tal que así:

Helo name contains a ip address (HELO was [192.168.x.x]) and not is valid.

Ésto no ocurrirá siempre bajo la misma configuración del servidor. Solamente ocurrirá cuando enviemos emails a través de algunos ISP o cuando la configuración de nuestro router no sea la correcta.

¿ Cuándo y por qué se produce el error?

Cuando el servidor nos devuelva el mensaje de error antes citado, si miramos el archivo de log de Exim, veremos que pone exactamente lo mismo. Concretamente, el problema ocurre cuando, al enviar un email, se envía una señal Helo para validar nuestra dirección, que tiene que ser validada por el servidor.

Si nos fijamos en la IP que aparece en el error, veremos que seguramente comience por 192.168…, que es un rango reservado para IPs locales. Cuando el servidor recibe la señal y responde, resulta que intentará comunicarse con una IP a la que, al ser local, no puede acceder. Por consiguiente, Exim no aceptará el email. Esto no ocurre cuando enviamos emails mediante SMTP y tenemos IP fija ni cuando la IP que enviamos al servidor es nuestra IP real.

Si hemos instalado el panel de hosting VestaCP, este error es muy común, aunque ojo, es muy discutible si el problema es de la configuración del servidor o del usuario, ya que deshabilitar esta comprobación supondrá una pequeña brecha de seguridad.

¿Cual es la solución al problema?

Debemos conectarnos al servidor mediante SSH y abrir el archivo de configuración de Exim, que puede encontrarse en uno de los siguientes lugares dependiendo de tu distribución y de tu configuración:

  • General: /etc/exim.conf
  • CentOS: /etc/exim/exim.conf
  • Ubuntu: /etc/exim4/exim4.conf
  • Debian: /etc/exim4/exim4.conf
  • Freebsd: /usr/local/etc/exim/configure

Para editar el archivo podemos utilizar los editores Vi, Nano, o cualquier otro editor. Por ejemplo, para CentOS:

# nano /etc/exim/exim.conf

Dentro del archivo tenemos que buscar las siguientes líneas, que estarán en la sección ACL CONFIGURATION:

acl_check_mail:

 deny condition = ${if eq{$sender_helo_name}{}}
 message = HELO required before MAIL

 drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid
 condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}}
 condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}}
 delay = 45s

 drop condition = ${if isip{$sender_helo_name}}
 message = Access denied - Invalid HELO name (See RFC2821 4.1.3)
 ....

Estas líneas sirven para detectar la IP del emisor y enviar una petición Helo para validarla, que es lo que queremos deshabilitar, así que comentamos las líneas correspondientes:

acl_check_mail:

# deny condition = ${if eq{$sender_helo_name}{}}
# message = HELO required before MAIL

# drop message = Helo name contains a ip address (HELO was $sender_helo_name) and not is valid
# condition = ${if match{$sender_helo_name}{\N((\d{1,3}[.-]\d{1,3}[.-]\d{1,3}[.-]\d{1,3})|([0-9a-f]{8})|([0-9A-F]{8}))\N}{yes}{no}}
# condition = ${if match {${lookup dnsdb{>: defer_never,ptr=$sender_host_address}}\}{$sender_helo_name}{no}{yes}}
# delay = 45s

# drop condition = ${if isip{$sender_helo_name}}
# message = Access denied - Invalid HELO name (See RFC2821 4.1.3)

 ...

Pulsamos Control + X, aceptamos guardar los cambios en el archivo y listo.

Reiniciando Exim

Por último, tenemos que reiniciar Exim para que cargue los cambios que hemos realizado en el archivo de configuración:

# service exim restart
Shutting down exim: [ OK ]
Starting exim: [ OK ]

Ya hemos terminado.

Acerca de EduZRO

Ingeniero técnico en informática, actualmente trabajo como desarrollador web y programador de videojuegos.

Escribe un comentario