DNS/SPF - Spam : limitez l'usurpation de vos domaines

De nos jours, les pirates n'hésitent pas à usurper des noms de domaine pour envoyer du spam. Outre le fait d'embêter les filtres cela amène parfois à un blocage pur et simple du domaine incriminé, ce qui n'est pas négligeable dans un contexte professionnel : altération et blocage des communications ... Une norme expérimentale existe depuis 2006 pour limiter cet impact : Sender Policy Framework (SPF), RFC 4408.

Cette norme n'est autre qu'une entrée DNS qui va permettre de dresser une liste des adresses IP autorisées ou non à envoyer du courriel pour un domaine donné.

De manière plus détaillées, du type TXT (pour la rétrocompatibilité) ou SPF, cette entrée se présente sous cette forme (exemple avec devaproxis.fr) :

devaproxis.fr.          86400   IN      TXT     "v=spf1 +a +mx ~all"

Un ensemble (exemple : +mx:192.168.23.12) comprend une action (ici, +), un sélecteur (ici, mx) et une valeur facultative (ici, 192.168.23.12).

Selon la norme, nous retrouvons 4 actions :

  • + : autorisé (pass)
  • ? : neutre (neutral)
  • ~ : suspect (soft fail)
  • - : interdit (fail)

Ces actions sont à utiliser avec une liste de sélecteurs. En voici quelques uns :

  • a : se réfère aux enregistrements DNS de type A
  • mx : se réfère aux enregistrements DNS de type MX
  • ip4 : se réfère à une adresse IPv4
  • ip6 : idem, pour une adresse IPv6
  • all : désigne tout

La valeur est facultative pour les sélecteurs a et mx, auquel cas le domaine courant est sélectionné de manière implicite.

Ce n'est pas clair ? Petite traduction de l'exemple :

  • +a : autorise toutes les entrées DNS de type A du domaine devaproxis.fr (utile pour les serveurs web)
  • +mx : autorise toutes les entrées DNS de type MX du domaine devaproxis.fr (utile, non ? :))
  • ~all : n'autorise pas (soft fail) les autres adresses IP envoyant du courriel au nom de devaproxis.fr

Vous pouvez, bien entendu, mélanger les sélécteurs à votre guise. Autre exemple :

domaine1.org IN v=spf1 +a +a:domaine2.com +mx +ip4:1.1.1.1 ~ip4:8.4.4.8 -all

Dans ce cas, nous autorisons toutes les entrées DNS de type A des domaines domaine1.org et domaine2.com ainsi que les entrées DNS de type MX et l'adresse IP 1.1.1.1 à envoyer du courriel au nom de domaine1.org. Cependant, nous n'autorisons pas (soft fail) l'adresse IP 8.4.4.8 et nous rejetons toutes les autres adresses IPs.

Tout comme pour le spam, la norme SPF en action se présente sous la forme d'un marquage dans l'en-tête d'un email, calculé par le serveur à la réception. Ainsi, libre à l'administrateur d'appliquer différentes règles : tout marquer mais laisser passer, rejeter le 'fail' ou encore rejeter tout ce qui ne passe pas ... Pour exemple, Gmail marque les mails mais ne semble pas filtrer.

Si je n'ai pas été assez (ou pas du tout ...) clair ou si vous souhaitez de plus amples informations, visitez cette page.