- Création site Internet
- > Articles Techniques
- > Ubuntu, Debian, Linux
- > Configuration Postfix, DNS IPv6 et serveur Debian/Linux VPS (...)
Configuration Postfix, DNS IPv6 et serveur Debian/Linux VPS Gandi
dimanche 15 mars 2015, par
Lors d’une migration sur un VPS Gandi sous Debian, l’envoi de mails avec Postfix ne fonctionnait plus vers l’extérieur. Cette page explique l’origine du problème (DNS et IPv6) et présente la configuration et la solution pour rétablir l’envoi des mails.
Installation de Postfix
Je ne l’installe pas tous les jours, alors pour ne pas oublier la bonne marche à suivre, voici la procédure d’installation de Postfix.
Tout d’abord, j’ai ajouté les paquets postfix et procmail. Pour vérifier si les paquets sont déjà installés :
dpkg -s procmail postfix 2>/dev/null | grep -i -E "status|package"S’ils n’apparaissent pas, ou pas tous, dans la liste, il faut les installer :
sudo apt-get install <nom du paquet>L’objectif est que les sites web installés sur la machine puissent envoyer des mails, j’ai donc répondu aux étapes d’installation de la manière suivante.
Le choix du type d’installation Site Internet correspond à un serveur qui envoie des mails sortants (notifications, formulaires, scripts), sans héberger de boîtes mail publiques. C’est le cas le plus courant pour un serveur web ou un VPS applicatif.

Il faut ensuite indiquer le nom de domaine utilisé par les mails provenant de la machine, donc émis par les comptes utilisateurs locaux. Probablement votre nom de domaine principal. Les emails apparaîtront comme provenant de <utilisateur>@<ce domaine>.

Les utilisateurs root et postmaster doivent transférer leur mail vers un autre compte. J’ai donc indiqué un compte utilisateur standard. Nous y reviendrons un peu plus tard, notamment pour une question de référencement.

Comme c’est un serveur, il ne sert pas uniquement à l’envoi, mais aussi à la réception. Il faut donc définir les noms de domaines pour lesquels la machine va recevoir des emails. Mais comme je ne souhaite qu’envoyer des mails, je n’indique que localhost. Ainsi, je ne recevrai que des mails locaux du type root@localhost, le reste sera transféré.

Mises à jour synchronisées. Je ne maîtrise pas bien ce paramètre, je me fie donc à l’indication fournie et je ne force pas la synchronisation.

Réseaux internes. J’ai laissé le paramètre par défaut qui renvoie sur la boucle locale : 127.0.0.0/8 [ ::ffff:127.0.0.0]/104 [ ::1]/128

Utilisation de procmail pour la distribution locale : j’ai choisi Oui.

Pour le quota des boîtes mail, à vous de voir. Comme l’installation n’est a priori pas prévue pour recevoir des messages, les comptes recevront néanmoins les mails de rapports d’erreur.

Caractère d’extension pour les adresses locales. Je n’ai pas bien compris cette fonctionnalité et, a priori, je n’en ai pas besoin, je ne l’active donc pas en laissant le champ vide.

Protocole Internet. Je choisis all, mais c’est peut-être ce choix qui me posera un problème plus tard.

