• #Aplicaciones
  • #Bases de datos
  • #Dispositivos
  • #Hardware
  • #Inversión
  • #Marketing
  • #Programacion
  • #Sistemas
  • Solucionar el error SMTP de Exim: Helo con IP local no válido

    TutorialesAplicacionesEximLinuxServidoresSistemasTipos de aplicación

    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.


    Avatar de Edu Lazaro

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

    👋 Hola! Soy Edu, me encanta crear cosas y he redactado esta guía. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirla en Twitter 😊

    Si quieres conocer mis proyectos, sígueme en Twitter.

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *