Exim no siempre envía nombre de usuario/contraseña de AUTH LOGIN

Exim no siempre envía nombre de usuario/contraseña de AUTH LOGIN

Estamos enviando correo usando exim (configurado a través de WHM). Con exactamente la misma configuración, aparentemente la mayoría de las veces exim envía el nombre de usuario y la contraseña de AUTH LOGIN correctos, sin embargo, a veces omite esta parte y sendgrid se niega con el siguiente error:

host smtp.sendgrid.net [158.85.10.138]
SMTP error from remote mail server after MAIL FROM:<info@*******.net> SIZE=2048:
550 Unauthenticated senders not allowed

Profundizando en ello, puedo reproducir el problema (no siempre, a veces) con lo siguiente:

# exim -v **@****.com
From: **@****.com
To: **@****.com
Subject: Test exim

This is an exim test.

Estos son los ajustes de configuración de exim:

Sección: AUTH

sendgrid_login:
  driver = plaintext
  public_name = LOGIN
  client_send = : ******** : **************

Sección: INICIO DEL ROUTER

send_via_sendgrid:
  driver = manualroute
  domains = ! +local_domains
  transport = sendgrid_smtp
  route_list = "* smtp.sendgrid.net::587 byname"
  host_find_failed = defer
  no_more

Sección: TRANSPORTEINICIO

sendgrid_smtp:
  driver = smtp
  hosts = smtp.sendgrid.net
  hosts_require_auth = smtp.sendgrid.net
  hosts_require_tls = smtp.sendgrid.net
  authenticated_sender_force = true

Cuando funciona, este es el registro:

LOG: MAIN
  cwd=/home/** 3 args: exim -v **@****.com
From: **@****.com
To: **@****.com
Subject: Test exim

This is an exim test.
LOG: MAIN
  <= **@****-**.com U=jf P=local S=354 T="Test exim"
**@****-** [~]# LOG: MAIN
  cwd=/var/spool/exim 4 args: /usr/sbin/exim -v -Mc 1ZjWZy-0005re-S3
delivering 1ZjWZy-0005re-S3
Transport port=25 replaced by host-specific port=587
Connecting to smtp.sendgrid.net [198.37.144.212]:587 ... connected
  SMTP<< 220 ismtpd-064 ESMTP service ready
  SMTP>> EHLO **.****-**.com
  SMTP<< 250-**.***.26.157
         250-SIZE 20480000
         250-STARTTLS
         250-AUTH PLAIN LOGIN
         250-8BITMIME
         250-PIPELINING
         250 AUTH=PLAIN LOGIN
  SMTP>> STARTTLS
  SMTP<< 220 Begin TLS negotiation now
  SMTP>> EHLO **.****-**.com
  SMTP<< 250-**.***.26.157
         250-8BITMIME
         250-SIZE 20480000
         250-AUTH=PLAIN LOGIN
         250-AUTH PLAIN LOGIN
         250 PIPELINING
  SMTP>> AUTH LOGIN
  SMTP<< 334 VXNlcm5hbWU6
  SMTP>> ****
  SMTP<< 334 UGFzc3dvcmQ6
  SMTP>> ********************
  SMTP<< 235 Authentication successful.
  SMTP>> MAIL FROM:<**@****-**.com> SIZE=1388 AUTH=**@****-**.com
  SMTP>> RCPT TO:<**@****.com>
  SMTP>> DATA
  SMTP<< 250 Sender address accepted
  SMTP<< 250 Recipient address accepted
  SMTP<< 354 Continue
  SMTP>> writing message and terminating "."
  SMTP<< 250 Delivery in progress
  SMTP>> QUIT
LOG: MAIN
  => **@****.com R=send_via_sendgrid T=sendgrid_smtp H=smtp.sendgrid.net [198.37.144.212] X=TLSv1.2:AES128-GCM-SHA256:128 A=sendgrid_login C="250 Delivery in progress"
LOG: MAIN
  Completed

Presta especial atención a la línea SMTP>> AUTH LOGINy a los seis que están justo debajo, que terminan en la 235 Authentication successful.línea.

Aquí hay un fracaso:

LOG: MAIN
  cwd=/home/** 3 args: exim -v **@****.com
From: **@****.com
To: **@****.com
Subject: Test exim

This is an exim test.
LOG: MAIN
  <= **@****-**.com U=jf P=local S=340 T="Test exim"
**@****-** [~]# LOG: MAIN
  cwd=/var/spool/exim 4 args: /usr/sbin/exim -v -Mc 1ZjWjO-0006T8-Eq
delivering 1ZjWjO-0006T8-Eq
Transport port=25 replaced by host-specific port=587
Connecting to smtp.sendgrid.net [198.37.144.225]:587 ... connected
  SMTP<< 220 ismtpd-078 ESMTP service ready
  SMTP>> EHLO ****-**.com
  SMTP<< 250-**.***.157
         250-SIZE 20480000
         250-STARTTLS
         250-AUTH PLAIN LOGIN
         250-8BITMIME
         250-PIPELINING
         250 AUTH=PLAIN LOGIN
  SMTP>> STARTTLS
  SMTP<< 220 Begin TLS negotiation now
  SMTP>> EHLO ****-**.com
  SMTP<< 250-**.***.26.157
         250-8BITMIME
         250-SIZE 20480000
         250-AUTH=PLAIN LOGIN
         250-AUTH PLAIN LOGIN
         250 PIPELINING
  SMTP>> MAIL FROM:<**@****-**.com> SIZE=1374
  SMTP>> RCPT TO:<**@****.com>
  SMTP>> DATA
  SMTP<< 550 Cannot receive from specified address <**@****-**.com>: Unauthenticated senders not allowed
  SMTP<< 503 Must have sender before recipient
  SMTP<< 503 Must have valid receiver and originator
  SMTP>> QUIT
LOG: MAIN
  ** **@****.com R=send_via_sendgrid T=sendgrid_smtp H=smtp.sendgrid.net [198.37.144.225] X=TLSv1.2:AES128-GCM-SHA256:128: SMTP error from remote mail server after MAIL FROM:<**@****-**.com> SIZE=1374: 550 Cannot receive from specified address <**@****-**.com>: Unauthenticated senders not allowed
LOG: MAIN
  cwd=/var/spool/exim 8 args: /usr/sbin/exim -v -t -oem -oi -f <> -E1ZjWjO-0006T8-Eq
LOG: MAIN
  <= <> R=1ZjWjO-0006T8-Eq U=mailnull P=local S=1383 T="Mail delivery failed: returning message to sender"
LOG: MAIN
  cwd=/var/spool/exim 4 args: /usr/sbin/exim -v -Mc 1ZjWjn-0006TR-BX
delivering 1ZjWjn-0006TR-BX
LOG: MAIN
  Completed
LOG: MAIN
  => ** <**@****-**.com> R=localuser T=local_delivery
LOG: MAIN
  Completed

Tenga en cuenta que SMTP>> AUTH LOGINlas siguientes seis líneas no se llaman...

La pregunta es, ¿por qué exim omite la SMTP>> AUTH LOGINparte real de la solicitud, pero sólo a veces? Está usando elexactamente lo mismoconfiguración de conexión (puede verla referenciada en ambos registros como R=send_via_sendgrid T=sendgrid_smtp).

Respuesta1

EDITAR 8 de noviembre de 2015:

La solución es utilizar

hosts_require_auth = <; $host_address
hosts_require_tls = <; $host_address

En lugar de

hosts_require_auth = smtp.sendgrid.net
hosts_require_tls = smtp.sendgrid.net

La sintaxis de aspecto inusual <;es en caso de que el nombre de host se resuelva en una dirección IPv6 (ya que, por lo que parece, los dos puntos en una dirección IPv6 pueden romper las cosas de otra manera). La variable $host_address se usa para resolver el caso en el que la dirección IP que el nombre de host resuelve cambia (como en este caso con smtp.sendgrid.net resolviendo múltiples IP y, a veces, una diferente resolviendo a mitad del proceso) - I Creo que evita que sea necesario volver a buscarlo (ver tambiénEl transporte SMTP). CréditoConfigurar Exim para usar Gmail como Smarthosty también el OP y @wurtel.

RESPUESTA ANTERIOR/CÓMO PROBAR Y REPRODUCIR::

Creo que el comentario de @wurtel sobre la pregunta sobre el cambio de dirección IP es correcto porque puedo reproducirlo de manera confiable usando un script para cambiar rápidamente qué IP resuelve smtp.sendgrid.net. También confirmé que sin ninguna entrada en el archivo de hosts, este problema ocurre al menos cada 2 horas cuando envío un correo electrónico cada 5 segundos, pero cuando codifiqué una IP en /etc/hosts, estuve durante 8 horas. sin ningún error en esa frecuencia de envío, así que esa es la solución temporal que estoy usando por ahora.

Así es como reproduje este problema. NOTA: esto está actualizado a finales de octubre de 2015; si lo intenta después de eso, las IP pueden ser diferentes, así que ejecútelo dig smtp.sendgrid.nety use dos IP que devuelva.

Agregue esto a /etc/hosts

108.168.190.108 smtp.sendgrid.net

Guarde esto en un archivo PHP, reemplazando[correo electrónico protegido]con una dirección de correo electrónico que usted controle.

#!/usr/local/bin/php
<?php
while (true) {
    mail('[email protected]', 'Test email deletethiswithafilter', 'test ' . time());
    usleep(500000);
}

Guarde esto en un archivo PHP y ejecútelo mientras se ejecuta lo anterior también. Cada 5 ms - 15 ms alternará la entrada en el archivo de hosts para smtp.sendgrid.net entre las dos IP que resuelve, que son 158.85.10.138 y 108.168.190.108

#!/usr/local/bin/php
<?php
while (true) {
    passthru('new_hosts_file_contents=`cat /etc/hosts | sed \'s/108.168.190.108/ip108/g\' | sed \'s/158.85.10.138/ip158/g\' | sed \'s/ip108/158.85.10.138/g\' | sed \'s/ip158/108.168.190.108/g\'`; echo "$new_hosts_file_contents" > /etc/hosts 2>&1');
    usleep(10000 + rand(-5000,5000));
}

información relacionada