Pourquoi l'e-mail a-t-il besoin de tout ça ?
Voici une vérité qui dérange sur l'e-mail : il a été conçu au début des années 1980 pour un petit réseau de personnes qui se faisaient confiance. De base, n'importe qui peut envoyer un e-mail qui prétend venir de [email protected]. Rien dans le protocole de base ne l'en empêche.
SPF, DKIM et DMARC ont été ajoutés plus tard pour corriger ça. Ensemble, ils permettent au destinataire, comme Gmail, Outlook ou Yahoo, de répondre à une seule question : cet e-mail vient-il vraiment du domaine qu'il prétend ? Si la réponse est non, l'e-mail part en spam ou est rejeté. Et si votre propre domaine ne les a pas configurés, vos vrais e-mails risquent d'être traités comme des faux.
Une petite comparaison aide à y voir clair :
- SPF, c'est la liste des invités : quels serveurs ont le droit d'envoyer des e-mails pour votre domaine.
- DKIM, c'est le sceau de cire : une signature qui prouve que l'e-mail n'a pas été modifié en chemin.
- DMARC, ce sont les consignes pour le videur : que faire quand un e-mail échoue aux contrôles, et qui prévenir.
SPF : la liste des invités
SPF (Sender Policy Framework) est une simple ligne de texte que vous publiez dans le DNS de votre domaine. Elle liste les serveurs et les services autorisés à envoyer des e-mails en votre nom. Quand Gmail reçoit un e-mail de votre domaine, il consulte cette liste et vérifie si le serveur qui l'a envoyé y figure.
Un enregistrement SPF typique ressemble à ceci :
v=spf1 include:_spf.google.com include:sendgrid.net ~allEn le lisant de gauche à droite :
v=spf1: « ceci est un enregistrement SPF ».include:_spf.google.com: Google Workspace a le droit d'envoyer pour moi.include:sendgrid.net: SendGrid aussi (par exemple pour les e-mails de mon appli).~all: tout le reste, ce n'est probablement pas moi, donc à traiter avec méfiance. (-allsignifie « ce n'est certainement pas moi, rejette-le ».)
Il existe aussi une limite de 10 requêtes DNS dans un même enregistrement SPF. Chaque include: compte, tout comme les includes qu'il contient. Si vous utilisez beaucoup de services, vous pouvez dépasser la limite sans vous en rendre compte, et SPF échoue alors pour tout le monde.
DKIM : le sceau de cire
SPF vérifie d'où vient un e-mail. DKIM (DomainKeys Identified Mail) vérifie que l'e-mail lui-même n'a pas été trafiqué. Votre service de messagerie signe chaque message sortant avec une clé privée que lui seul connaît. Vous publiez la clé publique correspondante dans votre DNS. Le serveur destinataire utilise cette clé publique pour vérifier la signature.
Si quelqu'un a modifié l'e-mail en chemin, ne serait-ce qu'un seul mot dans le texte, la signature ne correspond plus. C'est comme le sceau de cire sur une lettre d'autrefois : si le sceau est brisé, vous savez que quelqu'un l'a ouverte.
Un enregistrement DKIM est publié sous un nom particulier, par exemple google._domainkey.yourdomain.com, et sa valeur ressemble à peu près à ceci :
v=DKIM1; k=rsa; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu1...La bonne nouvelle : vous n'écrivez jamais ça vous-même. Votre fournisseur de messagerie le génère, et vous n'avez qu'à le copier dans votre DNS. Le mot avant ._domainkey (ici google) s'appelle le sélecteur. Il vous permet simplement d'avoir plusieurs clés, une par service.
DMARC : les consignes pour le videur
SPF et DKIM fournissent des faits au serveur destinataire. DMARC (Domain-based Message Authentication, Reporting and Conformance) lui dit quoi faire de ces faits. Il ajoute aussi une règle importante, appelée alignement : le domaine qui réussit le contrôle SPF ou DKIM doit correspondre au domaine que le lecteur voit réellement dans la ligne « De ». Sans cette règle, un escroc pourrait passer SPF avec son propre domaine tout en affichant le vôtre.
Un enregistrement DMARC se trouve sur _dmarc.yourdomain.com et ressemble à ceci :
v=DMARC1; p=none; rua=mailto:[email protected]p=none: observer seulement, ne rien bloquer pour l'instant. Parfait pour commencer.p=quarantine: envoyer les e-mails qui échouent dans les spams.p=reject: refuser complètement les e-mails qui échouent. La protection la plus forte.rua=mailto:...: l'adresse où les destinataires doivent vous envoyer des rapports de synthèse quotidiens.
Ces rapports sont la pépite cachée. Ils vous montrent chaque serveur qui envoie des e-mails avec votre domaine, y compris les services que vous aviez oubliés et toute personne qui tente de se faire passer pour vous.
La configuration, étape par étape
Imaginons que vous possédiez myshop.com, que vous utilisiez Google Workspace pour votre boîte mail et un service comme SendGrid ou Mailgun pour les confirmations de commande. Voici l'ordre dans lequel je procéderais :
- Listez tout ce qui envoie des e-mails au nom de votre domaine : votre fournisseur de messagerie, votre site ou votre appli, votre outil de newsletter, votre helpdesk, votre logiciel de facturation. C'est l'étape que tout le monde saute, et celle qui cause le plus de problèmes par la suite.
- Créez un seul enregistrement SPF dans votre DNS (un enregistrement TXT sur
myshop.com) qui les inclut tous, et qui se termine par~all. - Activez DKIM dans chaque service. Chacun vous donne un enregistrement à copier dans votre DNS. Cliquez ensuite sur « vérifier » ou « start authenticating » dans le service en question.
- Ajoutez un enregistrement DMARC avec
p=noneet une adresse pour les rapports, sur_dmarc.myshop.com. - Attendez une à deux semaines et lisez les rapports. Corrigez tout ce qui est légitime mais échoue quand même.
- Durcissez la politique en passant à
p=quarantine, puis plus tard àp=reject, une fois que vous êtes sûr que tous vos vrais e-mails passent.
Comment les vérifier sur n'importe quel e-mail reçu
Pas besoin d'outil. Votre messagerie affiche déjà les résultats :
- Gmail : ouvrez l'e-mail, cliquez sur les trois points, puis sur Afficher l'original. En haut, vous verrez des lignes comme
SPF: PASS,DKIM: PASSetDMARC: PASS. - Outlook : ouvrez le message, puis Affichage et Afficher les détails du message (ou Source du message), et cherchez l'en-tête
Authentication-Results. - Apple Mail : Présentation, puis Message, puis Tous les en-têtes.
Un vrai en-tête ressemble à peu près à ceci :
Authentication-Results: mx.google.com;
dkim=pass header.d=myshop.com;
spf=pass smtp.mailfrom=myshop.com;
dmarc=pass (p=QUARANTINE) header.from=myshop.comTrois « pass » et des domaines qui correspondent : cet e-mail est authentique. Si vous voyez fail, ou si les domaines ne correspondent pas à l'expéditeur affiché, méfiance. C'est l'un des signaux d'alerte dont je parle dans comment repérer un e-mail de phishing.
Si vous configurez votre propre domaine, un moyen rapide de tester consiste à envoyer un e-mail à une boîte de réception temporaire et à une adresse Gmail, puis à vérifier les en-têtes de la copie reçue sur Gmail. Ça prend deux minutes et ça vous montre exactement ce que voit le reste du monde.
Problèmes courants et solutions rapides
- « SPF: softfail » ou « neutral » : le serveur qui a envoyé l'e-mail ne figure pas dans votre enregistrement SPF. Ajoutez le service avec le
include:qu'il vous indique. - « SPF permerror » : en général, deux enregistrements SPF, ou plus de 10 requêtes. Fusionnez-les en un seul enregistrement et retirez les services que vous n'utilisez plus.
- « DKIM: fail » après la modification d'un modèle : quelque chose a réécrit l'e-mail après sa signature (certains services de transfert et pieds de page automatiques le font). Envoyez directement et testez à nouveau.
- DMARC échoue alors que SPF réussit : c'est l'alignement. SPF a réussi pour le domaine de votre service d'envoi, pas pour le vôtre. Activez DKIM avec votre propre domaine dans ce service, ou configurez un domaine de return-path personnalisé.
- Les e-mails arrivent encore en spam alors que tout passe : l'authentification prouve qui vous êtes, pas que les gens veulent recevoir vos e-mails. Le contenu, la réputation d'envoi et le taux de plaintes comptent aussi. J'en parle plus en détail dans pourquoi les e-mails d'une appli finissent en spam.
Avez-vous vraiment besoin des trois ?
Oui. Depuis 2024, Gmail et Yahoo exigent SPF, DKIM et un enregistrement DMARC de la part de quiconque envoie des e-mails en volume important, et même les petits expéditeurs obtiennent une bien meilleure délivrabilité avec les trois en place. Surtout, c'est DMARC avec p=reject qui empêche les escrocs d'envoyer de faux e-mails en votre nom à vos propres clients.
La configuration prend un après-midi. Ensuite, elle protège discrètement votre domaine, jour après jour. Si vous avez un domaine et que vous repoussez ça depuis un moment, voici votre signe. Commencez aujourd'hui avec p=none. Vous pourrez toujours durcir la politique plus tard.