Aller au contenu

SPF, DKIM, DMARC, BIMI : guide anti-spoofing pour votre domaine

Cryptolab.re
Auteur
Cryptolab.re
Cryptolab est un blog personnel où je documente mes expérimentations techniques : infra, self-hosting, réseau, crypto et projets parfois inutiles, souvent instructifs.
Sommaire

Le spoofing email - l’envoi d’un message dont l’adresse d’expéditeur est usurpée - reste l’un des vecteurs les plus efficaces pour le phishing et les campagnes de malware. Pourtant, les mécanismes pour s’en protéger existent depuis des années. Le problème n’est pas technique : c’est la dispersion de la documentation et la complexité perçue qui freinent leur adoption.

Ce guide couvre la configuration complète pour un propriétaire de domaine qui utilise un hébergeur de boîtes mail et éventuellement un ou plusieurs ESP (Email Service Provider) pour des envois en nombre. Il ne couvre pas la configuration d’un serveur SMTP sortant (Postfix, OpenDKIM, etc.) : il part du principe que quelqu’un d’autre émet pour vous, et que vous devez simplement autoriser et signer correctement.

Note d’attribution : ce guide s’appuie notamment sur la série de Yanal-Yves Fargialla consacrée à SPF, DKIM, DMARC et BIMI. Il en propose une synthèse condensée, complétée par des vérifications opérationnelles, des sources normatives et quelques choix de configuration pragmatiques.

En bref
#

SPF, DKIM et DMARC sont les trois mécanismes complémentaires qui protègent un domaine contre l’usurpation d’identité email. SPF autorise les serveurs d’envoi, DKIM signe cryptographiquement les messages, DMARC coordonne les deux et dicte la conduite à tenir en cas d’échec. BIMI ajoute un logo vérifié dans les boîtes aux lettres compatibles. Ensemble, ils forment la base réaliste de protection contre le spoofing, le phishing et l’usurpation de marque par email.

Ce guide vous explique comment les configurer, dans l’ordre, avec les vérifications qui comptent.

Architecture et concepts
#

Avant de plonger dans les enregistrements DNS, il faut comprendre le flux d’un email et les trois acteurs impliqués.

Quand vous envoyez un email depuis contact@votre-domaine.fr :

  1. Votre MUA (Thunderbird, Gmail, Outlook) transmet le message à votre serveur SMTP sortant (celui de votre hébergeur)
  2. Ce serveur le remet au serveur SMTP destinataire (celui du destinataire)
  3. Le serveur destinataire vérifie l’authenticité du message avant de le déposer dans la boîte de réception

La difficulté est que l’enveloppe SMTP (le return-path, aussi appelé MAIL FROM) et l’en-tête From: visible par l’utilisateur peuvent pointer vers des domaines différents. C’est notamment le cas quand vous passez par un ESP comme Mailjet, SendGrid ou Amazon SES : le return-path est leur domaine, le From: est le vôtre.

C’est cette divergence que DMARC est censé contrôler, en imposant un alignement entre le domaine visible par l’utilisateur et au moins un mécanisme d’authentification valide.

Impact réel
#

Une configuration correcte ne garantit pas que tous vos messages arriveront en boîte de réception. La délivrabilité dépend aussi de la réputation de l’IP, du domaine, du contenu, du volume d’envoi et des plaintes utilisateurs.

En revanche, SPF, DKIM et DMARC réduisent fortement deux risques concrets :

  • un tiers qui envoie des messages avec votre domaine dans le From:
  • un prestataire légitime mal configuré qui échoue chez Gmail, Outlook ou Yahoo

Depuis 2024, Gmail impose aussi des exigences plus strictes aux expéditeurs, surtout pour les volumes importants : authentification SPF/DKIM, DMARC, reverse DNS valide, TLS et désinscription facile pour les emails marketing. Même pour un petit domaine, ces mécanismes ne sont plus seulement des bonnes pratiques de sécurité. Ils font partie du socle minimal de délivrabilité.

FCrDNS (Forward-Confirmed reverse DNS)
#

Avant même SPF, un prérequis souvent négligé est le FCrDNS : votre serveur d’envoi doit avoir un enregistrement PTR (reverse DNS) qui correspond à son nom d’hôte, et ce nom d’hôte doit résoudre vers l’IP du serveur.

C’est un mécanisme de réputation de base. Les principaux fournisseurs de boîtes mail (Gmail, Outlook, Yahoo) le vérifient. Sans FCrDNS, vos emails risquent d’être marqués comme spam, même avec SPF et DKIM valides.

Vérification :

# Reverse DNS de l'IP du serveur
dig -x 1.2.3.4 +short

# Vérifier que le nom obtenu résout bien vers l'IP
dig mail.votre-domaine.fr +short

Les deux commandes doivent former une boucle cohérente. Si votre hébergeur ne vous donne pas la main sur le PTR, demandez-lui de le positionner correctement.

SPF (Sender Policy Framework)
#

SPF permet de déclarer dans le DNS quelles adresses IP sont autorisées à émettre des emails pour un domaine utilisé dans l’enveloppe SMTP. En pratique, c’est surtout le domaine du MAIL FROM, souvent visible comme return-path, qui est évalué.

L’enregistrement SPF se place sur le domaine racine (ou un sous-domaine spécifique) sous la forme d’un enregistrement TXT :

v=spf1 ip4:1.2.3.4 include:_spf.google.com ~all

Les mécanismes principaux :

  • ip4: / ip6: - autorise une IP ou un bloc
  • include: - délègue à un autre domaine SPF, pratique pour les ESP
  • a: - autorise l’IP correspondant au record A du domaine
  • mx: - autorise les IP des serveurs MX du domaine
  • all - la règle finale : -all (fail), ~all (softfail), ?all (neutre)

La règle -all est recommandée à terme, mais attention : le transfert d’email (forwarding) casse souvent SPF car l’enveloppe est conservée alors que l’IP du relais change. DMARC ne répare pas SPF dans ce cas. Il permet surtout au message de rester légitime si DKIM passe encore et si la signature est alignée avec le domaine du From:. Tant que vous n’avez pas observé vos flux réels, ~all est plus prudent.

Cas des ESP
#

Un point souvent mal compris : le SPF que le destinataire vérifie est celui du domaine du return-path, pas directement celui du From: visible par l’utilisateur. Or, les ESP (Mailjet, SendGrid, etc.) peuvent utiliser leur propre domaine de rebond, ou un sous-domaine personnalisé que vous déléguez.

Exemple concret : si votre message part avec From: contact@votre-domaine.fr, mais un return-path du type bounce.esp.example, SPF sera évalué sur le domaine de rebond de l’ESP. Si vous configurez un domaine de rebond personnalisé comme bounce.votre-domaine.fr, SPF redevient pertinent côté domaine. C’est aussi ce qui permet à SPF d’être aligné pour DMARC.

Ce qui compte vraiment, c’est de vérifier le return-path réel de chaque flux. Pour vos envois directs où le return-path est bien votre domaine, votre SPF doit autoriser l’infrastructure qui émet. Pour les ESP, privilégiez un domaine de rebond personnalisé et aligné, quand le prestataire le permet.

Vérification
#

dig txt votre-domaine.fr +short | grep "v=spf1"

DKIM (DomainKeys Identified Mail)
#

DKIM ajoute une signature cryptographique dans l’en-tête du message. Le serveur destinataire vérifie cette signature en récupérant une clé publique publiée dans le DNS.

Contrairement à SPF, DKIM survit souvent au transfert d’email : la signature est portée par un en-tête DKIM-Signature et couvre le corps du message ainsi qu’une sélection d’en-têtes. Elle ne dépend pas de l’IP du relais SMTP. C’est ce qui fait sa force, même si certaines modifications du message par une liste de diffusion ou une passerelle peuvent casser la signature.

Fonctionnement
#

  1. Le serveur d’envoi signe le message avec une clé privée
  2. Il ajoute un en-tête DKIM-Signature qui contient notamment le sélecteur et le domaine
  3. Le serveur destinataire récupère la clé publique via selecteur._domainkey.votre-domaine.fr
  4. Il vérifie la signature

La configuration côté DNS :

selector1._domainkey.votre-domaine.fr IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb4... long"

La clé privée reste côté serveur d’envoi. Chaque hébergeur ou ESP génère sa propre paire de clés et vous fournit l’enregistrement à publier. Si le prestataire le permet, préférez une clé DKIM de 2048 bits.

Sélecteurs multiples
#

Si vous utilisez plusieurs prestataires (hébergeur de boîtes + ESP), vous aurez plusieurs sélecteurs DKIM, un par prestataire. C’est normal.

Vérification
#

dig txt selector1._domainkey.votre-domaine.fr +short

La commande doit retourner un enregistrement commençant par v=DKIM1.

