Exim nem sempre enviando nome de usuário / senha AUTH LOGIN

4

Estamos enviando e-mails usando o exim (configurado por meio do WHM). Com a mesma configuração exata, aparentemente a maior parte do tempo exim envia o nome de usuário e a senha AUTH LOGIN corretos, no entanto, às vezes, ele está omitindo essa parte e o sendgrid está se recusando com o seguinte erro:

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

Pesquisando, posso reproduzir o problema (não sempre, às vezes) com o seguinte:

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

This is an exim test.

Estas são as definições de configuração do exim:

Seção: AUTH

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

Seção: ROUTERSTART

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

Seção: TRANSPORTSTART

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

Quando funciona, este é o log:

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

Preste atenção especial à linha SMTP>> AUTH LOGIN e as seis logo abaixo, terminando na linha 235 Authentication successful. .

Aqui está uma falha:

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

Note que SMTP>> AUTH LOGIN e as seguintes seis linhas não são chamadas ...?

A pergunta é: por que o exim está omitindo a parte SMTP>> AUTH LOGIN real da solicitação, mas apenas às vezes? Ele está usando a configuração de conexão same ex- ta (você pode ver isso referenciado nos dois logs como R=send_via_sendgrid T=sendgrid_smtp ).

    
por Jared Farrish 07.10.2015 / 01:16

1 resposta

4

EDIT 8 de novembro de 2015:

A solução é usar

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

Em vez de

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

A sintaxe <; de aparência incomum está no caso do nome do host resolver para um endereço IPv6 (já que parece que os dois-pontos em um endereço IPv6 podem quebrar as coisas de outra forma). A variável $ host_address é usada para resolver o caso em que o endereço IP que o nome do host resolve muda (como neste caso com smtp.sendgrid.net resolvendo para vários IPs e, às vezes, um diferente sendo resolvido para mid-process) - I acho que isso impede que ele precise ser consultado novamente (veja também The smtp transporte ). Crédito Configurando o Exim para usar o Gmail como um Smarthost e também o OP e o @wurtel.

RESPOSTA ANTERIOR / COMO TESTAR E REPRODUZIR ::

Acredito que o comentário de @ wurtel sobre a questão da alteração do endereço IP está correto, pois posso reproduzir de forma confiável isso usando um script para alterar rapidamente qual IP smtp.sendgrid.net resolve. Eu também confirmei que sem qualquer entrada no arquivo hosts, esse problema acontece pelo menos a cada 2 horas quando eu estou enviando um e-mail a cada 5 segundos, mas quando eu codifiquei um IP em / etc / hosts, fui por 8 horas sem erros nessa frequência de envio, então essa é a solução temporária que estou usando por enquanto.

Veja como eu reproduzi esse problema. OBSERVAÇÃO: isso é atual até o final de outubro de 2015 - se você tentar depois os IPs podem ser diferentes, execute dig smtp.sendgrid.net e use dois IPs em vez disso.

Adicione isto a / etc / hosts

108.168.190.108 smtp.sendgrid.net

Salve isso em um arquivo PHP, substituindo [email protected] por um endereço de e-mail que você controla.

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

Salve isso em um arquivo PHP e execute-o enquanto o acima está sendo executado também. A cada 5ms - 15ms, irá alternar a entrada no arquivo hosts para smtp.sendgrid.net entre os dois IPs que resolve para o qual são 158.85.10.138 e 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));
}
    
por 26.10.2015 / 04:28