Credit : Logo officiel
Configurer SPF DKIM et DMARC pour ses emails
Configurer SPF, DKIM et DMARC pour ses emails
Lundi matin, message d'un client : "Mes mails partent tous en spam chez Gmail depuis hier." Diagnostic : son hébergeur a changé l'IP de sortie SMTP, son SPF n'a pas été mis à jour, et Gmail a flaggé tous ses envois comme suspects. En 25 minutes, j'ai corrigé l'enregistrement TXT, ajouté DKIM via OpenDKIM et publié un DMARC en mode p=quarantine. Le lendemain, ses mails arrivaient à nouveau en boîte de réception.
Depuis février 2024, Gmail et Yahoo exigent SPF + DKIM + DMARC pour tout expéditeur dépassant 5000 mails/jour. En 2026, c'est devenu la norme même pour les petits volumes. Voici comment configurer les trois protocoles correctement, depuis un VPS IONOS sous Debian 12 avec Postfix.
Les trois protocoles en deux minutes
- SPF (Sender Policy Framework) : un enregistrement DNS TXT qui liste les serveurs autorisés à envoyer des mails pour votre domaine. Si l'IP de l'expéditeur n'y figure pas, le destinataire peut rejeter le mail.
- DKIM (DomainKeys Identified Mail) : une signature cryptographique ajoutée à chaque mail. Le destinataire vérifie la signature avec la clé publique publiée dans votre DNS. Garantit que le message n'a pas été modifié en transit.
- DMARC (Domain-based Message Authentication, Reporting and Conformance) : la politique qui dit aux serveurs récepteurs quoi faire si SPF ou DKIM échouent (laisser passer, mettre en spam, rejeter). Et qui demande des rapports.
Sans ces trois éléments, vos mails sont au mieux dégradés en spam, au pire purement rejetés. C'est aussi un pré-requis pour utiliser BIMI (logo dans Gmail).
1. Configurer SPF
Identifier les serveurs émetteurs
Faites la liste de tout ce qui envoie des mails au nom de votre domaine :
- L'IP de votre VPS IONOS (Postfix)
- Google Workspace si vous y êtes
- Sendgrid, Mailgun, Brevo si vous utilisez un transactionnel
- Mailchimp, Sarbacane si vous faites du marketing
Oublier un seul service = ses mails partent en spam.
Publier l'enregistrement TXT
Dans votre interface DNS IONOS (ou Cloudflare, Route53...), ajoutez :
Type : TXT
Nom : @
TTL : 3600
Valeur : v=spf1 ip4:203.0.113.50 include:_spf.google.com include:sendgrid.net ~all
Décryptage :
v=spf1: version du protocoleip4:203.0.113.50: votre VPSinclude:_spf.google.com: Google Workspaceinclude:sendgrid.net: Sendgrid~all: softfail (recommandé en démarrage). À durcir en-all(hardfail) une fois validé.
Vérifier la propagation
dig TXT mondomaine.fr +short
Sortie attendue :
"v=spf1 ip4:203.0.113.50 include:_spf.google.com include:sendgrid.net ~all"
Attention à la limite des 10 lookups DNS. Chaque include compte. Si vous accumulez include:google.com, include:sendgrid.net, include:mailgun.org, etc., vous risquez le permerror. Outils utiles : mxtoolbox.com/spf.aspx pour compter.
2. Configurer DKIM avec OpenDKIM
Installer OpenDKIM
apt install opendkim opendkim-tools -y
Générer la paire de clés
Un sélecteur identifie chaque clé. J'utilise mail2026 (rotation annuelle recommandée).
mkdir -p /etc/opendkim/keys/mondomaine.fr
opendkim-genkey -b 2048 -d mondomaine.fr \
-D /etc/opendkim/keys/mondomaine.fr -s mail2026 -v
chown -R opendkim:opendkim /etc/opendkim
chmod 600 /etc/opendkim/keys/mondomaine.fr/mail2026.private
Deux fichiers sont créés :
mail2026.private # Clé privée, à garder sur le serveur
mail2026.txt # Enregistrement DNS à publier
Configurer OpenDKIM
Éditez /etc/opendkim.conf :
Syslog yes
UMask 007
Domain mondomaine.fr
KeyFile /etc/opendkim/keys/mondomaine.fr/mail2026.private
Selector mail2026
Socket inet:8891@localhost
Canonicalization relaxed/simple
Mode sv
SubDomains no
AutoRestart yes
AutoRestartRate 10/1M
Background yes
DNSTimeout 5
SignatureAlgorithm rsa-sha256
KeyTable /etc/opendkim/key.table
SigningTable refile:/etc/opendkim/signing.table
ExternalIgnoreList refile:/etc/opendkim/trusted.hosts
InternalHosts refile:/etc/opendkim/trusted.hosts
/etc/opendkim/key.table :
mail2026._domainkey.mondomaine.fr mondomaine.fr:mail2026:/etc/opendkim/keys/mondomaine.fr/mail2026.private
/etc/opendkim/signing.table :
*@mondomaine.fr mail2026._domainkey.mondomaine.fr
/etc/opendkim/trusted.hosts :
127.0.0.1
localhost
mondomaine.fr
*.mondomaine.fr
Connecter Postfix à OpenDKIM
Dans /etc/postfix/main.cf :
milter_default_action = accept
milter_protocol = 6
smtpd_milters = inet:localhost:8891
non_smtpd_milters = inet:localhost:8891
Redémarrez :
systemctl restart opendkim
systemctl restart postfix
systemctl status opendkim
Publier la clé publique DKIM
Récupérez le contenu du fichier généré :
cat /etc/opendkim/keys/mondomaine.fr/mail2026.txt
Sortie typique :
mail2026._domainkey IN TXT ( "v=DKIM1; h=sha256; k=rsa; "
"p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2NlMK..." )
Ajoutez l'enregistrement TXT chez IONOS :
Type : TXT
Nom : mail2026._domainkey
TTL : 3600
Valeur : v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2NlMK...
IMPORTANT : retirez les guillemets et sauts de ligne. La valeur doit être une seule longue chaîne.
Vérifiez :
dig TXT mail2026._domainkey.mondomaine.fr +short
3. Configurer DMARC
Une fois SPF et DKIM opérationnels, ajoutez DMARC.
Démarrer en mode observation
Type : TXT
Nom : _dmarc
TTL : 3600
Valeur : v=DMARC1; p=none; rua=mailto:dmarc@mondomaine.fr; ruf=mailto:dmarc@mondomaine.fr; fo=1; adkim=r; aspf=r; pct=100
Décryptage :
p=none: politique observation (rien n'est rejeté, mais des rapports sont envoyés)rua: adresse pour les rapports agrégés (quotidiens)ruf: adresse pour les rapports forensiques (par mail individuel échoué)fo=1: générer un rapport forensic dès qu'un check échoueadkim=r aspf=r: alignement relaxed (sous-domaines acceptés)pct=100: appliquer la politique à 100% des mails
Lire les rapports
Les rapports DMARC arrivent en XML compressé. Outils gratuits pour les analyser : Postmaster Tools de Google, dmarcian, ou la console gratuite Valimail Monitor.
Un rapport agrégé typique :
<record>
<row>
<source_ip>203.0.113.50</source_ip>
<count>147</count>
<policy_evaluated>
<disposition>none</disposition>
<dkim>pass</dkim>
<spf>pass</spf>
</policy_evaluated>
</row>
</record>
147 mails de votre IP, tous passent SPF et DKIM. Bingo.
Durcir progressivement
Après 2-3 semaines en p=none sans anomalie :
v=DMARC1; p=quarantine; pct=25; rua=mailto:dmarc@mondomaine.fr; adkim=r; aspf=r
pct=25 : 25% des mails non conformes vont en spam, 75% passent. Permet de mesurer l'impact.
Puis montez à pct=100, puis p=reject. Une fois p=reject actif, tout mail qui ne passe pas SPF + DKIM aligné est rejeté brutalement.
4. Tester la configuration
Test rapide via mail-tester
Envoyez un mail à l'adresse fournie sur mail-tester.com. Score sur 10. Au-dessus de 9/10 c'est bon. Détails sur SPF, DKIM, DMARC, contenu, blacklists.
Test via les en-têtes Gmail
Envoyez un mail à un compte Gmail, ouvrez le mail, cliquez sur "Afficher l'original". Cherchez :
Authentication-Results: mx.google.com;
spf=pass smtp.mailfrom=mondomaine.fr;
dkim=pass header.i=@mondomaine.fr header.s=mail2026;
dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=mondomaine.fr
pass partout = configuration parfaite.
Tests CLI depuis le serveur
# Verifier SPF
dig TXT mondomaine.fr +short
# Verifier DKIM
dig TXT mail2026._domainkey.mondomaine.fr +short
# Verifier DMARC
dig TXT _dmarc.mondomaine.fr +short
# Test d'envoi
swaks --to test@gmail.com --from contact@mondomaine.fr \
--server localhost --header "Subject: Test SPF DKIM DMARC"
# Tester depuis Postfix
opendkim-testkey -d mondomaine.fr -s mail2026 -vvv
La sortie de opendkim-testkey doit afficher :
opendkim-testkey: key OK
Test automatique par mail
Envoyez un mail à check-auth@verifier.port25.com. Dans les 30 secondes, ils renvoient un rapport complet :
Summary of Results
==================
SPF check: pass
DomainKeys check: neutral
DKIM check: pass
Sender-ID check: pass
SpamAssassin check: ham
DMARC check: pass
Erreurs courantes et leur fix
dkim=neutral (no signature)
Cause : Postfix n'envoie pas le mail à OpenDKIM, ou OpenDKIM ne signe pas.
Solution : vérifiez smtpd_milters dans main.cf, vérifiez que OpenDKIM tourne (systemctl status opendkim), vérifiez que l'expéditeur est dans signing.table.
spf=softfail
Cause : l'IP émettrice n'est pas dans votre SPF, mais vous êtes en ~all (soft).
Solution : ajoutez l'IP à votre enregistrement SPF. Si vous ne savez pas d'où viennent les mails, regardez les en-têtes Received:.
SPF PermError: too many DNS lookups
Cause : votre SPF dépasse 10 lookups (chaque include compte récursivement).
Solution : aplatissez avec un service comme redmine.spf-record.com ou supprimez les include superflus. Préférez ip4: quand vous connaissez les IP.
dmarc=fail (alignment)
Cause : From: du mail ≠ domaine signé par DKIM ou validé par SPF. Typique quand on envoie depuis Sendgrid avec From: contact@mondomaine.fr mais que Sendgrid ne signe pas en votre nom.
Solution : configurez le domaine d'authentification dans votre service tiers (Sendgrid → Sender Authentication → Domain Authentication). Cela ajoute un CNAME qui permet l'alignement.
Rapports DMARC qui n'arrivent pas
Cause : l'adresse rua= reçoit des centaines de XML compressés et est mal configurée.
Solution : créez un alias dédié dmarc@mondomaine.fr qui forwarde vers un service de parsing. Ou utilisez directement rua=mailto:abc@dmarcian.com (compte gratuit dmarcian).
5. Cas avancés
Sous-domaines
Pour signer aussi news.mondomaine.fr ou support.mondomaine.fr, ajoutez-les à OpenDKIM (signing.table) et publiez les mêmes enregistrements DKIM sur les sous-domaines.
DMARC peut être hérité par sous-domaines via sp= :
v=DMARC1; p=reject; sp=reject; rua=mailto:dmarc@mondomaine.fr
MTA-STS et TLS-RPT : la couche complémentaire
Depuis 2025, les gros opérateurs (Gmail, Outlook) regardent aussi MTA-STS (force TLS pour la réception) et TLS-RPT (rapports d'échec TLS). Pour MTA-STS, créez un sous-domaine mta-sts.mondomaine.fr qui sert un fichier policy.txt :
version: STSv1
mode: enforce
mx: mail.mondomaine.fr
max_age: 604800
Et deux enregistrements TXT :
Nom : _mta-sts
Valeur : v=STSv1; id=20260507
Nom : _smtp._tls
Valeur : v=TLSRPTv1; rua=mailto:tls-reports@mondomaine.fr
C'est optionnel mais améliore la confiance des destinataires majeurs.
BIMI : afficher votre logo dans Gmail
Une fois p=quarantine ou p=reject actif, vous pouvez publier un enregistrement BIMI pour afficher votre logo de marque dans la boîte de réception Gmail :
Nom : default._bimi
Valeur : v=BIMI1; l=https://mondomaine.fr/logo.svg; a=https://mondomaine.fr/vmc.pem
Le logo doit être un SVG conforme SVG Tiny PS et idéalement signé par un VMC (Verified Mark Certificate). Réservé aux marques avec marque déposée.
Rotation des clés DKIM
Les clés DKIM doivent tourner annuellement. La procédure :
opendkim-genkey -b 2048 -d mondomaine.fr -D /etc/opendkim/keys/mondomaine.fr -s mail2027 -v
# Ajouter le nouvel enregistrement DNS pour mail2027
# Modifier signing.table pour pointer sur mail2027
systemctl restart opendkim
# Apres 1 mois, supprimer mail2026 du DNS
Pour la délivrabilité avancée (warmup IP, listes de suppression, BIMI), voir Configurer SPF DKIM pour la délivrabilité email.
Pour aller plus loin
- Configurer un serveur mail Postfix + Dovecot — la stack mail complète sur laquelle s'appuient SPF/DKIM/DMARC.
- Configurer SPF DKIM pour la délivrabilité email — pour creuser les nuances avancées.
- Hardening Linux : sécuriser son serveur — un serveur mail durci est un serveur mail crédible.
- Logs Linux : où chercher, comment lire — pour creuser les logs Postfix/OpenDKIM.
- Mettre en place un CDN gratuit avec Cloudflare — utile pour la zone DNS et la gestion centralisée.
Checklist finale
Avant de considérer la configuration validée, vérifiez :
- SPF publié,
dig TXT mondomaine.frretournev=spf1 - DKIM publié,
dig TXT selector._domainkey.mondomaine.frretourne la clé publique - DMARC publié,
dig TXT _dmarc.mondomaine.frretournev=DMARC1 - Mail de test à mail-tester.com : score ≥ 9/10
- Mail de test vers Gmail :
Authentication-Resultsmontrepasspartout - Reverse DNS de l'IP serveur configuré (
ptrqui matchehelo) - Postfix
myhostnamecohérent avec le PTR - Pas de blacklists actives (test sur mxtoolbox.com/blacklists.aspx)
Si un seul de ces points est en rouge, attendez de tout valider avant de passer DMARC en p=reject. Mieux vaut perdre une semaine en observation que perdre des clients qui ne reçoivent plus vos confirmations de commande.
Trois enregistrements TXT, des milliers de mails sauvés
SPF + DKIM + DMARC, c'est trois entrées DNS et une heure de boulot pour résoudre 95% des problèmes de délivrabilité. En 2026, ne pas le faire revient à condamner volontairement vos mails au spam. La méthode est toujours la même : SPF d'abord (le plus simple), DKIM ensuite (le plus technique), DMARC en dernier en mode observation pendant 2-3 semaines, puis durcir. Et surveillez les rapports : ils racontent qui prétend envoyer en votre nom, ce qui est précieux pour détecter le phishing visant vos clients.