Postfix no contêiner do Docker não encaminhando aliases virtuais

1

Estou tentando configurar o Postfix pela primeira vez. Eu não preciso de caixas de correio, quero apenas aliases virtuais, encaminhando [email protected] --> [email protected]

Meu Postfix está sendo executado em um contêiner Docker em um droplet Digital Ocean.

Eu tenho chegado até:

$ postalias -q [email protected]
[email protected]

... de dentro do contêiner, ou seja, meu arquivo /etc/postfix/virtual está funcionando.

Além disso, de fora do contêiner na gota:

telnet example.com 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 example.com ESMTP Postfix (Ubuntu)

Mas do meu próprio computador:

$ telnet example.com 25
Trying <droplet IP>...
telnet: connect to address <droplet IP>: Operation timed out
telnet: Unable to connect to remote host

Acho que isso é esperado e correto como resultado da configuração mynetworks config (veja abaixo) que é como recomendado pela Digital Ocean - Eu não quero hospedar um relé SMTP 'aberto'.

Eu tenho um registro MX para example.com. configurado e posso ping example.com bem e acessar sites nele. Também (do meu computador):

$ host -t mx example.com
example.com mail is handled by 1 example.com.

Então parece certo.

Mas se eu enviar uma mensagem de teste para [email protected] , nada aparece e não vejo nada nos logs do Postfix ... Eu não sei dizer em que ponto ela falhou.

Não tenho certeza se o problema está na configuração do Postfix ou no roteamento para o container.

O container expõe a porta 25 (somente) e é executado via Fig com

ports:
  - "25:25"

Do shell no droplet:

$ netstat -tulpn | grep 25
tcp6       0      0 :::25                   :::*                    LISTEN      10680/docker-proxy

Meu /etc/postfix/main.cf tem isso:

smtpd_banner = $myhostname ESMTP $mail_name (Ubuntu)
biff = no

# appending .domain is the MUA's job.
append_dot_mydomain = no

# Uncomment the next line to generate "delayed mail" warnings
#delay_warning_time = 4h

readme_directory = no

# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination
myhostname = example.com
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = /etc/mailname, <container id>, localhost.localdomain, localhost, example.com
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_size_limit = 0
recipient_delimiter = +
inet_interfaces = all
virtual_alias_domains = example.com
virtual_alias_maps = hash:/etc/postfix/virtual
inet_protocols = ipv4

Não estou muito claro sobre a distinção entre myhostname (que foi originalmente definido como <container id> ) mydestination e virtual_alias_domains

Atualizado

com saída do link

Connecting to <server IP>

220 example.com ESMTP Postfix (Ubuntu) [733 ms]
EHLO MXTB-PWS3.mxtoolbox.com
250-example.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN [714 ms]
MAIL FROM: <[email protected]>
250 2.1.0 Ok [722 ms]
RCPT TO: <[email protected]>
454 4.7.1 <[email protected]>: Relay access denied [715 ms]

MXTB-PWS3v2 4006ms

Atualizar
Como @masegaloeh me ajudou a descobrir, meu servidor postfix estava basicamente funcionando. Eu tinha dois problemas que confundiam as coisas:

  1. Devido a um erro no meu Dockerfile, eu tinha /var/log/mail.log de propriedade do usuário root ... e é por isso que ele ficou vazio. Eu não vi nenhum erro sobre isso, mas basicamente o rsyslog não pôde escrever nele. Uma etapa chown syslog:adm /var/log/mail.log corrigiu isso e pude ver que, de fato, o postfix estava manipulando e encaminhando mensagens para o alias.

  2. Eu acreditei erroneamente que era possível fazer telnet para outros servidores na porta 25 do meu laptop, só porque achei que tinha feito coisas no passado que precisariam disso para funcionar. Mas na verdade não posso. No entanto, fui capaz de telnet example.com 25 de outro servidor, então, novamente, as coisas estavam realmente funcionando.

  3. O envio de e-mails para o alias de outro servidor funciona e chega ao meu endereço de destino do Gmail.

  4. Parece que o meu problema é, na verdade, com o Gmail ... quando eu envio a mensagem para [email protected] da minha conta do Gmail, ela não aparece. Eu já tentei com aliases que eu tinha configurado em outra hospedagem ... algum trabalho e outros não ... levando a:

Conclusão:
parece que o Gmail só aceitará e-mails para aliases configurados em Settings > Accounts and Import > Send mail as ... infelizmente o Gmail agora exige que você especifique um servidor SMTP de terceiros para ele ao configurar um novo, então parece que terei que ir apertos com TLS etc na minha instalação de postfix.

    
por Anentropic 21.01.2015 / 18:38

1 resposta

3

Esta mensagem de log do Telnet

telnet: connect to address <droplet IP>: Operation timed out

não é causado pela configuração mynetworks no postfix! O erro indicou que seu pacote telnet não atinge o endereço IP do docker ou postfix no docker não responde ao seu telnet .

Como você mencionou que fez telnet do seu próprio computador, talvez o seu ISP esteja bloqueando a porta 25 . No entanto, como você mencionou que o e-mail de fora não pode passar e até mesmo o log de postfix estava vazio, talvez o contêiner de postfix não responda a todos. Talvez você não consiga vincular a porta droplet DO à porta docker postfix. Tente executar netstat -tulpn | grep 25 das gotículas do DO para confirmar que o postfix pode ser acessado de fora.

Como eu não estava familiarizado com o docker, não posso oferecer a solução exata aqui. No entanto, alguns resultados do googling indicaram que você definiu o IPtables para fazer o mascaramento, como a documentação oficial: Vinculando portas de contêiner ao host

Editar
De qualquer forma a sua saída netstat parece bem. É indicado que ele ouça apenas no IPv6. Mas este post e este post indicou que o Ubuntu / Debian usa o método de endereços IPv6 mapeados para IPv4 para fornecer a conexão de forma que talvez seja acessível a partir do IPv4 externo .

Para uma resolução de problemas adicional, aqui eu dei o menor requisito para enviar e-mail

  • Alguns MTA (postfix, exim, IIS) ouvem na porta 25. Você pode confirmar isso executando netstat e telnet para localhost
  • Registro MX / Um registro deve estar configurado corretamente.
  • O host da Internet pode alcançar a porta 25 em seu servidor. Isso significa que não há nenhum problema de firewall que tenha descartado o pacote SMTP.

Como você introduziu o docker proxy em sua pilha, é necessário confirmar

  1. Pacote recebido na porta do droplet 25 . Tente executar tcpdump port 25 ao enviar um email para confirmar que seu host recebeu o pacote.
  2. O
  3. proxy do Docker realmente encaminha o pacote para o postfix. O postfix sempre registra a conexão SMTP de entrada.
por 21.01.2015 / 22:25