Depois de ler muitos artigos sobre o sendmail relay tls port 587 gmail, ainda tendo problemas

3

O ambiente é o Amazon EC2, executando o Amazon Linux (como o Centos) com o sendmail 8.14.4 e o Cyrus sasl 2.1.23. A máquina tem um endereço IP elástico que é o alvo de um nome de domínio, e o DNS reverso é configurado para isso. Pontos de registro MX em um servidor externo, para que a máquina não lide com qualquer email de entrada na Internet, somente de saída. Para todos os emails de saída fora do nó, desejo usar uma conexão autenticada do TLS para smtp.googlemail.com.

Há muitos tutoriais e artigos sobre esse tipo de configuração (vários neste site e em seus sites irmãos), já que parece ser uma maneira bastante popular de lidar com e-mails na nuvem. Eu tenho lido cada um que posso encontrar, tentando coisas diferentes e estudando / var / log / maillog. Mas para a vida de mim, estou perplexo. Não é que eu não possa enviar e-mails com o sendmail, ou que eu não possa enviá-los por meio de uma conexão TLS autenticada para smtp.googlelemail.com: é só que não consigo enviar o sendmail por essa conexão! Eu admito que sou um novato no sendmail, e sei que ele tem uma reputação de configuração difícil, então eu realmente dediquei muito tempo a ele. Mas eu fiquei sem pistas e idéias neste momento.

Eu tenho um aplicativo php na máquina que usa o Zend Framework (1.11) e usa o Zend_Mail_Transport_Smtp. No construtor do transporte, especifico smtp.googlemail.com, porta 587, tls, [email protected] e senha. O e-mail desse aplicativo é enviado dividido por lickity e chega com cabeçalhos limpos (também adicionei um registro TXT incluindo os registros txt do google ao arquivo de zona do domínio).

Eu tenho outro aplicativo que usa o php mail diretamente, e o php mail depende do sendmail. Esse aplicativo também é capaz de enviar e-mails que cheguem bem sob a configuração padrão do sendmail fornecida com o Amazon Linux AMI (que não é retransmitido pelo googleemail). Mas os cabeçalhos nas mensagens que chegam não são tão limpos, pelo menos uma coisa é que há uma reclamação "neutra" da verificação do spf. Então, eu não estou preso sem email, é só que eu gostaria de poder usar o sendmail para o seu maior fiabilidade com enfileiramento de mensagens de saída em caso de multi-usuário rajadas de e-mails provenientes do site (como todos os novos usuários de o aplicativo Zend Framework inscreve-se em contas :-), e eu não quero que os usuários vejam os cabeçalhos e pensem que as coisas podem não estar corretas.

Portanto, o objetivo aqui é apenas modificar a configuração existente do sendmail para retransmitir os emails de saída através de uma conexão de porta 587 tls para o googlemail, da mesma forma que o aplicativo Zend Framework faz sem problemas. E então eu posso modificar o aplicativo Zend Framework para usar o sendmail para obter a proteção de sobrecarga do enfileiramento.

Quão difícil pode ser eu pensei ...

O que eu estou achando é que, com as mudanças em vigor na configuração do sendmail, as mensagens de saída invariavelmente ficam presas com essa mensagem em / var / log / maillog:

"timeout waiting for input from googlemail-smtp.l.google.com. during client greeting"

As mensagens entram no mailq e ficam lá, falhando sempre que são revividas.

Aqui estão os diffs entre o sendmail.cf que funciona enviando diretamente, e o modificado para retransmitir através do google:

