dimanche 15 mars 2015, par
A l’occasion d’une migration de serveur sur un VPS Gandi sous Linux/Debian, à la réinstallation du serveur de mail Postfix, l’envoi de mail ne fonctionnait plus vers l’extérieur, uniquement en local.
J’ai mis du temps à trouver l’origine du problème, et pas mal de recherches et de tests plus tard, voici une synthèse de la configuration de Postfix, du problème d’envoi de mail rencontré et de sa solution.
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 packages 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’il 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, alors j’ai répondu aux étapes d’installation de la manière suivante. Le choix d’un installation type Site Internet, va orienter les paramètres à configurer par la suite.
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 provenant de
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 aussi pour une question de référencement.
Comme c’est un serveur, il ne sert par uniquement à l’envoi, mais aussi à la réception. Il va falloir définir les noms de domaines pour lesquels la machine va recevoir des emails. Mais, comme je ne veux que 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, alors je me fie à 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 boites mail, à vous de voir, mais comme a priori l’installation n’est pas prévue pour recevoir des messages. Les comptes recevront tout de même les mails rapports d’erreur.
Caractère d’extension pour les adresses locales. Bon, je n’ai pas bien compris la fonctionnalité, et a priori je n’en ai pas besoin, donc je ne l’active pas en laissant le champ vide.
Protocole Internet. Je choisis all, mais c’est peut-être ça qui me posera un problème plus tard.
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 postfix
Soit en modifiant directement le fichier de configuration, avec les droits administrateurs :
sudo vi /etc/postfix/main.cf
NB : petit rappel des commandes vi, x pour supprimer le caractère courant, i pour insérer du texte, Esc en fin d’é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 restes 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/mailname
A noter le paramètre inet_interfaces que j’ai limité à la boucle local. 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 relai. Chez Gandi, je n’ai pas eu besoin d’en indiquer. En cas d’envoi de mail, Postfix trouve le serveur destination par une requête DNS et le contacte directement pour lui remettre le mail. Mais dans le cas où vous auriez un serveur à domicile, donc probablement marqué comme appartenant à une rangée d’adresse IP ne devant a priori pas envoyer d’email, vous risquez d’être bloqué en envoi. Le mail partira, mais le serveur destination le rejettera car étant marqué pas Spamhaus.
Pour envoyer des mails depuis un serveur hébergé à domicile, il faudra probablement passer par le serveur smtp de votre hébergeur, en configurant le paramètre relayhost :
relayhost = smtp.votrefournisseur.fr
Le nom de domaine qui sera utilisé comme expéditeur est configuré dans le fichier /etc/mailname
à modifier de la même manière que le main.cf
.
Enfin, la configuration des alias s’effectue dans le fichier /etc/aliases
qu’il va falloir modifier :
sudo vi /etc/aliases
Il faut configurer la redirection des comptes postmaster et root vers l’utilisateur standard si ce n’est pas déjà en place. Les lignes sont construites de la manière suivante :
alias: destinataire, destinataire, ...
Il faut donc ajouter les lignes suivantes :
root: utilisateur
postmaster: utilisateur
En cas de modification des fichiers de configuration, pour qu’elles soient prises en compte, il faut relancer le serveur postfix avec la commande :
sudo service postfix restart
Pour vérifier que tout ça 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 quand même continuer les tests, par exemple, depuis les sites Web installés sur le serveur.
Mais voilà, chez moi, les mails ne partaient pas. Donc un petit tour dans les logs :
sudo cat /var/log/mail.log
Et voici l’erreur 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 DNS semble-t-il. Postfix indique qu’il ne trouve pas le domaine, ou pas de serveur MX (serveur de mail, Mail eXchange).
J’ai pas mal cherché sur Internet sans trouver de solution. Mais voici ce que j’ai fini par comprendre.
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 pour savoir à quelle machine l’envoyer. N’obtenant pas de réponse, après plusieurs tentatives, le message tombait en erreur et était renvoyé à l’expéditeur. En effet, je constatais régulièrement l’arrivée de rapports d’erreur dans la boîte mail locale du compte root.
Pour résoudre le problème, j’ai supprimé le serveur DNS IPv6 de la liste des serveurs DNS de la machine. Cela a fonctionné pour moi, mais je ne mesure pas l’ensemble des conséquences. Pour cela, il faut modifier le fichier resolv.conf :
sudo vi /etc/resolv.conf
et supprimer la ligne du serveur DNS IPv6 de GANDI :
nameserver 2001:4b98:dc0:49::225
Un redémarrage du serveur est nécessaire pour que la modification soit prise en compte.
Cette modification est suffisante, cependant, à tout hasard, j’ai aussi modifié le fichier de configuration de Postfix /etc/postfix/main.cf
pour n’utiliser que le protocole IPv4.
inet_protocols = ipv4
Ne pas oublier de redémarrer le service.
Si vous vous intéressez aux techniques de référencement, ou SEO (Search Engine Optimization), vous aurez noté que Google nous incite à avoir un site qui respecte les standards, par exemple, en ayant un code html valide. Et parmi tous ces petits réglages, il y en a un qui concerne les emails.
Ce n’est pas réellement une configuration Postfix, mais puisque nous abordons ici la question des mails, j’ai pensé que c’était l’occasion.
Un nom de domaine doit posséder les deux adresses emails suivantes :
Pas d’obligation que ce soit de vrais comptes, une simple redirection suffit. Le paramétrage se fera probablement au niveau de votre registrar, mais si l’envie vous venait de configurer totalement Postfix pour un fonctionnement complet en tant que serveur de mail...
Un peu de lecture complémentaire sur Internet vous permettra de mieux comprendre le fonctionnement de l’outil Postfix, particulièrement complet, mais du coup compliqué à paramétrer entièrement.