Sender Policy Framework | RFC 7208

Sender Policy Framework (SPF) devient une norme sous la RFC7208 remplaçante de la RFC4408 qui était encore expérimental.

Mais a quoi sa sert SPF ? A tout simplement réduire l’usurpation d’adresse mail.

Oui car il est facile d’usurper l’identité d’un mail :) Sender Policy Framework Exemple

C’est la ou SPF est vraiment utile car comment savoir si la personne qui a envoyé ce mail est le bon, ou plutôt est que le serveur qui a envoyé ce mail est autorisé a envoyé des mail sous le domaine elysee.fr ?

a première vue (si on oublie le sujet et le texte) Mr Michu pourrait s’y faire prendre mais quand on regarde le code source du mail:

Delivered-To: XXXXXX@gmail.com
Received: by 10.60.72.195 with SMTP id f3csp153292oev;
        Wed, 7 May 2014 07:47:51 -0700 (PDT)
X-Received: by 10.195.18.8 with SMTP id gi8mr2367362wjd.75.1399474070824;
        Wed, 07 May 2014 07:47:50 -0700 (PDT)
Return-Path: <president@elysee.fr>
Received: from mail1.anst.com.cn (mail1.anst.com.cn. [218.4.5.238])
        by mx.google.com with ESMTPS id em16si6995802wjd.244.2014.05.07.07.47.50
        for <XXXXX@gmail.com>
        (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);
        Wed, 07 May 2014 07:47:50 -0700 (PDT)
Received-SPF: fail (google.com: domain of president@elysee.fr does not designate 218.4.5.238 as permitted sender) client-ip=218.4.5.238;
Authentication-Results: mx.google.com;
       spf=hardfail (google.com: domain of president@elysee.fr does not designate 218.4.5.238 as permitted sender) smtp.mail=president@elysee.fr
Received: from mail1.anst.com.cn (localhost [127.0.0.1])
	by mail1.anst.com.cn (8.14.4/8.14.4/Debian-4) with ESMTP id s47ENjbW016549
	for <XXXXXX@gmail.com>; Wed, 7 May 2014 16:23:45 +0200
Received: (from root@localhost)
	by mail1.anst.com.cn (8.14.4/8.14.4/Submit) id s47ENjgg016548
	for XXXXXX@gmail.com; Wed, 7 May 2014 16:23:45 +0200
Date: Wed, 07 May 2014 16:23:45 +0200
From: president@elysee.fr
To: XXXXXX@gmail.com
Subject: Mr Hollande demande votre aide pour spf

Je m’excuse d’avance pour l’IP Chinoise qui a était malheureusement tirée au sort, faut bien que je cache le vrais serveur qui a envoyé ce mail ;)

Mais ici on peut voir un paragraphe qui est intéressant

Received-SPF: fail (google.com: domain of president@elysee.fr does not designate 218.4.5.238 as permitted sender) client-ip=218.4.5.238;
Authentication-Results: mx.google.com;
       spf=hardfail (google.com: domain of president@elysee.fr does not designate 218.4.5.238 as permitted sender) smtp.mail=president@elysee.fr

On voit que le serveur de Google à entamé une procédure de vérification et on peut voir que l’ip 218.4.5.238 n’est pas autorisé à envoyé de mail sous le domaine de elysee.fr (HARDFAIL domain of president@elysee.fr does not designate 218.4.5.238 as permitted sender) , MAIS COMMENT QUI SAIS GOOGLE ?

Enfaîte grâce a votre nom de domaine comme elysee.fr on peut donner la liste des serveur qui sont autorisé à envoyé des mail sous ce nom de domaine. Est voici le champs SPF du domaine de elysee.fr

elysee.fr. 86400 IN TXT « v=spf1 mx ip4:62.160.71.251 ip4:84.233.174.57 -all »

Donc le champs MX de elysee.fr et les ip 62.160.71.251 , 84.233.174.57 sont autorisé, et le reste est interdit

C’est pour cela que l’ip : 218.4.5.238 renvoi un HARDFAIL car elle n’est pas egale au champs MX de elysee.fr ni au deux adresse IP spécifié. Je vous rassure Google marque le mail en SPAM ;)

Récapitulatif des possibilité de SPF

Tout d’abord voila toute les possibilité d’un champ SPF qui doit être dans un champ TXT commencent par : v=spf1,
[spoiler show= »Choisir son champs DNS TXT »]

Si vous n’envoyer pas de mail avec des sous domaine ou que le serveur qui envoie les mail et le même pour le domaine racine et les sous domaine alors crée un champs TXT avec une wildcard TXT *.silentt.fr, cela permet que si un usurpateur de mail envoi un mail avec contact@lol.silentt.fr, les règle SPF sont quand même appliqué.

silentt.fr. 86400 IN TXT « v=spf1… »= Applique les règles SPF seulement sur les mail @silentt.fr.

*.silentt.fr. 86400 IN TXT « v=spf1… » = Applique les règles SPF sur les mail avec un sous domaine de silentt.fr ex: contact@lol.silentt.fr.

http://tools.ietf.org/html/rfc7208#section-3.5

