SPF - Sender Policy Framework
Par Yoann le jeudi, 19 avril 2007, 12:49 - L1nuX and c0 - Lien permanent
Le principe de SPF (Sender Policy Framework) est d'intéroger le serveur DNS du domaine de l'émetteur du mail pour lui demander le champ TXT associé au domaine. Ce champ TXT dans le cadre de SPF doit contenir la liste des serveurs authorisés à envoyer des emails pour le domaine en question. De cette manière le serveur destinataire peut s'assurer que l'email a bien été emis par un serveur "authorisé à émettre".
Mise en place coté émetteur
SPF est très facile a mettre en place pour un site émetteur. Il suffit d'ajouter un enregistrement DNS TXT associé au domaine en question.
Petit exemple :
Une entreprise est disptaché sur 3 sites (A, B et C)
- Sur le site A plusieurs machines dont les ip sont dans le blocs 212.11.12.240/28 sont suceptible d'envoyer des mails
- Sur le site B une seul machine dont l'ip est 212.11.22.13 est suceptible d'envoyer des mails
- Sur le site B une seul machine dont l'ip est 212.11.23.13 est suceptible d'envoyer des mails
Information importante : Aucuns mails ne peux être envoyés depuis d'autre machine, (meme un serveur SMTP d'un FAI public)
Il nous suffit alors d'ajouter une ligne dans notre fichier de zone DNS
domaine.com. 300 IN TXT "v=spf1 ip4:212.11.12.240/28 ip4:212.11.22.13 ip4:212.11.23.13 -all"
Pour vous aidez à adpater le contenu du champ TXT pour pourrez vous aidez du SPF Setup Wizard et consulter la liste des directives
Mise en place coté destinataire
Pour vérifier qu'un message reçu est bien émis par un serveur habilité, il faut coupler SPF au niveau du MTA ou bien en activant la vérification SPF dans un outil anti-spam tel que spamAsssassin.
Je vous decris si dessous la procédure pour coupler SPF au MTA postfix.
Télécharger l'archive postfix-policyd-spf-perl.tar.gz
wget http://www.openspf.org/source/software/postfix-policyd-spf-perl.tar.gz?view=tar -O /tmp/postfix-policyd-spf-perl.tar.gz cd /tmp/ tar zxvf postfix-policyd-spf-perl.tar.gz mv /tmp/postfix-policyd-spf-perl/trunk/postfix-policyd-spf-perl /etc/postfix/spf-policy.pl chmod 777 /etc/postfix/spf-policy.pl
Installation des librairies Perl necessaire
apt-get install libversion-perl libnetaddr-ip-perl
Nous manque maintenant la librairie perl Mail::SPF::Query.
Si vous êtes sous debian Etch, un package est disponible :
apt-get install libmail-spf-query-perl
Si vous êtes sous Debian Sarge, ou autres distribution n'incluant pas cette librairie, vous pouvez l'installer via CPAN :
cpan -i Mail::SPF
Les packages nécessaire à l'utilisation de cpan sont :
apt-get install gzip tar unzip make lynx wget ncftp ftp
Editer le fichier /etc/postfix/master.cf :
spfpolicy unix - n n - - spawn user=nobody argv=/usr/bin/perl /etc/postfix/spf-policy.pl
Editer le fichier /etc/postfix/main.cf :
check_policy_service unix:private/spfpolicy
smtpd_recipient_restrictions =
reject_unauth_destination
reject_unknown_recipient_domain
reject_unverified_recipient
check_policy_service unix:private/spfpolicy
Commentaires
J'utilise le SPF depuis pas mal de temps déjà, je recommande à tous ceux qui le peuvent, dans un premier temps, de déclarer leurs enregistrements SPF...mais avec une mise en garde importante :
-ne faites pas d'erreurs et anticipez
Je m'explique :
-en cas d'erreur, vous serez dans l'incapacité d'envoyer des mails aux MTA faisant ce contrôle-->paralysie de la messagerie de votre entreprise
-en cas d'erreur, la mise à jour de voter correction pourra être très longue (cela dépend de la fréquence de rafraîchissement de TOUS les DNS qui sont dans la chaîne entre vous et les autres entreprises)
-anticipez, car dans le cas où, par exemple, vous voudriez rajouter un MTA, il ne pourra fonctionner qu'une fois les DNS à jour, prévoyez par exemple certains enregistrements A en plus dans votre champs TXT
Mais une fois tout en place, plus personne ne pourra envoyer de mail en votre nom depuis des serveurs non-autorisés (fini le spoofing) vers des serveurs faisant la vérification SPF.
Je profite de ce billet pour poser une question, quelqu'un a-t'il déjà fait fonctionner le SRS sur postfix ?
merci pour ce tutorial simple pour postfix mais il y a une petite faute :
check_policy_service unix:private/spfpolicy
est à remplacer par check_policy_service unix = private/spfpolicy