Check SPF pour postfix

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

  1. /*
  2. apt-get install postfix-policyd-spf-python (Il existe le même paquet mais en perl)
  3. */

Commencer par ajouter les serveurs autorisés à envoyer des mails pour votre/vos domaines.

  1. /*
  2. vi votre-zone-dns
  3. IN TXT “v=spf1 ip4:x.x.x.x -all”
  4. */

Il faut par la suite modifier le fichier master.conf

  1. /*
  2. policyd-spf unix – n n – 0 spawn
  3. user=nobody argv=/usr/bin/python /usr/bin/policyd-spf /etc/postfix-policyd-spf-python/policyd-spf.conf
  4. */

On voit qu’un fichier de conf est appelé policyd-spf.conf . Voyons un peu ce qu’il nous cache

  1. /*
  2. debugLevel = 1
  3. defaultSeedOnly = 1
  4. HELO_reject = SPF_Not_Pass
  5. Mail_From_reject = Fail
  6. PermError_reject = False
  7. TempError_Defer = False
  8. skip_addresses = 127.0.0.0/8,::ffff:127.0.0.0//104,::1//128
  9. */
  • 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

  1. /*
  2. smtpd_recipient_restrictions =
  3. reject_unauth_destination
  4. check_policy_service unix:private/policyd-spf
  5. */

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

  1. /*
  2. Te fous pas de moi tu sais faire ca non :)
  3. */

Dans votre fichier de logs vous pourrez voir cette ligne

  1. /*
  2. ***** 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
  3. ***** 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
  4. */

Vous retrouverez ceci également dans vos entêtes mails.

Exemple de message rejeté par spf

  1. /*
  2. 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
  3. 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
  4. 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>
  5. Feb 17 22:56:41 mq postfix/smtpd[21748]: lost connection after DATA from c156119.net124195.cablenet.ne.jp[124.195.156.119]
  6. Feb 17 22:56:41 mq postfix/smtpd[21748]: disconnect from c156119.net124195.cablenet.ne.jp[124.195.156.119]
  7. */

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

  1. /*
  2. dig abf.com TXT +short
  3. “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”
  4. */

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

  1. /*
  2. “+” Pass
  3. “-” Fail
  4. “~” SoftFail
  5. “?” Neutral
  6. */

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) :)

Leave a Reply

Your email address will not be published. Required fields are marked *

*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>