DMARC (Domain-based Message Authentication, Reporting & Conformance)
#

DMARC est le chef d’orchestre. Il définit :

  1. Quel mécanisme d’authentification utiliser (SPF, DKIM ou les deux)
  2. Quel alignement exiger entre le From: et les domaines vérifiés
  3. Que faire en cas d’échec (aucun, quarantaine, rejet)
  4. Où envoyer les rapports d’analyse

Politique DMARC
#

L’enregistrement DMARC se place sur _dmarc.votre-domaine.fr :

_dmarc.votre-domaine.fr IN TXT "v=DMARC1; p=quarantine; pct=100; rua=mailto:dmarc@votre-domaine.fr"

Les politiques possibles :

  • p=none - ne rien faire, seulement collecter les rapports
  • p=quarantine - demander la mise en quarantaine des messages en échec, souvent en spam
  • p=reject - demander le rejet des messages en échec, recommandé à terme

Alignement
#

L’alignement DMARC peut être strict (s) ou relâché (r) :

  • DKIM aligné : le domaine de la signature DKIM doit correspondre au domaine du From:
  • SPF aligné : le domaine du return-path doit correspondre au domaine du From:

Pour l’alignement strict, les domaines doivent être identiques. Pour l’alignement relâché, le sous-domaine est ignoré (ex: mail.votre-domaine.fr est aligné avec votre-domaine.fr).

La configuration recommandée pour commencer reste volontairement permissive :

v=DMARC1; p=none; adkim=r; aspf=r; pct=100; rua=mailto:dmarc-reports@votre-domaine.fr

Le mode relâché (r) évite de casser inutilement les flux qui utilisent des sous-domaines techniques, par exemple bounce.votre-domaine.fr. Une fois les flux stabilisés, vous pouvez durcir progressivement avec adkim=s, aspf=s, sp=quarantine, puis p=quarantine ou p=reject.

Rapports
#

rua reçoit les rapports agrégés DMARC, généralement sous forme de fichiers XML envoyés périodiquement par les serveurs destinataires. Ces rapports vous permettent de savoir qui émet pour votre domaine, combien de messages passent ou échouent, et quel mécanisme a permis l’alignement.

ruf correspond aux rapports d’échec détaillés. En pratique, beaucoup d’opérateurs ne les envoient pas ou les limitent fortement pour des raisons de confidentialité. Pour un domaine classique, commencez par rua et ajoutez ruf seulement si vous savez quoi en faire.

Des outils comme dmarcian ou postmarkapp facilitent l’analyse de ces rapports sans avoir à parser le XML manuellement.

Migration progressive
#

  1. Commencez par p=none et collectez les rapports pendant 1-2 semaines
  2. Identifiez les sources légitimes qui ne passent pas l’authentification
  3. Corrigez SPF et DKIM pour ces sources
  4. Durcissez éventuellement l’alignement (adkim=s, aspf=s) si vos flux le supportent
  5. Passez à p=quarantine, éventuellement avec pct=25 ou pct=50
  6. Quand tout est stable, passez à p=reject

Ne passez pas directement à p=reject sans cette phase d’observation, sous peine de bloquer vos propres emails.

Vérification
#

dig txt _dmarc.votre-domaine.fr +short

BIMI (Brand Indicators for Message Identification)
#

BIMI permet d’afficher un logo vérifié à côté de vos emails dans les boîtes aux lettres qui le supportent, par exemple Apple Mail, Gmail, Yahoo ou Fastmail selon les conditions propres à chaque fournisseur.

Le principe est simple : si vos emails passent DMARC avec une politique suffisamment stricte (p=quarantine ou p=reject), vous pouvez publier un enregistrement BIMI pointant vers votre logo au format SVG Tiny P/S.

default._bimi.votre-domaine.fr IN TXT "v=BIMI1; l=https://votre-domaine.fr/logo.svg; a=https://votre-domaine.fr/logo-certificate.pem"

Le a= est optionnel et correspond à un certificat VMC (Verified Mark Certificate) qui atteste de votre marque. Sans ce certificat, certains fournisseurs (notamment Gmail) n’affichent pas le logo.

Limites de BIMI
#

  • Nécessite DMARC en p=quarantine ou p=reject, ce qui suppose que la chaîne SPF/DKIM/DMARC est déjà maîtrisée
  • Le certificat VMC coûte plusieurs centaines d’euros par an et n’est pas accessible à tout le monde
  • L’affichage dépend du fournisseur, de la réputation du domaine et parfois d’un certificat VMC
  • C’est un signal de marque, pas un mécanisme de sécurité supplémentaire

