Qu’est ce que c’est ?

Un enregistrement SPF (Sender Policy Framework) est un type d’enregistrement DNS TXT qui répertorie tous les serveurs autorisés à envoyer des e-mails depuis un domaine particulier. Un enregistrement DNS TXT (« texte ») permet à un administrateur de domaine saisir du texte libre dans le DNS (Domain Name System). Les enregistrements TXT ont été initialement créés dans le but d’inclure des avis importants concernant le domaine, mais ils ont depuis évolué pour servir d’autres objectifs.

Compostion

Le champ est composé de 3 parties

v=spf1 indique au serveur que ceci contient un enregistrement SPF. Chaque enregistrement SPF doit commencer par cette chaîne.

Le champs des serveurs autorisés, c’est-à-dire la liste des adresses IP autorisées sous forme d’ip directement Il existe 4 types

  • ip4 et ip6 : contient une ip ou une plage d’IP
  • include : un sous domaine dans un champ txt reprenant une liste d’IP ou de sous domaines. Celui ci ne peut avoir plus de 10 ocurrences.
  • a: contient le nom netbios d’un serveur
  • mx : qui reprend automatiquement les ip du champ mx du domaine

Enfin, all qui indique aux serveurs de mails ce qu’ils doivent faire lorsque les adresses ne figurent pas dans l’enregistrement SPF.

Démonstration

Pour notre démonstration, j’ai un peu surchargé mon champ SPF

On va utiliser le site https://www.mimecast.com/fr/products/dmarc-analyzer/spf-record-check/ pour vérifier le SPF

Celui ci me détecte 15 lookup (nombre de renvoi vers d’autres serveur DNS), alors que dans un champ spf, il ne doit y en avoir que 10.

Autoriser des serveurs

Adresse IP

Le domaine que l’on utilise avec les adresses IP déclarées dans le champ txt, seront reconnus comme autorisées à émettre du courrier avec ce domaine.

  • ip4 : adresse IPv4
  • ip4 : adresse IPv6

Exemple

@ txt "v=spf1 ip4:87.106.170.231 ip6:2001:8d8:1801:81ca::/64 ip4:82.64.204.207 ip6:2a01:e0a:32f:5ec1::/64 ~all"

Attention, plus le nombre d’IP est grand, plus le temps de traitement est important, avec des risques de passe de la part des serveurs de mail, et plus vous ouvrez votre système à de potentiel spam qui pourraient utiliser les ip déclarées.

Champ a:

Le champ a: permet de reprendre des noms de serveurs

Exemple

@ txt "v=spf1 a:hebergement.akoonet.com ip4:87.106.170.231 ip6:2001:8d8:1801:81ca::/64 ip4:82.64.204.207 ip6:2a01:e0a:32f:5ec1::/64

Champ MX

Souvent, les serveurs de réception sont identiques aux serveurs d’envoi

Il suffit alors de rajouter le champ MX pour que les serveurs référencé en MX dans le DNS soient inclus dans le champ SPF

Exemple

@ txt "v=spf1 mx ip4:87.106.170.231 ip6:2001:8d8:1801:81ca::/64 ip4:82.64.204.207 ip6:2a01:e0a:32f:5ec1::/64 ~all"

Champ Include

Pour simplifier la saisie des adresses IP, on peut utiliser des enregistrements DNS regroupant plusieurs adresses IP, que l’on va ensuite inclure dans le SPF du domaine grace à la fonction include.

La méthode a une limite, on ne peut pas inclure plus de 10 include dans le champ SFP, de manière directe, ou indirecte (des include qui vont chercher d’autres include)

On peut donc créer un enregistrement DNS comportant un sous domaine, reprenant les adresses IP utilisées le domaine, puis l’inclure dans le spf de akoonet.com

spf.akoonet.com txt "v=spf1 ip4:87.106.170.231 ip6:2001:8d8:1801:81ca::/64 ip4:82.64.204.207 ip6:2a01:e0a:32f:5ec1::/64 ~all"

Exemple

@ txt "v=spf1 mx include:spf.akoonet.com include:givexpert.net include:spf.one-system.fr ~all"

Point d’attention sur les Include indirects

Dans l’exemple ci dessus, givexpert.net inclut dans son spf 2 autres include spf (sendgrid.net et spf.sendinblue.com), et sendgrid.net a un include lui même vers un autre include ab.sendgrid.net.

Ce qui nous donne 4 include (celui d’origine, et 3 autres indirects)

IncludeIncludeInclude
givexpert.net sendgrid.net ab.sendgrid.net
 spf.sendinblue.com

De même spf.one-system.fr.com fait un include vers 5 autres include

IncludeIncludeInclude
spf.one-system.frspf.protection.outlook.com 
spf.cloud.vadesecure.com
27028785.spf08.hubspotemail.net
_spf1.shmail.fr
_spf2.shmail.fr

Ce qui fait 15 include au total dans notre exemple. On dépasse donc allégrement les 10.

On prend donc le risque de voir le SPF du domaine non reconnu par certains serveurs de mails à cause du nombre important de serveurs dns a interroger.

Faire du tri

Pour résoudre ce problème de cascade, on peut dans un premier temps enlever des include que nous aurions indiqués dans notre champs SPF et qui sont repris de manière indirecte dans un autre spf.

Traduire toutes les includes en IP

L’autre méthode consisterait à reprendre l’ensemble des include pour les traduire en adresses IP. Cette méthode est fastidieuse et lors de changement d’IP de la part de nos fournisseurs, risquent de faire arriver nos mails en indésirable.

Il existe de nombreux sites qui peuvent faire cela pour vous, mais il y aura forcement un décalage à cause de la propagation des DNS, donc à éviter.

Utiliser des sous domaines

L’idée est dans le cas d’une utilisation pour une mailing list, d’utiliser un sous domaine, avec son propre spf pour éviter de surcharger l’enregistrement du domaine.

ALL

  • -all indique au serveur que les adresses qui ne figurent pas dans l’enregistrement SPF ne sont pas autorisées à envoyer des e-mails et doivent être refusées.
  • Les alternatives incluent ~all, qui stipule que les e-mails non répertoriés seront marqués comme non sûrs ou indésirables, mais seront tout de même acceptés, et, plus rarement, +all, qui signifie que n’importe quel serveur peut envoyer des e-mails pour le compte de votre domaine.