Configuration de Postfix
Si Postfix est déjà installé, il est possible de modifier directement la configuration, soit en rejouant la procédure d’installation avec la commande :
sudo dpkg-reconfigure postfixSoit en modifiant directement le fichier de configuration, avec les droits administrateur :
sudo vi /etc/postfix/main.cfNB : petit rappel des commandes vi : x pour supprimer le caractère courant, i pour insérer du texte, Esc pour terminer l’édition, o pour ajouter une ligne et insérer, :w pour enregistrer, :q pour quitter, a pour insérer en fin de ligne.
Je présente ici uniquement les lignes que j’ai modifiées, les autres restent inchangées.
myhostname = orsal.net
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
mydestination = localhost
relayhost =
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter =
inet_interfaces = loopback-only
inet_protocols = all
myorigin = /etc/mailnameLimiter inet_interfaces à la boucle locale permet d’éviter que le serveur ne devienne un relais SMTP ouvert, ce qui serait un risque de sécurité majeur. En effet, je ne souhaite pas pouvoir envoyer des emails, via ce serveur, depuis un autre serveur sur Internet.
Le paramètre relayhost permet d’indiquer un serveur SMTP relais. Chez Gandi, je n’ai pas eu besoin d’en indiquer. En cas d’envoi de mail, Postfix trouve le serveur de destination par une requête DNS et le contacte directement pour lui remettre le mail.
Dans le cas d’un serveur hébergé à domicile, donc probablement situé dans une plage d’adresses IP ne devant a priori pas envoyer d’emails, vous risquez d’être bloqué à l’envoi. Le mail partira, mais le serveur destinataire pourra le rejeter car marqué comme spam, par exemple via Spamhaus.
Dans ce cas, il faudra passer par le serveur SMTP de votre hébergeur en configurant le paramètre relayhost :
relayhost = smtp.votrefournisseur.frLe nom de domaine utilisé comme expéditeur est configuré dans le fichier /etc/mailname, à modifier de la même manière que main.cf.
Enfin, la configuration des alias s’effectue dans le fichier /etc/aliases :
sudo vi /etc/aliasesIl faut configurer la redirection des comptes postmaster et root vers l’utilisateur standard si ce n’est pas déjà fait. Les lignes sont construites de la manière suivante :
alias: destinataire, destinataire, ...Il faut donc ajouter :
root: utilisateur
postmaster: utilisateurAprès toute modification, il faut redémarrer Postfix pour appliquer la configuration :
sudo service postfix restartTest d’envoi de mail
Pour vérifier que tout fonctionne, il suffit de s’envoyer un email :
echo "Mon message de `date +%T`" | mail -s "Test mail" <votre adresse email>Si vous recevez le message, c’est tout bon. Vous pouvez également tester depuis les sites web installés sur le serveur.
Identification du problème
Chez moi, les mails ne partaient pas. Un tour dans les logs permet d’en savoir plus :
sudo cat /var/log/mail.logErreur obtenue :
Feb 2 15:43:50 myservername postfix/smtp[5908]: 23FEC7801: to=<root@example.org>, relay=none, delay=57183, delays=57183/0.01/0/0, dsn=4.4.3, status=deferred (Host or domain name not found. Name service error for name=example.org type=MX: Host not found, try again)Un problème de résolution DNS semble donc en cause : Postfix n’arrive pas à résoudre le serveur MX du domaine destinataire.
Résolution du problème
Le problème venait du serveur DNS IPv6 qui ne répondait pas. Lors d’un envoi de mail, Postfix lançait une résolution du nom de domaine destinataire. N’obtenant pas de réponse, après plusieurs tentatives, le message tombait en erreur et était renvoyé à l’expéditeur.
Pour résoudre le problème, j’ai supprimé le serveur DNS IPv6 de la liste des serveurs DNS de la machine.
sudo vi /etc/resolv.confet supprimé la ligne :
nameserver 2001:4b98:dc0:49::225Un redémarrage du serveur est nécessaire pour que la modification soit prise en compte.
Attention Sur les systèmes Debian modernes, le fichier /etc/resolv.conf peut être régénéré automatiquement (DHCP, NetworkManager, systemd-resolved). Dans ce cas, cette modification peut être temporaire.
Par précaution, j’ai également configuré Postfix pour n’utiliser que IPv4 :
inet_protocols = ipv4Forcer inet_protocols = ipv4 permet à Postfix d’éviter toute tentative de résolution IPv6, tout en laissant le système utiliser IPv6 pour les autres services.
Référencement SEO et configuration mail
Google encourage les sites à respecter de bonnes pratiques de qualité et de fiabilité, notamment pour les services techniques comme l’envoi de mails.
Un nom de domaine doit posséder les deux adresses suivantes :
- abuse votrenomdedomaine.org
- postmaster votrenomdedomaine.org
Il n’est pas obligatoire qu’il s’agisse de comptes réels : une simple redirection suffit.
Cette problématique illustre bien qu’un dysfonctionnement DNS, en particulier lié à IPv6, peut avoir des effets indirects difficiles à diagnostiquer sur un serveur mail pourtant correctement configuré.