Postgrey

Un article de Le wiki de 2 noisettes - noisette.ch.

Sommaire

Introduction

Postgrey est un système de listes grises, c'est-à-dire de refus temporaire de mails afin de vérifier que l'expéditeur est un serveur mail RFC compliant.

Installation

On suppose que Postfix est déjà installé sur le serveur.

L'installation est très simple :

emerge -av postgrey

Modifier le fichier /etc/conf.d/postgrey en fonction des préférences (notamment passer par un socket unix plutôt que inet), ajouter postgrey au démarrage (rc-update add postgrey default), et enlever les espaces dans POSTGREY_TEXT (un petit bug ...) et c'est dans la poche.

Configuration

Postgrey

Les fichiers de whitelists sont :

  • /etc/postfix/postgrey_whitelist_clients
  • /etc/postfix/postgrey_whitelist_recipients

Ils sont constitués d'adresses email ou de serveurs à ne pas greylister, une entrée par ligne, # étant le caractère de commentaire.

Postfix

Pour la config de postfix, éditer /etc/postfix/main.cf et ajouter à smtpd_recipient_restrictions : check_policy_service unix:private/postgrey. Dans mon cas ça donne :

smtpd_recipient_restrictions =
       permit_mynetworks
       reject_non_fqdn_recipient 
#      reject_unknown_recipient_domain  (only available to postfix >= 2.3)
       check_policy_service unix:private/postgrey
       reject_unauth_destination

L'ordre dans lequel les restcitions apparaissent sont très importantes. Par exemple si on place permit_mynetworks après check_policy_service unix:private/postgrey, tous les messages venant du réseau de confiance seront aussi greylistés

Tolérance aux fautes

La question suivante est : puisque postgrey tourne comme démon, que ce passe-t-il si le service tombe ?

La réponse est : le mail, ne pouvant pas être délivrer correctement, est laissé dans la file d'attente de l'expéditeur avec une mention du genre : "Réessayer plus tad, le serveur a actuellement un problème de configuration"

Relayer des domaines

Une petite astuce pour relayer des domaines est d'utiliser soit

relay_domains = domain1, domain2, ...

mais ca devient vite laborieux soit alors de mettre ces domaines à relayer dans /etc/postfix/transport,

domain1	smtp:[next_hope.domain1]
domain2 smtp:[next_hope.domain2]

Et dans main.cf, d'ajouter :

transport_maps = hash:/etc/postfix/transport
relay_domain = $transport_maps

et il suffit ensuite de modifier le fichier transport et de lancer postmap /etc/postfix/transport pour que les modifications soient prises en compte.

Problèmes collatéraux

Seul le délai supplémentaire introduit lors de l'envoi du permier mail pourrait poser quelques porblèmes, bien que celui-ci peut être corriger facilement pour les utilisateurs trop pressés en les ajoutant dans une whitelist. Mais bien entendu ils ne pourront plus bénéficier de la protection grise...

Conclusion

L'expérience nous montre que ce système réduit considérablement le nombre de spams, mais sans toutefois les supprimer complètement. Les serveurs smtp des zombis ou des virus devenant de toujours plus performant, on peut penser que cette technique deviendra obsolète dans le futur. Toutefois aujourd'hui elle rend de très bon services, notamment en période d'épidémie de virus, car postgrey permet de réduire considérablement la charge du serveur mail puisqu'il agit avant le passage à l'artillerie lourde de l'anti-spam et anti-virus.

Un autre avantage donné par le délai de temps supplémentaire accordé par ce système est que si on utilise postgrey conjointement à un système type DCC, quand le mail est renvoyé il y a de bonnes chances pour que suffisamment de serveurs aient reporté ce mail comme spam et qu'il se fasse blacklisé.

Image:Messstatus-week.png

Avant et après la mise en service de Postgrey

N'oubliez pas que le temps c'est de l'argent, et cela est d'autant plus vrai pour les spammeurs. Une simple méthode qui consiste à faire attendre la cible d'1 seconde avant de pouvoir délivrer le mail pourrait avoir des effets ravageurs contre les spammeurs...