Postgrey : filtrage de mails par "liste grise"

Postgrey est un des outils de la lutte anti-spam de l'AUF.

Principe

Postgrey est une implémentation du Greylisting (listes grises). C'est un outil pour le moment très efficace, afin de bloquer au niveau du serveur de messagerie, une quantité significative de pourriels sans pour autant utiliser de méthodes statistiques ou heuristiques lourdes et sujettes à des erreurs.

La méthode est très simple. Pour chaque message, on n'analyse que trois informations désignées sous le terme de triplet dans le reste du document :

Quand un message (triplet [IP relais, @émetteur, @destinataire]) arrive sur le MX faisant du Greylisting, s'il s'agit d'un nouveau triplet (absent de la base de données locale), le message est rejeté temporairement pour une durée limitée (C'est le délai pendant lequel postgrey va refuser le message identique pour éviter le double envoie par exemple, le message et tout autre présentant le même triplet. (en pratique, dans sa configuration par défaut, postgrey ne tient compte que des trois premiers octects de l'adresse IP)

Si le message est reçu de nouveau après le délai configuré sur le MX, il est accepté (cela signifie qu'un véritable serveur SMTP respectant le protocole SMTP se situe à l'autre extrémité de la communication) et le triplet est mis à jour dans la base.

Qui plus est, avec la prolifération des virus basés sur le courrier électronique, le Greylisting s'est aussi révélé particulièrement efficace sur ce plan, puisque le moteur SMTP des virus ne gère pas souvent la réémission. Ces virus étant plutôt volumineux, .

Le coût de ce filtrage, en termes de ressources locales, est minime. Si l'on utilise une base locale afin de stocker les triplets et quelques autres données supplémentaires, le Greylisting ne provoque aucun échange supplémentaire sur le réseau. Les gains en bande passante et en traitement sont notables si on les compare aux méthodes classiques de contrôle et nettoyage après réception d'un message.

Il y a une conséquence visible, qui peut être considérée comme positive ou négative selon les situations : on ne peut pas savoir exactement quand va revenir le message , ça dépend de la config de l'émetteur et même des relais sur le chemin, parfois ça peut prendre plusieurs heures ... (si c'est des sites sûrs, on pourra les mettre dans la whitelist).

Le plus intéressant est que, puisqu'il n'y a jamais un rejet permanent de message, dès que l'agent d'émission respecte les RFCs, aucun message ne devrait se perdre. Il n'y a pas de faux positifs.

Attention : si vous avez plusieurs MX pour votre domaine, il faut activer Postgrey sur tous les MX ! (Note de J. : il faudra aussi préciser ce qui se passe pour les domaines utilisant ce système uniquement sur le MX principal, mais pas sur les secondaires.

Configuration

Comme d'habitude, la documentation est à cette endroit: /usr/share/doc/postgrey

L'installation se fait par :

$aptitude install postgrey

Postgrey, par défaut, va avoir deux listes blanches d'expéditeurs et de destinataires de mail. Il ne vaut mieux pas les modifier afin de ne pas gêner les mises à jour.

On va indiquer à Postfix certains serveurs de confiance, pour cela, on crée un fichier /etc/postfix/postgrey-client-ok ainsi :

# smtp montreal
199.84.140.5    OK
# smtp paris
81.80.122.2     OK
81.80.123.194   OK

Postfix n'utilisera pas Postgrey pour les messages provenant de ces serveurs. Vous pouvez ajouter d'autres IP à cette listes (par exemple ceux de vos partenaires très habituels, des FAI nationaux, etc) ou bien des noms de domaine afin de ne pas faire de filtrage Postgrey sur tel ou tel domaine (par exemple pour des domaines que vous hébergez et qui ne veulent pas de ce filtrage).

NB : certains serveurs SMTP ne supportent pas Postgrey, c'est à dire qu'ils ne renverront jamais le message une deuxième fois après avoir été mis en "quarantaine" par Postgrey. Pour résoudre de problème (de plus en plus rare, espérons) il faut ajouter ces serveurs dans /etc/postfix/postgrey-ok

On indique ensuite à Postgrey une liste de domaine a ne pas filtrer en tant qu'expéditeur: /etc/postfix/postgrey-sender-ok

# ajouter ici les domaines à ne pas filtrer avec Postgrey en tant qu'expéditeurs
# exemple :
#  apefe.sn OK

Si on retire le # de la dernière ligne, cela signifiera qu'aucun mail provenant d'une adresse truc@apefe.sn ne sera filtré par Postgrey (plus exactement : Postfix n'utilisera pas Postgrey pour ces adresses d'expéditeur).

On compile les deux tables du dessus:

postmap postgrey-client-ok
postmap postgrey-sender-ok

On demande à Postfix d'utiliser Postgrey.

Partie à rajouter dans le fichier de configuration de Postfix : /etc/postfix/main.cf

smtpd_recipient_restrictions =
        permit_mynetworks,
        permit_sasl_authenticated,
        reject_unauth_destination,
        check_client_access  hash:/etc/postfix/postgrey-client-ok,
        check_sender_access hash:/etc/postfix/postgrey-sender-ok,
        check_policy_service inet:127.0.0.1:60000

Redémarrer Postfix.

/etc/init.d/postfix reload

Suivre l'évolution dans les logs, vous devez voir Postgrey qui refuse des mails pour une durée de 300 secondes et les accepter lors de leur second envoi. Soit vous pouvez faire ainsi:

/usr/bin/postgreyreport < /var/log/mail.log

NB : Quand vous venez d'installer Postgrey, quasiment tous les mails reçu seront refusés pendant 5 minutes ! C'est normal, c'est comme ça que fonctionne Postgrey (relisez le début de la page en entier ;) )

Par défaut la base de données est stockée dans /var/lib/postgrey. Elle prend au fil des jours une taille assez volumineuse. Pour éviter des messages du genre partition full, Postgrey enlève automatiqement les enregistrements les plus vieux (plus de 30 jours par défaut). Merci Postgrey !


CatégorieLogiciel CatégorieRecommandationsARI

Postgrey (dernière édition le 2008-09-19 10:18:12 par ChristopheVillemer)