SPF

SPF est un protocole pour vérifier la provenance des courriels à l'aide de DNS pour essayer de réduire le SPAM.

Lorsqu'une personne avec l'adresse test@mail.com envoie un courriel à partir du serveur 1.2.3.4 , le serveur distant qui reçoit le courriel peut effectuer une requête DNS TXT pour le domaine mail.com et vérifier si l'IP 1.2.3.4 peut envoyer le courriel.

Pour contre-exemple, si un serveur web 4.3.2.1 a été compromis avec un script pour envoyer des spams, il ne pourra pas dans la majorité des cas, modifier aussi l'entrée DNS et ajouter l'enregistrement TXT de confirmation.

Deux renseignements sont importants pour SPF: le champ From du courriel (le nom de domaine) et l'adresse IP du serveur qui envoie le courriel. C'est au serveur distant de vérifier l'enregistrement TXT.

Exemple de configuration

Pour un From: bla@mail.test.com, serveur 1.2.3.4, le nom de domaine est mail.test.com. Dans le DNS de test.com, il faut ajouter un enregistrement TXT pour le sous-domaine "mail." avec les infos:
v=spf1 mx a ip4:1.2.3.4 ~all

Pour un From: bla@test.com, serveur 1.2.3.4 et les serveurs de Google Suite. Dans le DNS de test.com, il faut ajouter un enregistrement TXT pour le sous-domaine "" ou "@" avec les infos:
v=spf1 include:_spf.google.com ip4:1.2.3.4 ~all

Options

include:nom.de.domaine
mx
a
ip4:99.99.99.99
ip4:99.99.99.99/16
ip6:aa:bb::
ip6:aa:bb::/36
~all

La directive include permet d'ajouter la configuration dans un autre enregistrement TXT. Par exemple pour un site sur Google Suite:

dig TXT somedomain.com
somedomain.com.	14400	IN	TXT	"v=spf1 include:_spf.google.com ~all"

dig _spf.google.com
_spf.google.com.	300	IN	TXT	"v=spf1 include:_netblocks.google.com include:_netblocks2.google.com include:_netblocks3.google.com ~all"

dig _netblocks.google.com
_netblocks.google.com.	3600	IN	TXT	"v=spf1 ip4:64.233.160.0/19 ip4:66.102.0.0/20 ip4:66.249.80.0/20 ip4:72.14.192.0/18 ip4:74.125.0.0/16 ip4:108.177.8.0/21 ip4:173.194.0.0/16 ip4:209.85.128.0/17 ip4:216.58.192.0/19 ip4:216.239.32.0/19 ~all"

dig _netblocks2.google.com
_netblocks2.google.com.	3600	IN	TXT	"v=spf1 ip6:2001:4860:4000::/36 ip6:2404:6800:4000::/36 ip6:2607:f8b0:4000::/36 ip6:2800:3f0:4000::/36 ip6:2a00:1450:4000::/36 ip6:2c0f:fb50:4000::/36 ~all"

dig _netblocks3.google.com
_netblocks3.google.com.	3600	IN	TXT	"v=spf1 ip4:172.217.0.0/19 ip4:172.217.32.0/20 ip4:172.217.128.0/19 ip4:172.217.160.0/20 ip4:172.217.192.0/19 ip4:108.177.96.0/19 ~all"