1 votes

Postfix dans un conteneur Docker ne transmet pas les alias virtuels

J'essaie de configurer Postfix pour la première fois. Je n'ai pas besoin de boîtes aux lettres, je veux seulement des alias virtuels, des redirections info@example.com --> myname@gmail.com

Mon Postfix fonctionne dans un conteneur Docker sur un droplet Digital Ocean.

Je suis allé jusqu'à.. :

$ postalias -q info@example.com
myname@gmail.com

...depuis l'intérieur du conteneur, c'est-à-dire mon /etc/postfix/virtual fonctionne.

De même, de l'extérieur du récipient, sur la gouttelette :

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

Mais à partir de mon propre ordinateur :

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

Je pense que c'est attendu et correct en raison de l'existence de la mynetworks (voir ci-dessous) qui est comme le recommande Digital Ocean - Je ne veux pas héberger un relais SMTP "ouvert".

J'ai un enregistrement MX pour example.com. et je peux ping example.com et d'accéder à des sites web. Également (depuis mon ordinateur) :

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

Cela semble donc correct.

Mais si j'envoie un message test à info@example.com rien ne passe et je ne vois rien non plus dans les logs de Postfix... Je ne peux pas dire à quel moment il a échoué.

Je ne sais pas si le problème vient de ma configuration Postfix ou du routage dans le conteneur.

Le conteneur expose le port 25 (uniquement) et est exécuté via Fig avec

ports:
  - "25:25"

Depuis Shell dans le droplet :

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

Mon /etc/postfix/main.cf contient ceci :

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

Je ne comprends pas très bien la distinction entre myhostname (qui était à l'origine fixé à <container id> ) mydestination y virtual_alias_domains

Mise à jour

avec la sortie de http://mxtoolbox.com/SuperTool.aspx

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: <supertool@mxtoolbox.com>
250 2.1.0 Ok [722 ms]
RCPT TO: <test@example.org>
454 4.7.1 <test@example.org>: Relay access denied [715 ms]

MXTB-PWS3v2 4006ms

Mise à jour
Comme @masegaloeh m'a aidé à le découvrir, mon serveur postfix fonctionnait normalement. J'ai eu deux problèmes qui ont embrouillé les choses :

  1. A cause d'une erreur dans mon fichier Docker, j'avais /var/log/mail.log appartenant à l'utilisateur root... c'est pourquoi il est resté vide. Je n'ai pas vu d'erreurs à ce sujet, mais rsyslog n'a pas pu écrire dessus. A chown syslog:adm /var/log/mail.log Le pas a corrigé cela, et j'ai pu voir que postfix traitait et transférait effectivement le courrier vers l'alias.

  2. J'ai cru à tort que je pouvais me connecter à d'autres serveurs sur le port 25 à partir de mon ordinateur portable, simplement parce que je pensais avoir fait des choses dans le passé qui nécessitaient cela pour fonctionner. Mais en fait, je ne peux pas. Cependant, j'ai pu telnet example.com 25 à partir d'un autre serveur, de sorte que, là encore, les choses fonctionnaient réellement.

  3. L'envoi de courrier à l'alias à partir d'un autre serveur fonctionne et aboutit à mon adresse de destination Gmail.

  4. Il semble que mon problème soit en fait lié à Gmail... lorsque j'envoie le message à info@example.com à partir de mon compte Gmail, il n'apparaît pas. J'ai depuis essayé avec des alias que j'avais mis en place sur un autre hébergement... certains fonctionnent et d'autres non... ce qui conduit à :

Conclusion :
il semble que Gmail n'accepte que le courrier pour les alias qui sont configurés sous Settings > Accounts and Import > Send mail as ...malheureusement Gmail exige maintenant que l'on spécifie un serveur SMTP tiers lors de la configuration d'un nouveau serveur, il semble donc que je doive me débrouiller avec TLS, etc. dans mon installation de postfix.

3voto

masegaloeh Points 17760

Ce message du journal Telnet

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

n'est pas causée par mynetworks dans postfix ! L'erreur indique que soit votre paquet telnet n'atteint pas l'adresse IP de docker o postfix dans docker ne répond pas à votre telnet .

Comme vous mentionnez que vous faites du telnet depuis votre propre ordinateur, alors peut-être que votre FAI bloque le port 25 . Cependant, comme vous mentionnez que l'email provenant de l'extérieur ne peut pas passer et que même le journal postfix était vide, il se peut que le conteneur postfix ne réponde pas du tout. Peut-être que vous n'avez pas réussi à lier le port DO droplet au port docker postfix. Essayez de lancer netstat -tulpn | grep 25 de gouttelettes DO pour confirmer que postfix est accessible depuis l'extérieur.

Comme je n'étais pas familier avec docker, je ne peux pas offrir une solution exacte ici. Cependant, quelques résultats de recherche sur Google indiquent que vous avez configuré les tables IP pour faire du masquerading comme dans la documentation officielle : Lier les ports du conteneur à l'hôte

Éditer
Quoi qu'il en soit, votre sortie netstat semble correcte. Il est indiqué qu'il n'écoute que l'IPv6. Mais ce poste y ce poste a indiqué qu'Ubuntu/Debian utilise la méthode des adresses IPv6 mappées en IPv4 pour fournir la connexion, de sorte que peut-être qu'il est accessible depuis l'extérieur IPv4 aussi .

Pour un dépannage plus approfondi, j'ai donné ici les conditions minimales requises pour envoyer un courrier électronique

  • Certains MTA (postfix, exim, IIS) écoutent sur le port 25. Vous pouvez le confirmer en lançant netstat et se connecter à l'hôte local
  • Enregistrement MX/L'enregistrement doit être correctement configuré.
  • L'hôte Internet peut accéder au port 25 de votre serveur. Cela signifie qu'il n'y a pas de problème de pare-feu qui a bloqué les paquets SMTP.

Parce que vous avez introduit le proxy docker dans votre pile, vous devez confirmer

  1. Paquet reçu en DO droplet port 25 . Essayez d'exécuter tcpdump port 25 lorsque vous envoyez un courrier électronique pour confirmer que votre hôte a reçu le paquet.
  2. Le proxy Docker transmet les paquets à Postfix. Postfix enregistre toujours connexion SMTP entrante.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X