BIMI est un bonus visuel, pas une protection. Ne le priorisez pas avant d’avoir SPF, DKIM et DMARC correctement configurés.

Vérifier son exposition
#

Voici la séquence de commandes à exécuter pour vérifier l’état de votre domaine :

# 1. SPF
dig txt votre-domaine.fr +short | grep "v=spf1"

# 2. DKIM (remplacer selector1 par le sélecteur de votre prestataire)
dig txt selector1._domainkey.votre-domaine.fr +short

# 3. DMARC
dig txt _dmarc.votre-domaine.fr +short

# 4. BIMI
dig txt default._bimi.votre-domaine.fr +short

# 5. FCrDNS (remplacer 1.2.3.4 par l'IP du serveur SMTP sortant)
dig -x 1.2.3.4 +short
dig mail.votre-domaine.fr +short

Ces commandes vérifient la publication DNS. Elles ne remplacent pas un test réel.

Envoyez un email depuis chaque source légitime (hébergeur mail, outil de newsletter, application métier, CRM) vers une boîte Gmail ou Outlook, puis inspectez les en-têtes complets. Cherchez notamment :

Authentication-Results:
  spf=pass
  dkim=pass
  dmarc=pass

Vérifiez aussi les domaines associés :

  • SPF doit passer sur le domaine du return-path
  • DKIM doit passer avec un d= aligné avec le domaine du From:, au moins en mode relâché
  • DMARC doit passer grâce à SPF aligné ou DKIM aligné

Des outils en ligne comme MXToolbox ou app.dmarcanalyzer.com permettent une vérification complète sans taper de commandes.

Détection
#

La détection repose surtout sur les rapports DMARC et sur les journaux de votre fournisseur d’email. Les rapports rua permettent d’identifier :

  • les IP qui envoient réellement pour votre domaine
  • les sources légitimes qui échouent SPF, DKIM ou DMARC
  • les tentatives d’usurpation où le domaine From: est le vôtre mais aucun mécanisme n’est aligné

Sur un serveur SMTP que vous administrez, les logs peuvent aussi confirmer les rejets ou les quarantaines côté destinataire :

journalctl -u postfix --since "24 hours ago" | grep -Ei "dmarc|dkim|spf|reject|bounce"

Cette commande n’a de sens que si vous exploitez réellement le serveur sortant. Avec un hébergeur mail ou un ESP, utilisez plutôt leurs journaux d’événements et les rapports DMARC.

Correctifs et mitigations
#

La correction doit rester progressive. Le bon ordre est rarement de tout durcir d’un coup.

  1. Publiez SPF et DKIM pour chaque source d’envoi légitime
  2. Activez DMARC en p=none avec rua
  3. Analysez les rapports pendant quelques jours ou quelques semaines selon le volume
  4. Corrigez les sources qui échouent, surtout les ESP et applications métier
  5. Passez à p=quarantine, éventuellement avec pct=25 ou pct=50
  6. Passez à p=reject quand les flux légitimes sont stables

Pour un domaine qui ne doit jamais envoyer d’email, la posture est plus simple :

v=spf1 -all
_dmarc.votre-domaine.fr IN TXT "v=DMARC1; p=reject; rua=mailto:dmarc-reports@votre-domaine.fr"

Si le domaine ne reçoit pas d’email non plus, publiez un Null MX :

votre-domaine.fr. IN MX 0 .

Cette configuration réduit le risque qu’un domaine dormant soit utilisé comme leurre dans une campagne de phishing.

Erreurs fréquentes
#

ErreurProblèmeSolution
SPF avec trop de lookupSPF est limité à 10 requêtes DNSUtilisez un sous-domaine dédié ou fusionnez les includes redondants
DKIM sans sélecteur uniqueLes prestataires doivent avoir leur propre sélecteurUtilisez un sélecteur par prestataire
DMARC en p=reject sans phase p=noneVous bloquez vos propres emailsPassez d’abord par p=none et analysez les rapports
BIMI sans politique DMARC stricteBIMI exige DMARC en quarantine ou rejectConfigurez DMARC d’abord
Oubli du PTRDélivrabilité réduite, spamVérifiez le reverse DNS auprès de votre hébergeur

