Dans mon billet précédent, j’ai expliqué le fonctionnement du Sender Policy Framework, càd de SPF.
Le principe est de publier dans une ligne du serveur DNS, la liste des serveurs mails officiellement autorisés à envoyer des mails pour votre domaine.
Comment définir cette ligne DNS ?
Je me base principalement sur les explications très claires venant du site www.openspf.org.
Un DNS peut contenir des lignes, des records, de plusieurs types. L’idéal aurait évidemment été d’avoir un type de record « SPF ». Malheureusement cela n’a pas été prévu à l’origine, et ajouter ce record DNS à la norme, et surtout attendre que la majorité des serveurs DNS aient été adapté aurait pris bien trop de temps.
La solution adoptée a été de publier un record de type texte (TXT), commençant par « v=spf1″, et contenant la liste de vos serveurs mails.
Je ne vais pas ici détailler le fonctionnement d’un Domain Name System (surtout que je ne le maitrise pas encore tout à fait moi-même). De nombreuses documentations existent à ce sujet.
SPF concerne toujours le domaine indiqué dans l’adresse source des mails (le « From »).
Que mettre dans ce record SPF ?
- la liste des serveurs mails autorisés pour ce domaine
- mais aussi, que faire si un mail provient d’un serveur qui n’est pas dans votre liste officielle ?
Comment indiquer le ou les serveurs officiellement autorisés ?
Plusieurs méthodes existent.
La page « SPF record Syntax » du site OpenSPF donne de très bons renseignement à ce sujet.
Plusieurs mécanismes peuvent être utilisés, et un qualifiant peut préfixer ces mécanismes.
Quand plusieurs mécanises sont présents dans le record SPF, l’analyse se fait de gauche à droite jusqu’au moment où un mécanisme matche. (Quel serait l’équivalent français de « match » ou « matcher » ?)
Les qualifiants
Les qualifiants sont :
- « + » : pass (accepté)
- « - » : failed (échoué, en théorie le mail sera bloqué)
- « ~ » : soft failed (accepté mais marqué comme suspect)
- « ? » : neutral (neutre, pas d’influcence sur l’acceptation ou le rejet du mail)
Les mécanismes
Le mécanisme « all » :
« all », comme son nom l’indique, matche avec tous les domaines. On retrouve généralement « all » en fin de record SPF, ou seul.
« v=spf1 -all »
ce domaine ne peut envoyer aucun mail !
Vous avez par exemple 2 noms de domaine : mon_site.com et mon_site.be. Vous redirigez d’office le trafic Web de mon_site.be vers le site général mon_site.com. Comme vous n’utilisez réellement que mon_site.com, aucun mail ne devrait jamais venir de mon_site.be. Tout mail ayant comme adresse d’origine mon_site.be est donc un spam !
Le mécanisme « ip4 :
Une des façons les plus simples d’indiquer un serveur mail est bien sur de donner son adresse IP. Par défaut, c’est l’adresse IP du serveur, mais cela peut aussi être un range IP, et donc couvrir plusieurs serveurs mails.
« v=spf1 ip4:91.121.98.67 -all »
votre serveur mail à l’adresse IP 91.121.98.67 (le /32 est par défaut). Le « -all » indique que vous n’avez jamais de mails envoyés d’un autre serveur. Tout mail provenant d’une autre machine devrait être bloqué car c’est certainement un spam
« v=spf1 ip4:91.121.98.67/24 ?all »
vos serveurs mails officiels se trouvent entre l’adresse IP 91.121.98.0 et 91.121.98.255 (range /24 de 256 adresses). Le comportement face à un mail venant de ce groupe de 256 adresses IP doit être positif. Il est malgré tout possible que des mails arrivent d’autres machines car vous avez indiqué « ?all« , càd que le comportement face à un mail venant d’une IP non listée (non officiel) est neutre.
Le mécanisme « ip6 :
Evidemment vous pouvez aussi indiquer l’adresse de votre serveur en IP V6.
Je reprend exactement l’exemple venant du site OpenSPF.org, car je n’ai pas encore commencé mes essais en IP V6 (c’est dans mes projets).
« v=spf1 ip6:1080::8:800:200C:417A/96 -all »
Autorise les mails venant de serveurs avec une adresse IP V6 entre 1080::8:800:0000:0000 et 1080::8:800:FFFF:FFFF. Le « -all » indique que les mails venant d’autres serveurs doivent être bloqués.
Le mécanisme « a » :
Au lieu de l’adresse IP, vous indiquez ici le nom de votre serveur.
« v=spf1 a -all »
sans nom spécifié, vous indiquez que votre serveur mail officiel est sur la même machine que votre domaine Web. Ainsi, les mails envoyés pour le domaine « mon_site.be » (sans le www !) sont supposés venir d’un serveur mail « mon_site.be » (donc de même IP)
« v=spf1 a:mon_site.be -all »
c’est entièrement équivalent au record précédent puisqu’on vérifie la provenant de mails ayant des adresses …@mon_site.be
« v=spf1 a:webmail.mon_site.be a:smtp.mon_site.be -all »
ce record indique que les mails sont envoyés depuis les machines « webmail.mon_site.be » et « smtp.mon_site.be ». Tous les autres sont rejetés.
« v=spf1 a:mail.site_externe.be/28 ~all »
Si l’adresse de « mail.site.externe.be » est 91.121.98.67, alors vous acceptez pour votre domaine, tous les mails venant d’une machine avec une IP entre 91.121.98.64 et 91.121.98.79 (range de 16 adresses /28). Le « ~all » indique ici que des mails peuvent aussi venir d’autres serveurs, mais qu’ils sont douteux. ils seront marqués comme suspects (vous pouvez configurer un SpamAssassin pour tenir compte de cela et donc augmenter le rejet des mails venant de serveurs non officiels)
Le mécanisme « mx » :
Dans un DNS, les MX records servent à indiquer quels sont les serveurs mails pouvant RECEVOIR des mails pour votre domaine. Il arrive que ce soit les même serveurs pour l’envoie et la réception de mails.
« v=spf1 mx -all »
vous n’acceptez que les mails envoyés par un des serveurs recevant les mails pour ce domaine. (il peut y avoir plusieurs serveurs mails en réception, indiqués par plusieurs MX records)
« v=spf1 mx mx:monami.be -all »
en plus des serveurs indiqués dans vos MX records, votre domaine « mon_site.be » envoie également des mails via les serveurs de réception mails (MX records) du domaine « monami.be »
« v=spf1 mx/24 -all »
Vous avez tous vos serveurs mails (envoie et réception) dans un groupe de 256 adresses IP (range /24). Vous autorisez les mails provenant de tous serveurs se trouvant dans le même range de 256 adresses que vos serveurs mails de réception (MX record de votre domaine). Le reste (« -all ») doit être bloqué.
Le mécanisme « ptr » :
Ce mécanisme est déconseillé pour une utilisation standard, mais pourrait être utile pour de grosses entreprises avec un grand nombre de serveurs mails. La vérification est faite pour tous les noms de machines se terminant par le « ptr »
« v=spf1 prt -all »
Si votre domaine est « mon_site.be », vous acceptez tous les mails provenant de serveurs dont le nom se termine par « …mon_site.be ».
Des firmes comme Hotmail, Yahoo, etc, utilisent ce mécanisme. Cela autorise par exemple, tous les serveurs mail1.yahoo.com, mail2.yahoo.com, newmail54.yahoo.com … etc… sans devoir les indiquer tous dans le record SPF (ce ne serait pas possible et il y a un maximum d’éléments que l’on peut indiquer)
Le mécanisme « exist » :
Ce mécanisme vérifie simplement si le domaine indiqué existe (càd qu’on trouve son adresse IP, sans autre vérification)
« v=spf1 existe:autre_domaine.be -all »
Si la recherche DNS sur « autre_domaine.be » ne donne rien, alors le résultat est « failed » et le mail est rejeté. Ca ne semble pas trop utile de cette façon, mais des applications existent en utilisant des macros. Pour plus d’info, voir la page de documentation de OpenSPF.
Le mécanisme « include » :
Vous indiquez utiliser les serveurs d’un autre domaine pour l’envoie de vos mails. Attention, il faut que cet autre domaine ait aussi un record SPF.
« v=spf1 include:autre_domaine.be -all »
- Si cet « autre_domaine.be » n’a pas de records SPF, le résultat est une erreur permanente. Certains serveurs mails vont rejeter vos mails en cas de « PermError »
- Si cet « autre_domaine.be » a un record SPF, par exemple « v=spf1 a -all », ce record est analysé, SAUF le -all à la fin. Le mail sera donc accepté s’il vient du serveur « autre_domaine.be » (le » a » dans le record SPF de « autre_domaine.be »). S’il vient d’un autre serveur, ça dépend de la fin du record SPF de « mon_domaine.be ». Dans ce cas ci, c’est aussi « -all » et donc le mail sera rejeté.
Ce n’est pas toujours aussi simple. Il faut être très prudent en utilisant le mécanisme « include: ». Là aussi je vous conseille de lire la documentation sur le site OpenSPF.org. Pour un usage courant, ce mécanisme n’est pas très utile.
Les « modifiers »
Le modifier « redirect » :
Ce modifier permet de remplacer le SPF record de votre domaine par un autre.
« v=spf1 redirect:autre_domaine.be »
Si cet « autre_domaine.be » n’a pas de record SPF, le résultat est « unkown » (inconnu)
Si cet « autre_domaine.be » a un record SPF, ce sont les définitions de ce record SPF qui sont utilisées pour vérifier si le mail provient d’une machine valide.
Le modifier « exp » :
exp=<domaine>
Ce modifier « exp » permet d’indiquer un texte que l’expéditeur du mail verra. Vous pouvez ainsi diriger l’expéditeur vers un domaine (un site Web) où vous pouvez indiquer les raisons du blocage de son mail et la façon de résoudre ce blocage.
Il reste maintenant à faire quelques exemples.
Ce sera encore le but de mon prochain billet ![]()




















[...] « L’Europe signe “l’arrêt de mort de la riposte graduée” Sender Policy Framework : Record SPF : définition et syntaxe [...]
29 septembre 2008 at 0:02