Aller au contenu principal

SPF, DKIM et DMARC

Comprendre SPF, DKIM et DMARC pour sécuriser l'envoi d'emails contre le spoofing.

STOP_spoofing.png

Notions théoriques

Pourquoi sécuriser les emails ?

L'email est l'un des moyens de communication les plus utilisés sur Internet.

Pourtant, il repose sur un protocole très ancien, le SMTP, qui ne possède pas de mécanisme de sécurité natif pour vérifier l'identité de l'expéditeur.

Cela rend les emails vulnérables à une attaque appelée spoofing, où un expéditeur malveillant falsifie l'adresse d’expédition pour faire croire qu’un message provient d'une source de confiance.

Pour contrer cela, trois technologies ont été mises en place :

  • SPF (Sender Policy Framework)
  • DKIM (DomainKeys Identified Mail)
  • DMARC (Domain-based Message Authentication, Reporting & Conformance)

SPF : Vérifier que l’expéditeur est autorisé

SPF permet à un domaine d’indiquer quelles adresses IP sont autorisées à envoyer des emails en son nom. Cela se fait via un enregistrement DNS de type TXT.

Quand un serveur de messagerie reçoit un email, il peut consulter l’enregistrement SPF du domaine de l’expéditeur pour vérifier si l’adresse IP de l’expéditeur figure dans la liste autorisée.

Exemple d’enregistrement SPF :

v=spf1 ip4:192.0.2.0/24 include:_spf.google.com -all
  • v=spf1 : indique qu’il s’agit d’un enregistrement SPF de version 1.
  • ip4:192.0.2.0/24 : autorise cette plage d’adresses IP.
  • include:_spf.google.com : autorise les IP listées par Google.
  • -all : rejeter tout ce qui n’est pas listé.

DKIM : Signer les emails

DKIM ajoute une signature cryptographique dans l’en-tête des emails. Cette signature est générée par le serveur d’envoi à l’aide d’une clé privée. Le domaine publie la clé publique correspondante dans un enregistrement DNS.

Le serveur de réception peut alors vérifier que le contenu du message n’a pas été modifié et qu’il a bien été signé par un serveur autorisé.

Exemple d’enregistrement DKIM :

Nom DNS : default._domainkey.exemple.com

Valeur :

v=DKIM1; k=rsa; p=MIGfMA0GCSqGSI...AB
  • v=DKIM1 : version du protocole DKIM.
  • k=rsa : type de chiffrement utilisé.
  • p=... : clé publique.

DMARC : Coordonner SPF et DKIM

DMARC est une politique que le propriétaire d’un domaine peut publier pour indiquer comment les serveurs de réception doivent traiter les emails qui échouent aux vérifications SPF et/ou DKIM.

Il permet également de recevoir des rapports sur les tentatives de spoofing.

Exemple d’enregistrement DMARC :

Nom DNS : _dmarc.exemple.com

Valeur :

v=DMARC1; p=reject; rua=mailto:dmarc@exemple.com; adkim=s; aspf=s
  • v=DMARC1 : version du protocole.
  • p=reject : rejeter les messages non conformes.
  • rua=... : adresse pour recevoir les rapports.
  • adkim=s : politique stricte pour DKIM.
  • aspf=s : politique stricte pour SPF.

Comment ces technologies fonctionnent ensemble

SPF_DKIM_DMARC.png

  • SPF vérifie l’adresse IP de l’expéditeur.
  • DKIM vérifie la signature du message.
  • DMARC vérifie que SPF et DKIM sont valides et que le domaine correspond à celui de l’expéditeur visible (le From).
astuce

Utiliser SPF, DKIM et DMARC ensemble permet de maximiser la sécurité des emails et de réduire les risques de phishing.

attention

Un mauvais paramétrage peut entraîner le rejet d’emails légitimes. Toujours tester les enregistrements DNS avant de les appliquer en production.

Explication en vidéo

Voici une vidéo d'IT-Connect - Florian qui explique très bien les concepts de SPF, DKIM et DMARC.


Exemple pratique

Il est possible de configurer SPF, DKIM et DMARC sur un nom de domaine personnalisé utilisé pour envoyer des emails via un service SMTP (comme Mailgun, Sendinblue ou Postfix).

Étapes

  1. Accéder à la gestion DNS du domaine

    • Utiliser l’interface de votre registrar (OVH, Gandi, Cloudflare, etc.)
  2. Ajouter un enregistrement SPF

    • Type : TXT
    • Nom : @ ou vide
    • Valeur : v=spf1 include:_spf.mailgun.org -all
  3. Générer une paire de clés DKIM

    • Utiliser openssl :
      openssl genrsa -out private.key 1024
      openssl rsa -in private.key -pubout -out public.key
  4. Publier la clé publique DKIM

    • Type : TXT
    • Nom : mail._domainkey.votredomaine.com
    • Valeur : v=DKIM1; k=rsa; p=... (clé publique)
  5. Configurer le serveur SMTP pour signer les emails

    • Exemple avec Postfix + OpenDKIM :
      • Modifier /etc/opendkim.conf
      • Ajouter le domaine et la clé
  6. Ajouter un enregistrement DMARC

    • Type : TXT
    • Nom : _dmarc.votredomaine.com
    • Valeur : v=DMARC1; p=quarantine; rua=mailto:dmarc@votredomaine.com
  7. Tester la configuration

    • Envoyer un email à check-auth@verifier.port25.com
    • Lire le rapport de test
astuce

Il existe des outils en ligne pour vérifier les enregistrements DNS concernant SPF, DKIM et DMARC :


Test de mémorisation/compréhension


Quel est le rôle principal de SPF ?


Quel type d'enregistrement DNS est utilisé pour SPF ?


Que signifie le champ '-all' dans un enregistrement SPF ?


Quel protocole utilise une signature cryptographique ?


Quel est le rôle principal de DMARC ?


Que signifie 'p=reject' dans un enregistrement DMARC ?


Quel champ est utilisé pour recevoir des rapports DMARC ?


Quel outil permet de tester SPF, DKIM et DMARC ?


Que permet de vérifier DKIM ?


Quel est le nom de domaine utilisé pour publier une politique DMARC ?



TP pour réfléchir et résoudre des problèmes

  1. Accéder à la gestion DNS du domaine via l’interface du registrar.

  2. Ajouter un enregistrement SPF :

    • Type : TXT
    • Nom : @
    • Valeur : v=spf1 include:_spf.mailgun.org -all
  3. Générer une paire de clés DKIM avec openssl :

    openssl genrsa -out private.key 1024
    openssl rsa -in private.key -pubout -out public.key
  4. Publier la clé publique dans un enregistrement DNS :

    • Type : TXT
    • Nom : mail._domainkey.votredomaine.com
    • Valeur : v=DKIM1; k=rsa; p=... (clé publique)
  5. Configurer OpenDKIM sur le serveur mail :

    • Modifier /etc/opendkim.conf
    • Lier le domaine et la clé
  6. Ajouter un enregistrement DMARC :

    • Type : TXT
    • Nom : _dmarc.votredomaine.com
    • Valeur : v=DMARC1; p=reject; rua=mailto:dmarc@votredomaine.com
  7. Envoyer un email test à check-auth@verifier.port25.com

  8. Vérifier les résultats sur https://www.mail-tester.com ou https://mxtoolbox.com/

Exemples de création d'une entrée DNS de type DMARC chez OVH
Exemples de création d'une entrée DNS de type DMARC chez Infomaniak