Support des listes grises pour Postfix

Rédigé par Nicolas Sulek Aucun commentaire
Classé dans : Messagerie Mots clés : Postfix, Spam
Pour lutter contre les méchants spammeurs et les affreux virus transitant par mail, il existe un moyen assez original, les listes grises.

Principes de la liste grise


Les listes blanches contiennent les expéditeurs dont on accepte le courrier dans n'importe quelle condition, les listes noires sont, bien entendu, l'inverse, on refuse tout courrier provenant des expéditeurs précisés. La liste grise consiste à refuser tout mail quelque soit sa provenance pendant un temps donné. Mais c'est stupide ça ! Ben, en fait pas tant que ça.

Un serveur de SMTP normal, c'est-à-dire respectant les RFC du protocole SMTP, doit réessayer de transmettre son message quand il reçoit une erreur temporaire, alors que les moteurs SMTP utilisés par les virus ou par les spammeurs, en général, n'insistent pas. Pour eux, le message a bien été envoyé.

Prenons un exemple. Un message provenant smtp.free.fr arrive sur notre serveur SMTP, smtp.sulek.fr. smtp.sulek.fr va envoyer systématiquement une erreur temporaire de type 4xx à smtp.free.fr indiquant un refus temporaire, et un démon va noter que smtp.free.fr a essayé de nous contacter et garder cette information en mémoire pendant un temps donné.
smtp.free.fr, ayant un comportement normal de serveur SMTP, va réessayer de renvoyer ce message vers smtp.sulek.fr au bout d'un certain temps (assez variable, car dépendant des serveurs SMTP).
Le nouveau message arrive, on constate que smtp.free.fr a déjà essayé de nous contacter pour ce même message. Si le temps d'attente en liste grise est dépassé, on sort smtp.free.fr de la liste grise et on accepte son message. Si le temps d'attente n'est pas dépassé, on refuse encore le message.

Un message provenant de smtp.spam.com ou smtp.virus.com va être transmis à smtp.sulek.fr de la même manière, et smtp.spam.com ou smtp.virus.com va être mis en liste grise et recevoir le message d'erreur temporaire. Comme la plupart de ces serveurs SMTP sont buggués ou sont soucieux de performance, ils ne réessaieront pas de renvoyer le message, donc ils resteront en liste grise et leur message ne sera jamais accepté.

Bien sûr, la solution n'est pas parfaite, et il existe déjà des parades, mais elle est très élégante et ne nécessite pas de grosses modifications à faire sur Postfix.

Installation de Postgrey et configuration de Postfix


Pour implémenter les listes grises sous Postfix, j'ai utilisé le démon postgrey qui s'installe très facilement, et s'intègre très bien avec Postfix.
Il s'installe comme d'habitude avec :
apt-get install postgrey

Puis on modifie /etc/postfix/main.cf en rajoutant en dessous de smtpd_recipient_restrictions (restrictions d'accès que Postfix applique dans le contexte d'une commande RCPT TO) :
reject_unauth_destination,
check_policy_service inet:127.0.0.1:60000# vérifie en interrogeant
# Postgrey si le demandeur est sur liste grise

Il est possible de préciser aussi des listes blanches pour éviter que Postgrey ne mette tout le monde dans des listes grises. On peut ainsi faire des listes blanches pour les clients locaux ou distants, et par destinataire et expéditeur. Pour ça, il suffit de modifier les fichiers :
/etc/postgrey/whitelist_clients
/etc/postgrey/whitelist_clients.local
/etc/postgrey/whitelist_recipients
/etc/postgrey/whitelist_recipients.local

La syntaxe est très simple.

On peut aussi modifier le message d'erreur envoyé lors de la mise en liste grise. Par défaut, le message envoie une explication du passage en liste grise en indiquant l'URL http://isg.ee.ethz.ch/tools/postgrey/help.

De plus, il est conseillé de regarder les logs pour voir si le temps de mise en liste grise n'est pas trop long pour certains serveurs SMTP qui nous contactent. Par défaut, il est à 300s qui devrait convenir dans la plupart des cas.

Bien entendu, les listes grises n'enlèvent pas les filtres de spam ou les antivirus. C'est uniquement un moyen permettant d'alléger le serveur SMTP en refusant dès le départ des messages non désirés.

Les commentaires sont fermés.