Qu’est-ce que le SPF (Sender Policy Framework) ?

SPF est un processus d’authentification permettant de s’assurer que l’email est bien éligible.

Le serveur SMTP utilisé lors du transfert d’un courrier électronique ne vérifie pas l’identité de l’expéditeur. Il est donc aisé d’usurper une identité ou d’en utiliser une factice.

C’est là que le SPF intervient. Il a pour but de limiter le spam, mais faut-il encore que le serveur de réception soit configuré pour interpréter les champs SPF.

Grâce à un simple enregistrement dans le DNS (de type TXT), on va simplement venir renseigner les adresses IP et/ou les domaines autorisées ou interdites à envoyer des emails pour le domaine considéré.

Pourquoi mettre en place un SPF ?

Lorsque des spams sont envoyés sous votre identité, vous risquez de vous faire blacklister. Vous aurez alors bien du mal à envoyer des mails…

Comment créer un SPF ? Quelles options utiliser ?

Le SPF est un enregistrement TXT
Il devra toujours commencer par v=spf1
Il sera suivit des enregistrements A , MX , IP4 ou IP6
Il finira par ALL

Il existe des outils vous aidant dans la création de votre SPF, ils seront indiqués en fin d’article

IP4 ou IP6

  • IP4 spécifie une IP ou une plage d’IP en IPv4
    • v=spf1 ip4:212.208.150.151 +all
    • v=spf1 ip4:212.208.150.0/24 +all
  • IP6 spécifie une IP ou une plage d’IP en IPv6
    • v=spf1 ip6:0:0:0:0:0:ffff:d4d0:9697 +all
    • v=spf1 ip6:0:0:0:0:0:ffff:d4d0:9600/24 +all

A

L’argument A indique une résolution d’IP :

Du domaine par défaut

    • v=sfp1 a +all
  • D’un domaine spécifié
    • v=spf1 a:toto.com
  • De l’enregistrement DNS
    • v=spf1 a:mail.toto.com +all
  • Du réseau du domaine spécifié
    • v=spf1 a/24 +all
    • v=spf1 a:toto.com/24 +all

MX

On spécifie ici les serveurs de mails autorisés :

  • Résolution MX du domaine
    • v=spf1 mx +all
  • Résolution MX d’un domaine spécifié
    • v=spf1 mx:toto.com +all
  • Résolution MX de l’enregistrement DNS
    • v=spf1 mx:mail.toto.com +all
  • Résolution du réseau domaine spécifié
    • v=spf1 mx/24 mx mx:toto.com/24 +all

ALL

Il vient généralement se placer en fin de commande :
Tout est autorisé : +all
v=spf1 ip4:212.208.150.151 +all

Seule l’IP enregistrée est autorisée à envoyer du courrier :-all
v=spf1 ip4:212.208.150.151 –all

Le domaine ne peut pas envoyer de courrier du tout
v=spf1 –all

L’hôte n’est pas autorisé à envoyer, mais est en transit :~all
v=spf1 a:toto.com ~all

Le SPF spécifie explicitement qu’il est neutre : ?all
v=spf1 ?all

Création d’un SPF avec de multiples enregistrements

De multiples enregistrements peuvent donner lieu à un SPF à rallonge. Afin d’éviter ça, il est préférable de créer des enregistrements avec le même nom, et de faire le SPF avec.

Exemple

A proscrire

  • v=spf1 ip4:80.74.64.73 ip4:80.76.64.72 ip4:80.74.64.159 –all

A adopter

  • v=spf1 spf.DOMAIN.fr –all

et créer les enregistrements suivants :

spf.DOMAIN.fr                A             80.74.64.73
spf.DOMAIN.fr                A             80.76.64.72
spf.DOMAIN.fr                A             80.74.64.159

D’autres options peu utilisées sont également disponibles

PTR

Le ou les noms d’hôte pour l’adresse IP du client sont recherchés en utilisant des requêtes PTR.

Les noms d’hôte sont ensuite validées et au moins l’un des enregistrements A pour un nom d’hôte PTR doit correspondre à l’adresse IP du client d’origine.

Les noms d’hôte non valides sont rejetés.

Si un nom d’hôte valide termine dans le domaine, cet argument fonctionne.

Si le domaine n’est pas spécifié, le domaine courant est utilisé.

  • Le domaine qui contrôle directement toutes ses machines permet à tous les serveurs d’envoyer du courrier (hotmail, gmail …)
    • v=spf1 ptr –all
  • Tout serveur dont le nom d’hôte se termine en toto.com est autorisé
    • v=spf1 ptr:toto.com -all

/ ! \ Si possible, évitez d’utiliser ce mécanisme dans un enregistrement SPF, cela se traduira pas un plus grand nombre de recherche DNS.

INCLUDE

Le domaine spécifié est recherché pour une correspondance (il prend le même champ SPF que le domaine précisé dans le include).

Si la recherche ne renvoie pas une correspondance ou une erreur, le traitement procède à la prochaine directive.

Si toto.com n’a pas d’enregistrement SPF, il en résultera une PermError

v=spf1 include:toto.com –all
On suppose que toto.com a un enregistrement du type

v=spf1 a –all
On recherche alors l’enregistrement A pour toto.com

S’il y a correspondance (1.2.3.4 par exemple) alors la requête est acceptée.

S’il n’y a pas de correspondance, autre que celui du domaine inclus, la requête sera rejetée.

Il s’agit donc d’une relation de confiance entre les domaines inclus dans le SPF

/ ! \ Si le domaine n’a pas un enregistrement SPF valide, il en résultera une erreur permanente !

Vous aurez des rejets basés sur une PermError

EXISTS

Effectue une requête sur le résultat fourni. Si un résultat est trouvé, il y a donc correspondance peu importe le résultat.

Lorsque l’on utilise des macros avec ce mécanisme, on peut effectuer des recherches inversées ou mettre en place des exceptions par utilisateur.

v=spf1 exists:toto.com –all

Si la résolution du domaine toto.com marche, la requête fonctionne.

Si la résolution du domaine toto.com échoue, la requête échoue.

Les Modificateurs

Les modificateurs sont des arguments facultatifs.

Un modificateur ne peut apparaitre qu’une seule fois par enregistrement.

Les modificateurs inconnus sont simplement ignorés.

REDIRECT

L’enregistrement SPF pour le domaine remplace l’enregistrement en cours.

Le SPF va utiliser le SPF de toto.com

v=spf1 redirect=toto.com

  • Si toto.com n’a pas d’enregistrement SPF, c’est une erreur, le résultat est inconnu.
  • Si toto.com a un enregistrement du style v=spf1 a –all, on recherche l’enregistrement A pour toto.com.
  • S’il n’y a pas de correspondance, l’argument est ignoré et la valeur suivante est utilisée (ici –all)

EXP

Si un récepteur SMTP rejette un message, il peut inclure une explication.

Un éditeur SPF peut spécifier une réponse que les expéditeurs peuvent voir.

De cette façon un FAI peut rediriger des utilisateurs non conformes sur une page Web qui fournira de plus amples explications.

Exemple pour le domaine toto.com

v=spf1 mx –all exp=error.toto.com

On ajoute « error » aux enregistrements
error     IN           TXT « SPF erreur ip non presente dans le spf »

/ ! \ L’enregistrement EXP doit venir en fin de commande.

Un outil pour vous aider 

Ce site propose de tester votre SPF

Noémie Simon
Noémie Simon
Communicante multidisciplinaire et un peu geek. Passionnée par les nouvelles technologies et l'innovation. Je travaille aujourd'hui en tant que Community Manager !