[/spoiler]

[spoiler show= »Champs Ipv4&6″]On peut faire inscrire une ipv4 « v=spf1 ip4:88.88.88.88 », une ipv6 « v=spf1 ip6:ip6 » ou même un CIDR d’ip « v=spf1 ip4:88.88.88.0/24 »
http://tools.ietf.org/html/rfc7208#section-5.6
[/spoiler]
[spoiler show= »Champs A DNS »]On peut faire inscrire un champs DNS de type A comme « v=spf1 a:mail.silentt.fr » donc si mail.silentt.fr = 78.78.78.78

Si le serveur d’envoi des mail est 78.78.78.78 alors OK
Si le serveur d’envoi des mail est 87.87.87.87 alors NOK

Si dans sont champs DNS on ecris « v=spf1 a » tout seul il vérifie le domaine racine silentt.fr je peut aussi précisé un domaine autre que le mien comme « v=spf1 a:elysee.fr »

tools.ietf.org/html/rfc7208#section-5.3[/spoiler]

[spoiler show= »Champs MX DNS »]On peut aussi faire inscrire un champs DNS de type MX comme « v=spf1 mx:silentt.fr » et il fera une requête DNS pour récupérer les noms dns et les IP du champs MX de silentt.fr, si on ecris « v=spf1 mx » seul il regarde les champs dns du domaine racine donc silentt.fr, « v=spf1 mx » = « v=spf1 mx:silentt.fr » sauf si vous êtes un serveur autorité d’un sous domaine, je peut aussi précisé un domaine autre que le mien comme « v=spf1 mx:elysee.fr »

tools.ietf.org/html/rfc7208#section-5.4[/spoiler]

[spoiler show= »Champs PTR DNS »]On peut faire inscrire un champs DNS de type PTR comme « v=spf1 ptr:silentt.fr » cela permet d’autorisé une ip qui a une reverse comprenant le domaine silentt.fr, vous allé me dire mais n’importe qui peut associé une reverse d’une ip a un domaine, sauf que SPF ne s’arrête pas la, car il va vérifier le champs A de la reverse, en détail:

ip : 218.4.5.238 -> PTR -> mail.silentt.fr -> OK (Serveur DNS(Menteur) chinois qui a répondu)
mail.silentt.fr -> A -> 78.78.78.78 (Serveur DNS OVH qui a répondu) -> 78.78.78.78 NOT EQUAL 218.4.5.238 -> FAIL

Si il n’y a pas de champs A qui correspond alors FAIL.

Dans la RFC il est spécifier qu’il ne faut l’utiliser que en dernier recours car le système de vérification est lent et consomme de la bande passante et de l’énergie sur les serveur racine

http://tools.ietf.org/html/rfc7208#section-5.5[/spoiler]

[spoiler show= »Inclure la configuration SPF d’un autre domaine »]On peut aussi faire silentt.fr. 86400 IN TXT « v=spf1 include:elysee.fr » sa veut dire que silentt.fr inclue le champs SPF de elysee.fr et donc que les serveurs de elysee.fr sont autorisé a envoyé des émail avec le domaine silentt.fr (TROL).

tools.ietf.org/html/rfc7208#section-5.2[/spoiler]

[spoiler show= »Tout »]On au aussi l’option « all » qui désigne tout le reste ou si aucune option n’a précédemment été écrite alors c’est tout

tools.ietf.org/html/rfc7208#section-5.1[/spoiler]


Tout ces champs peuvent etre suivie de – ou + « par défaut et optionel + »

v=spf1 +include:silentt.fr -all = v=spf1 include:silentt.fr -all

donc je peut faire « v=spf1 -include:elysee.fr all » ou ici les serveur d’envoi de l’elysee.fr sont interdit mais j’autorise tout le reste, ce qui est une configuration absurde biensur ;)

mais on peut faire service-public.fr. 86400 IN TXT « v=spf1 +include:elysee.fr »

Comme sa l’admin réseaux s’emmerde pas modifié tout les champs dns de tout les nom de domaine qu’il est attaché, si il change l’adresse ip des serveur de mail il le modifie sur le champs SPF de elysee.fr et basta les autres suivront le mouvement, il faut précisé aussi que sa s’applique seulement si les serveur d’envoi pour elysee.fr et service-public.fr sont les même.

Il ya aussi d’autre comme « ? » qui indique neutre et « ~" qui indique softfail sa veut dire qu’il est accepté mais il faut le marquer

Je trouve que « ? » et « ~ » ne serve pas a grand chose, ou au simple debug test.

http://tools.ietf.org/html/rfc7208#section-4.6.2


Pour ma part ce sont les serveur de OVH (il on tous un ndd avec mail-out.ovh.net ou mail.ovh.net) , MailJet (il on tous un ndd avec mailjet.com) et un serveur a moi qui envoie des email a moi même pour les tache cron.

Mon champs spf est celui ci:

silentt.fr. 86400 IN TXT « v=spf1 ptr:mailjet.com ptr:mail-out.ovh.net ptr:mail.ovh.net ptr:silentt.fr -all »

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.