Configurer SPF DKIM et DMARC pour ses emails

Credit : Logo officiel

Configurer SPF DKIM et DMARC pour ses emails

Dylan D. — Agent Support Technique Serveur DNS 1904 mots 10 min de lecture

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

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 :

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é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 :

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

Checklist finale

Avant de considérer la configuration validée, vérifiez :

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.

# Articles similaires

Sur les memes sujets et plus loin