Postfix est un serveur mail (ou MTA) permettant de gérer presque tous les cas d’une utilisation professionnelle. Postfix supporte le protocole IPv6 depuis sa version 2.24.
Pré-requis :
- Un nom de domaine + enregistrements DNS accessibles.
Il est maintenant presque indispensable de configurer un DMARC, DKIM ou SPF pour que les e-mails ne finissent pas dans les spams ou ne soient pas systématiquement rejetés par certaines messageries. - Deux adresses mails de tests pour recevoir le courrier.
- Il est préférable de tester sur plusieurs boîtes mails l’envoi des messages, ici Protonmail et Gmail.
- Gmail est assez permissif pour recevoir du courrier non authentifié, si vos enregistrements DMARC, DKIM ou SPF ne sont pas encore configurés le courrier devrait cependant être délivré (dans les spams), cela permettra donc de tester simplement si Postfix envoie bien vers l’éxtérieur. Protonmail quand à la lui, les rejetant systématiquement permettra de vérifier si les messages envoyés sont correctement chiffrés et authentifiés.
- Un VHOST configuré (ici avec NGINX), correspondant au nom de domaine qui enverra les mails.
- HTTPS sur le Vhost (ici avec Let’s Encrypt)
NGINX
Le serveur name est monsite-linux.fr, les alias sont www, stmp et mail.
Le certificat ssl a été généré avec Let’s Encrypt et regroupe le domaine + les sous domaines.
server { |
Préparation du serveur
Fichier hosts
Préciser dans /etc/hosts
le nom de domaine et le serveur name (Disponible/modifiable dans /etc/hostname
).
127.0.0.1 localhost.localdomain localhost |
Le reverse DNS
Il est possible d’ajouter un reverse DNS sur votre serveur La plupart du temps cela se fait sur l’interface d’administration de votre prestataire.
Note : pour le reverse avec l’IPV6 il faut généralement utiliser la notation complète pour que l’ajout soit pris en compte.
Adresse IP | Reverse |
---|---|
42.42.13.37 | monsite-linux.fr. |
2001:1337:9:1337:: | monsite-linux.fr. |
Les fichiers aliases et mailname
@todo Intêret de ses fichiers ?
Fichier /etc/aliases ?
Fichier /etc/mailname ?
Postfix
Installation
Pour installer Postfix il suffit simplement d’utiliser les dépôts (Exim sera supprimé car il ne peut pas y avoir deux MTA). Si la question vous est posée mettez “Site Internet” et le nom de domaine voulu.
# apt install postfix |
Fichier de logs
Les logs relatif à Postfix et aux mails se trouvent dans :
/var/log/mail.log
/var/log/mail.err
/var/log/mail.info
/var/log/mail.warn
/var/log/message
/var/mail/root
Configuration
Il est possible d’utiliser l’outils postconf
qui permettra rapidement d’associer une variable à une valeur dans le fichier /etc/postfix/main.cf
, exemple :
# postconf -e "myorigin = MonDomaine.com" |
Il est également possible de directement modifier le fichier pour avoir une vue d’ensemble.
# ---------------------------------------------------------- |
Relancer ensuite le serveur.
# postfix reload |
Configuration avancée
Modifier l’adresse de l’éxpéditeur
Créer un fichier /etc/postfix/generic
et y ajouter des valeurs de type key: value
puis appliquer les modification avec postmap
et redémarrer Postfix.
# echo 'root [email protected]' >> /etc/postfix/generic |
Veillez à ce que le fichier /etc/postfix/main.cf
comporte bien la ligne :
smtp_generic_maps = hash:/etc/postfix/generic |
Plus d’infos : http://www.postfix.org/ADDRESS_REWRITING_README.html
Modifier le nom de l’éxpéditeur
Il suffit de créer un compte sur le serveur et de s’y connecter pour envoyer le mail.
Firewall
Il faut ouvrir le port 25 TCP :
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT |
Mailutils
Mailutils est un utilitaire de gestion du courrier électronique. Il permettra de lancer des commandes directement dans le terminal pour envoyer des mails.
Installation
Simplement via les dépôts.
# apt install mailutils |
Envoyer des mails
Dans un premier temps, envoyer un mail à root@monsite-linux.fr et regarder dans les logs pour voir si tout est ok.
# mail -s "Hello pot" "[email protected]" < message.txt |
Les logs dans /var/log/mail.log
devrait ressembler à ceci, indiquant que le mail à bien été envoyé et délivré (status=sent (delivered to mailbox)
) :
May 28 10:11:33 monsite-linux postfix/cleanup[18507]: 67BD5600BBF: message-id=<[email protected]> |
Si c’est ok vous pouvez tester sur une adresse Gmail. Comme les DNS ne sont pas encore “safe” le message sera un peu lent à être délivré car il sera pour l’instant considéré comme du spam potentiel et restera un moment dans la file d’attente queue active
et Connection timed out
:
May 28 10:13:49 monsite-linux postfix/pickup[17325]: 7C587600BBF: uid=0 from=<[email protected]> |
Mais parviendra au bout d’un certain temps à se frayer un chemin et vous pourrez aller le relever dans vos dossier spams de Gmail.
May 28 10:14:20 monsite-linux postfix/smtp[18661]: 7C587600BBF: to=<[email protected]>, relay=gmail-smtp-in.l.google.com[2a00:1450:400c:c04::1a]:25, delay=31, delays=0.09/0.01/30/0.3, dsn=2.0.0, status=sent (250 2.0.0 OK 1590660857 c63si5197730wmd.136 - gsmtp) |
Vider la liste d’attente
En cas de problème vous pouvez vider la liste d’attente (queue):
postsuper -d ALL |
Préparation des DNS
Pour réduire le risque que vos messages soient considérés comme des spams (et parfois même rejetés), il est nécessaire de configurer ces 3 méthodes d’authentification :
- Publier un enregistrement SPF (Sender Policy Framework) pour le domaine
SPF empêche les spammeurs d’envoyer des messages non autorisés semblant provenir de votre domaine. - Activez la signature DKIM (DomainKeys Identified Mail) pour vos messages
La signature DKIM permet aux serveurs de réception de vérifier que le propriétaire du domaine a bien envoyé le message. La plupart des serveurs de messagerie exigent une clé DKIM de 1024 bits ou plus.
- Publiez un enregistrement DMARC (Domain-based Message Authentication, Reporting, and Conformance) pour votre domaine
DMARC aide les expéditeurs à protéger leur domaine contre le spoofing.
Note : ce sont des DNS, essayons d’être patient si le résultat attendu ne semble pas être au rendez-vous.
Enregistrement SPF
Les enregistrements SPF dépendent du contenu du fichier /etc/hosts
et de l’enregistrement DNS.
Configuration
Fichier /etc/hosts
Préciser les adresses IPV6 et IPV4 publiques du serveur ainsi que le nom de domaine et le nom de l’hôte.
127.0.0.1 localhost.localdomain localhost |
Enregistrement DNS
Faire un enristrement SPF contenant la valeur suivante :
"v=spf1 a mx ptr ip4:42.42.13.37 ip6:2001:1337:9:1337:: ~all" |
Entêtes dans les mails
Lorsque le SPF est mal configuré les en-têtes indiquent un message d’erreur :
spf=softfail (google.com: domain of trainsitioning [email protected] does not designate 2001:1337:9:1337:: as permitted sender) [email protected] |
Lorsque le SPF est correctement configuré l’expéditeur est autorisé :
spf=pass (google.com: domain of [email protected] designates 2001:1337:9:1337:: as permitted sender) [email protected] |
Si vous modifiez via Postfix l’adresse de l’expéditeur, il est fort possible que vous obteniez un Neutral :
spf=neutral (google.com: 2001:1337:9:1337:: is neither permitted nor denied by best guess record for domain of [email protected]) [email protected] |
Signature DKIM
DKIM (DomainKeys Identified Mail) est un standard permettant d’associer de manière forte une entité ou une organisation avec un domaine au sein d’un email, il fonctionne par cryptographie asymétrique, le MTA (ici Postfix) se charge de signer numériquement tous les emails envoyés avec une clé privée contenue sur le serveur et le destinataire pourra alors vérifier l’intégrité du corps ainsi que les en-têtes du message grâce à la clé publique fournie par le domainkey : le champ TXT contenu dans un enregistrement DNS.
OpenDKIM
OpenDKIM est un logiciel libre pour vérifier et générer des signatures DKIM. Il implémente un service milter (Pour filtrer le spam et les virus) lui permettant notamment d’être utilisé avec Postfix.
Installation
Simplement via les dépôts :
# apt install opendkim opendkim-tools |
Configuration
Le fichier de configuration principal d’OpenDKIM se trouve dans /etc/opendkim.conf
. (Pensez à faire un backup avant de le modifier). Le manuel est accessible comme tel man opendkim.conf
et le fichier entièrement documenté est /usr/share/doc/opendkim/examples/opendkim.conf.sample.
:
La configuration de /etc/opendkim.conf
est la suivante :
AutoRestart Yes |
Génération des clefs publiques et privées
Dans un premier temps nous allons créer un répertoire du même nom que le nom de domaine.
# mkdir /etc/opendkim/keys/monsite-linux.fr |
Puis générer la clé privée et publique. Vous trouverez ensuite dans le répertoire /etc/opendkim/keys/monsite-linux.fr/
la clé publique dans mail.txt
et la clé privé dans mail.private
# opendkim-genkey -D /etc/opendkim/keys/monsite-linux.fr/ -d monsite-linux.fr -s mail |
Changement du propriétaire sur le répertoire.
# chown -R opendkim: /etc/opendkim/keys/monsite-linux.fr |
Il est possible de renommer le nom de la clé privée.
# mv /etc/opendkim/keys/monsite-linux.fr/mail.private /etc/opendkim/keys/monsite-linux.fr/mail |
Ajoutez ensuite dans le fichier de clés d’OpenDKIM /etc/opendkim/KeyTable
l’enregistrement de votre domaine :
mail._domainkey.monsite-linux.fr monsite-linux.fr:mail:/etc/opendkim/keys/monsite-linux.fr/mail |
Ensuite ajouter votre domaine dans les tables de signature d’OpenDKIM /etc/opendkimSigningTable
:
*@monsite-linux.fr mail._domainkey.monsite-linux.fr |
Pour terminer ajoutez le domaine et le nom d’hôte dans le fichier /etc/opendkim/TrustedHosts
:
127.0.0.1 |
Enregistrement DNS DKIM
Votre clé publique se trouve dans /etc/opendkim/keys/monsite-linux.fr/mail.txt
et votre enregistrement DNS doit ressembler à ceci :
Note : la clé semble être en 2 parties scindée par des quotes " "
.
mail._domainkey IN TXT ( "v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuhyvDyCorb7nvjOLeX1rcbtJtd+nneE/hZo2i4g58lGOWo0dG2DPN5ka58HAiN54hM3afJVVPhB/vEEbI8oE8NvO0y780Suk+T8TAdE18OR1u0BVMfJ47OUrLWNYWxhxkSqWoCxfWuIAi1D9xL4itSW7SQQOSwaG42Qbir6mE4cT03zXXwHcNQL5wVFX" "d+FtN5r1KeQj8fHuA0jNEc6sVnRhsgtEfKcevPhbpgk/H1ysgnS5qTT2aT9f6rfPo4ygxuVNotdFZL9geFdaoD/4x1RPy1g+bX2TQoYsx5Rwu+OTV5hDBLp7TXc0pCkNEY30kEK9ehDg+vQ6ngpof4C/UQIDAQAB" ) |
Pour vérifier si votre enregistrement DKIM a bien été pris en compte vous pouvez lancer la commande dig
:
# dig +short default._domainkey.monsite-linux.fr TXT |
Postfix
Ajouter dans le ficher de configuration /etc/postfix/main.cf
de Postfix.
smtpd_milters = inet:127.0.0.1:8891 |
Redémarrer ensuite OpenDKIM et Postfix.
Entêtes dans les mails
Lorsque le DKIM est mal configuré, les en-têtes indiquent un message d’erreur :
dkim=temperror (no key for signature) |
Lorsque le DKIM est correctement configuré :
dkim=pass [email protected] header.s=mail header.b=mDNZSZ72; |
Enregistrement DMARC
DMARC protège le domaine contre le spam en empêchant la falsification de l’adresse de l’expéditeur dans les messages frauduleux. Il ne sera pas possible (à ce jour) de faire croire qu’ils proviennent de votre domaine avec DMARC.
Enregistrement DNS DMARC
Votre enregistrement DNS doit ressembler à ceci :
_dmarc IN TXT "v=DMARC1; p=reject; rua=mailto:[email protected]; ruf=mailto:[email protected]; adkim=s; aspf=s; pct=100; rf=afrf; sp=reject" |
Entêtes dans les mails
Lorsque le DMARC est correctement configuré :
dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=monsite-linux.fr |
Erreurs rencontrées
Postfix
Port déjà occupé
Postfix ne se lançait pas car le port 25 était déjà occupé par un processus. Dans mon cas sendmail
n’avait pas libéré le port, il suffit simplement de tuer le processus avec un simple kill
(Pour afficher les ports utilisés Et les PID des processus : netstat -paunt
).
Mails acceptés chez Google mais pas chez Protonmail, Gmx, Yopmail, …
Les mails sont bien reçus chez GMail mais pas sur les autres messageries comme Protonmail, Gmx ou encore Yopmail. Le message d’erreur dans /var/log/mail.log
indique systématiquement un status=deferred
:
Jun 23 20:43:25 monsite-linux postfix/error[4409]: B76F8600C3B: to=<[email protected]>, relay=none, delay=0.15, delays=0.13/0/0/0.03, dsn=4.4.1, status=deferred (delivery temporarily suspended: connect to mailsec.protonmail.ch[185.70.40.102]:25: Connection timed out) |
Le problème venait d’une mauvaise configuration du firewall qui n’acceptait pas les connexions sur le port 25 en TCP OUTPUT.
iptables -t filter -A INPUT -p tcp --dport 25 -j ACCEPT |
Il est intéressant de constater que cette configuration n’avait pas d’incidence pour envoyer des mails sur GMail.
Installation supplémentaires
Installation pouvant parfois résoudre les problèmes d’authentification :
# apt install libsasl2-modules |
Outils
Visualise les enregistrements MX, DNS, liste noire et diagnostics SMTP : https://mxtoolbox.com/SuperTool.aspx
Testez l’indésirabilité (spam) de vos emails : https://www.mail-tester.com
Documentation
https://fr.wikipedia.org/wiki/Postfix
https://mailutils.org/
https://www.alsacreations.com/tuto/lire/614-Serveur-mail-Postfix.html (Configuration détaillée)
https://support.google.com/mail/answer/81126
https://www.dmarcanalyzer.com/spf/how-to-create-an-spf-txt-record/
https://wiki.evolix.org/HowtoOpenDKIM
http://fr.wikipedia.org/wiki/DomainKeys_Identified_Mail
http://www.opendkim.org/docs.html
https://www.malekal.com/postfix-spf-dkim/
http://www.postfix.org/ADDRESS_REWRITING_README.html
http://www.postfix.org/postconf.5.html#canonical_maps
https://www.rosehosting.com/blog/how-to-install-and-integrate-opendkim-with-postfix-on-a-centos-6-vps/
https://cipherlist.eu/