Ce que vérifie le serveur qui reçoit
Les exemples qui suivent utilisent
example.com, le serveur mail.example.com et l’adresse 203.0.113.42. Remplacez-les par les vôtres.
0. Avant tout : le port 25 sortant
Tout ce qui suit ne sert à rien si votre serveur ne peut pas joindre les autres. Beaucoup d’hébergeurs bloquent le port 25 en sortie par défaut. C’est le cas chez nous : les ports 25, 465 et 587 sortants sont fermés sur tout nouveau VPS, et s’ouvrent sur demande pour un usage raisonnable (serveur personnel, notifications applicatives), jamais pour de l’envoi en masse. Le détail est dans la documentation réseau. Testez depuis le VPS :1. Nom d’hôte, enregistrement A et reverse DNS
Trois valeurs doivent concorder : le nom que votre serveur annonce dans sonHELO, l’enregistrement A de ce nom, et le reverse DNS (PTR) de l’adresse IP.
A pour mail.example.com vers 203.0.113.42, et un MX du domaine vers mail.example.com. Le reverse DNS, lui, ne se pose pas dans votre zone : l’adresse IP appartient à votre hébergeur, c’est lui qui le fixe. Chez nous, il se règle depuis la console ; la procédure est dans la documentation Reverse DNS.
Vérifiez que l’aller et le retour concordent :
2. SPF : qui a le droit d’envoyer
Un seul enregistrementTXT à la racine du domaine. Pour un serveur qui est à la fois le site et la messagerie :
a autorise l’adresse du A de example.com, mx celles des serveurs MX, et -all déclare que rien d’autre n’envoie pour ce domaine. C’est l’enregistrement qu’écrit le profil messagerie de la console.
Si un autre service envoie aussi en votre nom (messagerie hébergée, outil de newsletter), ajoutez son mécanisme include: dans le même enregistrement, pas dans un second.
SPF vérifie l’adresse d’enveloppe (
MAIL FROM), pas l’en-tête From: que lit votre correspondant. C’est DMARC, section 4, qui relie les deux.3. DKIM : signer ce qui part
DKIM est le seul des quatre que la console ne peut pas écrire pour vous : la clé privée est générée sur votre serveur et ne doit jamais le quitter. Vous publiez uniquement la clé publique. Sur Debian ou Ubuntu avec Postfix, OpenDKIM fait le travail :s2026.private (la clé privée) et s2026.txt (l’enregistrement DNS à publier). Le sélecteur est un nom libre ; mettre l’année dedans simplifie la rotation plus tard.
Dans /etc/opendkim.conf, renseignez le domaine, le sélecteur et la clé, et remplacez la ligne Socket existante par un port local, que Postfix atteint même depuis son chroot :
s2026.txt en TXT sur s2026._domainkey.example.com :
TXT : le fichier la découpe en plusieurs chaînes entre guillemets. Elles forment un seul enregistrement, pas plusieurs. Une fois publié, vérifiez qu’il revient entier et qu’il correspond à la clé privée :
key not secure qui peut précéder signale seulement que la zone n’est pas signée DNSSEC. Elle n’empêche pas DKIM de fonctionner.
4. DMARC : relier le tout et dire quoi faire en cas d’échec
DMARC exige que le domaine de l’en-têteFrom: soit aligné sur celui qui a passé SPF ou DKIM, publie ce que le destinataire doit faire sinon, et où vous envoyer les rapports.
p=quarantine: un message non conforme va en indésirables.p=nonene demande rien ;p=rejectle fait refuser.rua=: l’adresse qui reçoit les rapports agrégés quotidiens (XML compressé) des grands fournisseurs. Cette boîte doit exister.
p=none, lisez les rapports une ou deux semaines, puis montez.
5. Vérifier de bout en bout
Les enregistrements peuvent être justes et le message échouer quand même. Envoyez un vrai message à une adresse Gmail, en passant par votre Postfix pour qu’il soit signé :PASS sur les trois lignes SPF, DKIM et DMARC. Le détail est dans l’en-tête Authentication-Results :
Pièges courants
Deux enregistrements SPF. Un domaine ne doit en porter qu’un. Avec deuxTXT commençant par v=spf1, le résultat est une erreur permanente, et SPF échoue pour tout le monde. Fusionnez-les.
Plus de dix recherches DNS. Chaque include, a, mx, ptr, exists et redirect coûte une requête, et les include imbriqués comptent aussi. Au-delà de dix, SPF renvoie une erreur permanente. Trois ou quatre services tiers suffisent à y arriver.
-all ou ~all. -all (échec) dit que rien d’autre n’envoie ; ~all (échec partiel) le dit sans l’imposer. Certains destinataires rejettent sur un échec SPF avant même d’évaluer DKIM, ce qui pénalise le courrier transféré. Si des messages de votre domaine sont souvent relayés, ~all avec DKIM et DMARC en place est un compromis courant.
DMARC en p=none pour toujours. p=none sert à observer. Il satisfait la lettre des exigences, mais ne protège pas votre domaine contre l’usurpation. Fixez-vous une date pour passer à quarantine.
Reverse DNS et HELO qui divergent. Un PTR générique de l’hébergeur, un PTR vers un nom sans A en retour, ou un myhostname resté à localhost ou au nom d’installation : chacun suffit à faire douter le destinataire.
IPv6 oublié. Si votre VPS a une adresse IPv6, Postfix l’utilise volontiers pour joindre Gmail, et cette adresse doit alors avoir son propre PTR et être couverte par SPF (le mécanisme a inclut les AAAA du domaine). Vérifiez avec dig -x sur l’adresse IPv6. À défaut, faites préférer IPv4 à Postfix :
mail sans SPF. Les destinataires peuvent aussi vérifier SPF sur le nom annoncé en HELO. Un TXT "v=spf1 a -all" sur mail.example.com règle le cas.
Pour aller plus loin
- Faire pointer un domaine vers un VPS : les enregistrements que la console écrit pour vous.
- Reverse DNS (PTR) : régler et vérifier le PTR de votre IP.
- Ports email : conditions d’ouverture du port 25.
- Sécurité renforcée sur un VPS Linux pour la couche du dessous.

