Linux:SPF et Postfix
Un article de Djjnet.
Cette documentation est basée sur une installation sur Debian Etch.
Le package libmail-spf-query-perl amène la version 1.06 de postfix-policyd-spf-perl.
SPF en quelques mots
SPF est un mécanisme de lutte antispam. Son principe réside dans la mise en place d'un enregistrement TXT au niveau de la zone DNS d'un domaine. Dans cet enregistrement, il faut indiquer la liste des serveurs autorisés à envoyer des emails en tant qu'expéditeur pour ce domaine.
Ensuite, il est nécessaire de mettre en place un outil de vérification de cet enregistrement DNS au niveau des serveurs recevant les emails afin qu'il vérifie si le serveur émettant un email est bien autorisé.
L'enregistrement SPF pour notre domaine est le suivant :
dj-j.net. IN TXT "v=spf1 a mx ptr a:mutua1.itenec.net -all"
Plus d'informations sur http://www.openspf.org/.
Mise en place de la vérification SPF sous postfix
- D'abord installer le package suivant :
apt-get install libmail-spf-query-perl
- Copier le fichier /usr/share/doc/libmail-spf-query-perl/examples/postfix-policyd-spf dans le dossier /etc/postfix/
- Ajouter dans le fichier /etc/postfix/master.cf :
spfpolicy unix - n n - - spawn
user=nobody argv=/usr/bin/perl /etc/postfix/postfix-policyd-spf
- Modifier les restrictions smtpd pour ajouter un check_policy_service dans /etc/postfix/main.cf ainsi :
smtpd_recipient_restrictions = permit_mynetworks permit_sasl_authenticated reject_unauth_destination reject_unlisted_recipient reject_non_fqdn_recipient check_policy_service unix:private/spfpolicy
- Ajouter une augmentation du temps d'exécution autorisé dans /etc/postfix/main.cf
#Augmentation du temps d'execution de spfpolicy avant d'etre tue par spawn spfpolicy_time_limit = 3600
- Recharger la configuration postfix
postfix reload
Problème dans le cas de l'utilisation d'un serveur secondaire relayant les emails
Un problème apparaît lorsqu'un serveur de mail secondaire est utilisé. En effet, le serveur secondaire reçoit lui aussi des emails pour un domaine que vous hébergez. Lorsque celui-ci effectue la vérification SPF, aucun problème. Par contre, lorsque le serveur de mail secondaire transfert l'email au serveur primaire, le serveur primaire qui lui aussi vérifie le SPF croie que le mail est envoyé par le serveur secondaire et refuse l'email car l'adresse du serveur secondaire n'est pas listé dans l'enregistrement SPF. Il faut alors autoriser sur le serveur primaire le serveur secondaire.
J'ai ainsi modifié le script perl sur le serveur primaire :
Sous :
my $DEFAULT_RESPONSE = "DUNNO";
Ajout de :
my $authorized_mx = "213.186.62.175";
Sous :
sub sender_permitted_from {
local %_ = @_;
my %attr = %{ $_{attr} };
Ajout de :
if ( $authorized_mx =~ /$attr{client_address}/ ) {
syslog(info=>"%s: SPF : %s in authorized_mx",
$attr{queue_id}, $attr{client_address});
return "DUNNO";
}
A la variable my $authorized_mx il faut indiquer l'IP du serveur de mail secondaire.
Il n'est pas nécessaire de mettre la version modifiée sur le serveur secondaire.


