Meu postfix não envia AUTH PLAIN para o servidor de retransmissão de saída. Deve ter funcionado alguns dias atrás, mas agora recebo mensagens de devolução "retransmissão não permitida".
O sistema de correio é executado em uma VM Alpine Linux usando postfix, fetchmail e dovecot. O Postfix usa a biblioteca Cyrus SASL, não a dovecot.
Parte relevante do main.cf:
relayhost = [RELAY_HOST]
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/mailsrv/etc/postfix/sasl_passwd
smtp_sasl_security_options =
sasl_passwd:
[RELAY_HOST] USER:PASSWORD
Capturei uma sessão de saída com tcpdump e nenhum AUTH PLAIN foi enviado. Testei o envio de e-mail manualmente com telnet usando a linha AUTH PLAIN adequada e funcionou.
Então minha interpretação é que o postfix não decide usar SASL/AUTH PLAIN em algum momento.
Qual poderia ser o problema?
As permissões devem estar ok, o postmap foi chamado, o postfix reiniciado e recarregado, o libsasl está instalado e os relatórios do postfix foram construídos com cyrus. Eu sei que é um clichê, mas o sistema funcionava há alguns dias. A expiração de algum certificado pode ser um problema aqui, que não vejo nos logs?
Responder1
postfix envia HELO que não produz as linhas AUTH PLAIN
HELO é o comando de handshake original sem qualquer capacidade de negociar extensões. Antes que o cliente possa usar SASL, ele deve enviar EHLO (extended-hello) e verificar se o servidoranunciaos mecanismos SASL desejados.
Por padrão, muitos clientes SMTP – incluindo o Postfix – enviam EHLO somente quando a palavra "ESMTP" aparece no banner de saudação do servidor (por exemplo 220 foo.example.com ESMTP Sendmail
, ). Presume-se que os servidores que não suportam ESMTP também não suportam SASL.
Se a saudação do servidor estiver correta, certifique-se de não ter habilitado as opções
smtp_never_send_ehlo
ousmtp_pix_workarounds
por acidente.Se a saudação do servidor estiver errada, mas mesmo assim ele aceitar EHLO, você pode forçar o uso do EHLO habilitando-o
smtp_always_send_ehlo = yes
na configuração do Postfix.
Se você estiver gerenciando o servidor, tente corrigir sua saudação, pois isso provavelmente também afetará a entrega de mensagens recebidas de outros domínios – por exemplo, sem ESMTP também não há STARTTLS oportunistas.
Por exemplo, se o servidor também estiver rodando Postfix, ele deverá incluir "ESMTP" na smtpd_banner
opção:
smtpd_banner = $myhostname ESMTP $mail_name
(Também pode ser que a conexão passe por um gateway anti-spam que usa esse método na tentativa de proibir o uso do STARTTLS – em vez de simplesmente removê-lo da resposta EHLO, ele tenta proibir o próprio EHLO.)
Observe que normalmente a porta 25 serve apenas para recepção de mensagens (entrega de entrada de outros domínios) – 587 ou 465 são as portas destinadas ao "envio" de mensagens (saída de clientes).
Portanto, se o seu Postfix estiver agindo como um cliente local (porque possui um relayhost e deseja usar autenticação), ele realmente deveria estar se conectando ao relayhost na porta 587.
Observe que a conexão à porta 465 requer smtp_tls_wrappermode = yes
, pois ela usa TLS desde o início. (Na verdade, isso é uma vantagem, pois evita que os firewalls alterem o handshake.)
Ao usar a porta 587, o TLS é opcional (ativado apenas usando o comando 'STARTTLS'), mas você tambémrealmente deveriaimpor o uso de TLS se o servidor oferecer suporte. Para fazer isso, defina smtp_tls_security_level = verify
.