La limite des 10 lookup SPF est une contrainte bien connue. Chaque include:, a:, mx:, exists: et redirect= peut déclencher des requêtes DNS comptabilisées. Si vous dépassez cette limite, le résultat SPF doit être traité comme un permerror. Solution : passez par un sous-domaine dédié (ex: mail.votre-domaine.fr) avec un SPF simplifié, retirez les prestataires inutilisés ou demandez à l’ESP une configuration avec domaine de rebond dédié.

Conclusion
#

SPF, DKIM et DMARC forment un triptyque indispensable pour tout domaine qui envoie des emails. BIMI est un bonus visuel agréable mais secondaire.

L’ordre de priorité est simple :

  1. FCrDNS (reverse DNS)
  2. SPF (~all d’abord, -all après validation)
  3. DKIM (une clé par prestataire)
  4. DMARC (en commençant par p=none et des rapports rua)
  5. BIMI (si DMARC est stable et le budget le permet)

Ne cherchez pas à tout faire en un jour. La phase p=none de DMARC est là pour ça : elle vous permet d’observer et de corriger sans casser votre délivrabilité.

Comme toujours en matière de sécurité email, la perfection est l’ennemie du bien. Une configuration partielle mais correcte (SPF + DKIM, avec DMARC en p=none) est déjà plus efficace que rien.

Sources
#

Articles connexes

Campagne Atomic Arch : 1 500 paquets AUR détournés avec un infostealer et un rootkit eBPF

Le 11 juin 2026, les équipes de sécurité de Sonatype ont révélé une campagne massive de détournement de paquets dans l’Arch User Repository (AUR). Baptisée Atomic Arch, l’attaque a rapidement dépassé les premières estimations : de 400 paquets compromis le premier jour, le nombre est monté à plus de 1 500 en 48 heures. Des chercheurs identifient désormais jusqu’à 1 900 paquets orphelins adoptés et modifiés. L’attaque automatisée injecte un credential stealer en Rust avec capacités rootkit via eBPF, ciblant SSH keys, tokens cloud, sessions navigateur et identifiants de messagerie. Pour l’écosystème open source, cet incident dépasse largement Arch Linux. C’est le premier cas documenté d’une campagne industrialisée exploitant le mécanisme d’adoption des paquets orphelins à grande échelle.

Supply chain attacks : ce que Trivy, XZ et SolarWinds changent pour vos déploiements

Le 19 mars 2026, un groupe identifié comme TeamPCP a publié une version malveillante de Trivy, le scanner de vulnérabilités le plus utilisé du monde conteneurisé. L’attaque est exemplaire dans sa mécanique. TeamPCP a compromis le compte aqua-bot qui gère les releases de Trivy. Avec ce token, ils ont poussé un commit qui remplaçait actions/checkout par un fork malveillant, téléchargeant du code depuis un domaine typosquatté. Le flag --skip=validate de goreleaser était activé pour contourner la validation. En quelques minutes, 76 des 77 tags de version de trivy-action étaient force-pushés vers des commits infectés. Les 7 tags de setup-trivy étaient tous remplacés. Le payload était un credential stealer : dump de la mémoire du runner GitHub via /proc/<pid>/mem, sweep de 50+ chemins pour SSH keys, tokens AWS/GCP/Azure, secrets Kubernetes, Docker configs, fichiers .env, identifiants de base de données, wallets crypto. Les données étaient chiffrées en AES-256-CBC avec RSA-4096 et exfiltrées vers un serveur C2. Trois jours plus tard, des images Docker Hub v0.69.5 et v0.69.6 arrivaient avec le même payload. Et un ver npm, CanisterWorm, se propageait via le paquet containers-check. Aqua Security a détecté l’intrusion initiale fin février 2026 et avait rotationné des credentials. Mais la rotation n’était pas atomique. TeamPCP a gardé un accès résiduel via des tokens non révoqués. Le plus frappant n’est pas la sophistication. C’est la banalité du point d’entrée : un token CI mal rotationné. Et la confiance qu’on accorde à un outil qui est censé améliorer la sécurité.

Weekly #19 : Synology DSM 7.4, AUR sous pression, Fedora et le risque des agents IA

Synology dévoile DSM 7.4 avec déduplication HDD, agent IA natif et Drive 4.1 à recherche sémantique. L’AUR d’Arch traverse une vague de paquets malveillants. Fedora : un compte contributeur compromis aurait permis à un agent IA d’interagir avec le bug tracker. Linux 7.1, Immich v3 RC, Proxmox DCM 1.1, KDE Plasma 6.7, Lore VCS d’Epic Games.