Depuis quelques temps j’ai rajouté SPF sur mon serveur DNS . En gros SPF est un mécanisme qui permet de définir qui peut envoyer des mails en fonction de vos noms de domaines .
En fonction de comment sera configuré votre serveur vous pourrez oui ou non rejeter ou accepter le mail .
L’installation est relativement simple rien de bien compliqué comme dab
-
/*
-
apt-get install postfix-policyd-spf-python (Il existe le même paquet mais en perl)
-
*/
Commencer par ajouter les serveurs autorisés à envoyer des mails pour votre/vos domaines.
-
/*
-
vi votre-zone-dns
-
IN TXT “v=spf1 ip4:x.x.x.x -all”
-
*/
Il faut par la suite modifier le fichier master.conf
-
/*
-
policyd-spf unix – n n – 0 spawn
-
user=nobody argv=/usr/bin/python /usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf
-
*/
On voit qu’un fichier de conf est appelé policyd-spf.conf . Voyons un peu ce qu’il nous cache
-
/*
-
debugLevel = 1
-
defaultSeedOnly = 1
-
HELO_reject = SPF_Not_Pass
-
Mail_From_reject = Fail
-
PermError_reject = False
-
TempError_Defer = False
-
skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0//104,::1//128
-
*/
- debugLevel = 1 : Il y a 4 niveau de debug
- defaultSeedOnly = 1 : Quand à 1 alors le SPF est pleinement fonctionnel et permet de rejeter les messages
- HELO_reject = SPF_Not_Pass : le mail est rejeté si le retour sur SPF sur le HELO n’est pas pass/none/Tempfail
- Mail_From_reject = Fail : Mail est rejeté si SPF retourne fail
- PermError_reject = False :
- TempError_Defer = False :
- skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0//104,::1//128 : Adresse pour laquelle il n’y a pas de vérification de SPF
Vous pouvez consulter la documentation plutôt claire /usr/share/doc/postfix-policyd-spf-python/policyd-spf.conf.commented .
Maintenant que notre conf est ok il reste plus qu’à modifier le main.cf
-
/*
-
smtpd_recipient_restrictions =
-
…
-
reject_unauth_destination
-
check_policy_service unix:private/policyd-spf
-
…
-
*/
Dans la donc est bien spécifié ceci :
NOTE: Specify check_policy_service AFTER reject_unauth_destination or else your system can become an open relay.
Il vous suffit plus qu’à faire un petit reload de votre conf
-
/*
-
Te fous pas de moi tu sais faire ca non :)
-
*/
Dans votre fichier de logs vous pourrez voir cette ligne
-
/*
-
***** policyd-spf[21125]: None; identity=mailfrom; client-ip=74.125.83.51; helo=mail-ee0-f51.google.com; envelope-from=*****@gmail.com; receiver=*****@robertain.com
-
***** policyd-spf[21125]: Pass; identity=mailfrom; client-ip=74.125.83.51; helo=mail-ee0-f51.google.com; envelope-from=*****@gmail.com; receiver=*****@robertain.com
-
*/
Vous retrouverez ceci également dans vos entêtes mails.
Exemple de message rejeté par spf
-
/*
-
Feb 17 22:56:40 mq policyd-spf[21759]: None; identity=helo; client-ip=124.195.156.119; helo=c156119.net124195.cablenet.ne.jp; envelope-from=nroberts@abf.com; receiver=*****@robertain.com
-
Feb 17 22:56:40 mq policyd-spf[21759]: Fail; identity=mailfrom; client-ip=124.195.156.119; helo=c156119.net124195.cablenet.ne.jp; envelope-from=nroberts@abf.com; receiver=*****@robertain.com
-
Feb 17 22:56:40 mq postfix/smtpd[21748]: NOQUEUE: reject: RCPT from c156119.net124195.cablenet.ne.jp[124.195.156.119]: 550 5.7.1 <*****@robertain.com>: Recipient address rejected: Message rejected due to: SPF fail – not authorized. Please see http://www.openspf.org/Why?s=mfrom;id=nroberts@abf.com;ip=124.195.156.119;r=*****@robertain.com; from=<nroberts@abf.com> to=<*****@robertain.com> proto=ESMTP helo=<c156119.net124195.cablenet.ne.jp>
-
Feb 17 22:56:41 mq postfix/smtpd[21748]: lost connection after DATA from c156119.net124195.cablenet.ne.jp[124.195.156.119]
-
Feb 17 22:56:41 mq postfix/smtpd[21748]: disconnect from c156119.net124195.cablenet.ne.jp[124.195.156.119]
-
*/
On voit bien que lors de la vérification du from le check passe en “fail” . Mais pourquoi il suffit de regarder les ips autoriser à envoyer des mails pour le domaine abf.com
-
/*
-
dig abf.com TXT +short
-
“v=spf1 ip4:159.204.59.0/24 ip4:159.204.7.7 ip4:159.204.150.100 a:test.data-tronics.com mx:data-tronics.com include:data-tronics.com -all”
-
*/
Ce qui permet d’avoir le retour fail est le “-all” qui n’est pas la même chose que “~all” . SPF prends peut prendre certains paramètres : Extrait de la RFC 4408
-
/*
-
“+” Pass
-
“-” Fail
-
“~” SoftFail
-
“?” Neutral
-
*/
SPF associé à DKIM est une excellente façon de lutter contre le spam mais cela ne vas pas éradiquer le spam de vos boites mails . La lutte contre le SPAM est un combat de tous les instants . Donc prenez les armes (évitez les aka47 et les uzis)