# diff sendmail.mc-orig sendmail.mc-new
26c27,30
< dnl define('SMART_HOST', 'smtp.your.provider')dnl
---
> define('SMART_HOST', '[smtp.googlemail.com]')dnl
> define('RELAY_MAILER_ARGS', 'TCP $h 587')dnl
> define('ESMTP_MAILER_ARGS', 'TCP $h 587')dnl
> FEATURE(authinfo, 'Hash -o /etc/mail/authinfo.db')dnl
52,53c56,59
< dnl TRUST_AUTH_MECH('EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
< dnl define('confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
---
> dnl # TRUST_AUTH_MECH('EXTERNAL DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
> dnl # define('confAUTH_MECHANISMS', 'EXTERNAL GSSAPI DIGEST-MD5 CRAM-MD5 LOGIN PLAIN')dnl
> TRUST_AUTH_MECH('PLAIN LOGIN')dnl
> define('confAUTH_MECHANISMS', 'PLAIN LOGIN')dnl

Aqui está o arquivo authinfo de propriedade da raiz do modo 600 (higienizado):
AuthInfo:[smtp.googlemail.com] "U:[email protected]" P:"xyzzy" "M:PLAIN"

Eu também iniciei o saslauthd e editei /usr/lib/sasl2/Sendmail.conf para ler: < pwcheck_method:saslauthd > mech_list: login plain

Eu não configurei nenhum certificado, porque, até onde eu sabia, eles não são necessários se o sendmail estiver usando apenas o TLS em conexões de saída; e, de fato, a conexão da porta 587 funciona no aplicativo Zend Framework sem certificados instalados (ou o saslauthd sendo executado).

O nível 29 de uma mensagem enviada com a configuração de envio do sendmail é assim:

[31528]: q1F5dYcB031528: [email protected], size=7085, class=0, nrcpts=1, msgid=<[email protected]>, relay=nobody@localhost
[31529]: NOQUEUE: connect from localhost [127.0.0.1]
[31529]: AUTH: available mech=PLAIN LOGIN, allowed mech=PLAIN LOGIN
[31529]: q1F5dYYY031529: Milter: no active filter
[31529]: q1F5dYYY031529: --- 220 name.compute-1.internal ESMTP Sendmail 8.14.4/8.14.4; Wed, 15 Feb 2012 05:39:34 GMT
[31529]: q1F5dYYY031529: <-- EHLO name.compute-1.internal
[31529]: q1F5dYYY031529: --- 250-name.compute-1.internal Hello localhost [127.0.0.1], pleased to meet you
[31529]: q1F5dYYY031529: --- 250-ENHANCEDSTATUSCODES
[31529]: q1F5dYYY031529: --- 250-PIPELINING
[31529]: q1F5dYYY031529: --- 250-8BITMIME
[31529]: q1F5dYYY031529: --- 250-SIZE
[31529]: q1F5dYYY031529: --- 250-DSN
[31529]: q1F5dYYY031529: --- 250-ETRN
[31529]: q1F5dYYY031529: --- 250-AUTH PLAIN LOGIN
[31529]: q1F5dYYY031529: --- 250-DELIVERBY
[31529]: q1F5dYYY031529: --- 250 HELP
[31529]: q1F5dYYY031529: <-- MAIL From:<[email protected]> SIZE=7085 [email protected]
[31529]: ruleset=trust_auth, [email protected], relay=localhost [127.0.0.1], reject=550 5.7.1 <[email protected]>... not authenticated
[31529]: q1F5dYYY031529: --- 250 2.1.0 <[email protected]>... Sender ok
[31529]: q1F5dYYY031529: <-- RCPT To:<[email protected]>
[31529]: q1F5dYYY031529: --- 250 2.1.5 <[email protected]>... Recipient ok
[31529]: q1F5dYYY031529: <-- DATA
[31529]: q1F5dYYY031529: --- 354 Enter mail, end with "." on a line by itself
[31529]: q1F5dYYY031529: from=<[email protected]>, size=7190, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA, relay=localhost [127.0.0.1]
[31529]: q1F5dYYY031529: --- 250 2.0.0 q1F5dYYY031529 Message accepted for delivery
[31528]: q1F5dYcB031528: [email protected], [email protected] (99/99), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=37085, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (q1F5dYYY031529 Message accepted for delivery)
[31529]: q1F5dYYZ031529: <-- QUIT
[31529]: q1F5dYYZ031529: --- 221 2.0.0 name.compute-1.internal closing connection
[31531]: q1F5dYYY031529: SMTP outgoing connect on name.compute-1.interna
[31531]: q1F5dYYY031529: timeout waiting for input from googlemail-smtp.l.google.com. during client greeting
[31531]: q1F5dYYY031529: to=<[email protected]>, delay=00:05:00, xdelay=00:05:00, mailer=relay, pri=127190, relay=googlemail-smtp.l.google.com. [74.125.91.16], dsn=4.0.0, stat=Deferred: Connection timed out with googlemail-smtp.l.google.com.  

Eu vejo a mensagem "ruleset = trust_auth, ... not authenticated", mas além de não saber como corrigi-la, também vejo que ela é seguida imediatamente por uma mensagem ok, e o log mostra se ela continua tentando para se conectar ao relay, então eu acho que não tem nada a ver com o tempo limite ... Se eu estiver errado e alguém puder me dizer como consertar isso, seria ótimo!

O maillog de uma mensagem enviada com a configuração não modificada que funciona sem retransmissão (observe que "[email protected]" é na verdade um endereço com um registro mx para um servidor Network Solutions, e é por isso que a linha final tem um relé = para um host netsol.net):

[31425]: q1F5VtLr031425: [email protected], size=6743, class=0, nrcpts=1, msgid=<[email protected]>, relay=nobody@localhost
[31426]: NOQUEUE: connect from localhost [127.0.0.1]
[31426]: AUTH: available mech=PLAIN LOGIN, allowed mech=EXTERNAL GSSAPI KERBEROS_V4 DIGEST-MD5 CRAM-MD5
[31426]: q1F5VuPd031426: Milter: no active filter
[31426]: q1F5VuPd031426: --- 220 name.compute-1.internal ESMTP Sendmail 8.14.4/8.14.4; Wed, 15 Feb 2012 05:31:56 GMT
[31426]: q1F5VuPd031426: <-- EHLO name.compute-1.internal
[31426]: q1F5VuPd031426: --- 250-name.compute-1.internal Hello localhost [127.0.0.1], pleased to meet you
[31426]: q1F5VuPd031426: --- 250-ENHANCEDSTATUSCODES
[31426]: q1F5VuPd031426: --- 250-PIPELINING
[31426]: q1F5VuPd031426: --- 250-8BITMIME
[31426]: q1F5VuPd031426: --- 250-SIZE
[31426]: q1F5VuPd031426: --- 250-DSN
[31426]: q1F5VuPd031426: --- 250-ETRN
[31426]: q1F5VuPd031426: --- 250-DELIVERBY
[31426]: q1F5VuPd031426: --- 250 HELP
[31426]: q1F5VuPd031426: <-- MAIL From:<[email protected]> SIZE=6743
[31426]: q1F5VuPd031426: --- 250 2.1.0 <[email protected]>... Sender ok
[31426]: q1F5VuPd031426: <-- RCPT To:<[email protected]>
[31426]: q1F5VuPd031426: --- 250 2.1.5 <[email protected]>... Recipient ok
[31426]: q1F5VuPd031426: <-- DATA
[31426]: q1F5VuPd031426: --- 354 Enter mail, end with "." on a line by itself
[31426]: q1F5VuPd031426: from=<[email protected]>, size=6848, class=0, nrcpts=1, msgid=<[email protected]>, proto=ESMTP, daemon=MTA, relay=localhost [127.0.0.1]
[31426]: q1F5VuPd031426: --- 250 2.0.0 q1F5VuPd031426 Message accepted for delivery
[31425]: q1F5VtLr031425: [email protected], [email protected] (99/99), delay=00:00:01, xdelay=00:00:00, mailer=relay, pri=36743, relay=[127.0.0.1] [127.0.0.1], dsn=2.0.0, stat=Sent (q1F5VuPd031426 Message accepted for delivery)
[31428]: q1F5VuPd031426: SMTP outgoing connect on name.compute-1.interna
[31426]: q1F5VuPe031426: <-- QUIT
[31426]: q1F5VuPe031426: --- 221 2.0.0 name.compute-1.internal closing connection
[31428]: q1F5VuPd031426: to=<[email protected]>, delay=00:00:00, xdelay=00:00:00, mailer=esmtp, pri=126848, relay=inbound.domain.netsolmail.net. [205.178.149.7], dsn=2.0.0, stat=Sent (OK FB/29-06630-5434B3F4)
[31428]: q1F5VuPd031426: done; delay=00:00:00, ntries=1  

Aqui está o que eu recebo usando o telnet:

# telnet smtp.googlemail.com 587
Trying 74.125.93.16...
Connected to smtp.googlemail.com.
Escape character is '^]'.
220 mx.google.com ESMTP j17sm7987765qaj.9

502 5.5.1 Unrecognized command. j17sm7987765qaj.9
STARTTLS
503 5.5.1 EHLO/HELO first. j17sm7987765qaj.9
EHLO localhost
250-mx.google.com at your service, [nnn.nnn.nnn.nnn]
250-SIZE 35882577
250-8BITMIME
250-STARTTLS
250 ENHANCEDSTATUSCODES
STARTTLS
220 2.0.0 Ready to start TLS

Qualquer ajuda muito apreciada!

    
por sootsnoot 15.02.2012 / 08:08

1 resposta

1

Você parece ter um pequeno erro na sua declaração de senha, então tente o seguinte:

AuthInfo:googlemail.com "U:[email protected]" "P:xyzzy" "M:PLAIN"
AuthInfo:google.com "U:[email protected]" "P:xyzzy" "M:PLAIN"

Não se esqueça de executar o makemap e reconstruir authinfo.db:

makemap hash authinfo < authinfo
    
por 19.02.2012 / 21:29