anti-spam
03/07/2006
Postgray avec Postfix
Le graylisting facile.
Cet article (lâchement repompé en partie sur HowtoForge), montre comment on peut implémenter un système de graylisting en moins de 5 min sous FreeBSD, à l'aide de Postgrey (à condition que Postfix soit déjà installé).
Pour ceux qui n'ont pas encore Postfix d'installé, je les renvoie vers Postfix SMTP AUTH (and TLS) HOWTO, c'est le maître Jedi qui m'a tout appris. C'est un tutoriel pour Linux, mais c'est trivial d'adapter à FreeBSD.
Petite explication du graylisting, avant de commencer. Le graylisting, c'est une méthode de filtrage de spams. Mais contrairement aux white et blacklists, qui sont des listes figées et à entretien manuel, la graylist est adaptative. Pour cela, elle utilise une fonction du protocole SMTP qui permet de signaler au serveur de courrier expéditeur qu'on ne peut pas recevoir de courrier pour l'instant. Et comme indiqué dans le protocole, le serveur de courrier reviendra peu après pour réessayer la remise. Notre serveur n'acceptera de courrier de celui-ci que si un certain délai (par défaut 5 minutes) s'est écoulé depuis la première tentative.
Or les spammeurs n'utilisent pas de vrais serveurs de courrier, et ne réessaient pas l'envoi de leurs spams. Du coup, ces derniers n'arrivent jamais dans les boîtes des utilisateurs ! Simple et efficace.
Le problème de ce système est que ça introduit un délai supplémentaire dans la remise du courrier électronique, du temps d'attente avant acceptation du mail. On peu réduire le temps d'attente du graylist, mais cela pourrait réduire l'efficacité du système, si jamais un spammeur bombarde le serveur pendant plusieurs minutes (la probabilité est faible, cependant).
Autre inconvéniant, l'expéditeur du mail peut recevoir un message d'erreur comme quoi le serveur destinataire a refusé le message, alors qu'il a bien été transmis, avec seulement un peu de retard.
Passons à l'installation de Postgray et l'intégration à Postfix :
D'abord, installer Postgray par les ports :
$ portinstall postgray
Si tout se passe bien, Postgray est installé.
Sinon, il faut observer les messages pendant l'installation et résoudre en conséquence.
Maintenant, il faut le configurer pour qu'il démarre avec le système, on va l'activer dans /etc/rc.conf :
$ echo postgray_enable="YES" >> /etc/rc.conf
Lançons Postgray :
$ /usr/local/etc/rc.d/postgray.sh start
S'il n'y a pas d'erreurs rapportées, c'est bon, ça roule.
Sinon faut aller regarder dans les logs pour voir ce qui cloche.
Postgray est maintenant installé et lancé, mais il ne sert à rien pour l'instant, Postfix ne l'utilise pas. Configurons-le. Il faut éditer le fichier /usr/local/etc/postfix/main.cf. Dans ce fichier, il y a une section qui ressemble à ça :
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_invalid_hostname,
reject_rbl_client cbl.abuseat.org,
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination
C'est la section qui dit à Postfix ce que doit respecter les expéditeurs pour accepter du courrier. Je vais pas expliciter les paramètres ici (ceux de mon serveur), je vous renvoie au document cité plus haut qui concerne l'installation de Postfix.
Modifions la section comme suit :
smtpd_recipient_restrictions =
reject_non_fqdn_sender,
reject_non_fqdn_recipient,
reject_unknown_sender_domain,
reject_unknown_recipient_domain,
reject_invalid_hostname,
reject_rbl_client cbl.abuseat.org,
permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
check_policy_service inet:127.0.0.1:10023
On a donc ajouté la ligne check_policy_service inet:127.0.0.1:10023. Le nom du paramètre est assez explicite, on dit à Postfix de vérifier la politique de service, qui est disponible à l'adresse 127.0.0.1 (sur la machine locale), sur le port 10023 (port utilisé par défaut sous FreeBSD - peut-être défaut partout).
N'oubliez pas de mettre une virgule au paramètre d'avant, sinon ça marche pas.
Il reste à relancer Postfix :
$ postfix reload
Et voilà, en regardant les logs du service de courrier, vous devriez trouver des lignes comme celles-ci, maintenant :
Jul 3 11:41:49 annis postfix/smtpd[759]: NOQUEUE: reject: RCPT from mon-relai.mail.com[xxx.xxx.xxx.xxx]: 450 <toto@oo.com>: Recipient address rejected: Greylisted for 300 seconds (see http://isg.ee.ethz.ch/tools/postgrey/help/oo.com.html); from=<bozo@boo.com> to=<toto@oo.com> proto=ESMTP helo=<mon-relai.mail.com>
Le serveur mon-relai.mail.com a été placé en graylist pendant 5 minutes. Au bout de 5 minutes, la remise se fera normalement, et toto@oo.com recevra le mail de bozo@boo.com.
Et voilà, moins de spams en quelques minutes, c'est cool !
02/11/2004
"Ça marche pas très bien..."
On se crève le cul au boulot, et notre travail n'est pas reconnu...
Je me suis moulé le cul en cube la semaine dernière après mon retour d'Oléron pour installer un front-end anti-virus et anti-spam pour notre Exchange 2000. J'ai utilisé Postfix, AMaViSD-new, SpamAssassin et ClamAV. Une bonne petite journée à compiler, installer, configurer, et entraîner (avec 1300 spams issus d'une boîte aux lettres hautement spammée chez nous), et peaufiner (à combien de score de spam on jette ?, quelles extensions on scanne ?, etc...).
Et j'étais super content ce week-end, en regardant le contenu des pires boîtes réceptrices de spams, j'ai vu que j'avais réussi dans mon entreprise, à débarrasser notre organisation de près de 90 % du spam reçu (je dis ça au pif, mais un seul spam en un week-end dans une boîte qui en reçoit des dizaines chaque jour, ça fait bien 90 %, voire plus
). Et hop je colle une news dans l'intranet, un peu genre pub de lessive (avec des superlatifs de partout quoi). Mission accomplished.
Et ce matin, j'entends un collègue qui a parlé avec un de nos glorieux élus : "Hé, Machin il dit qu'il a entendu parler d'un truc sur le spam et qu'on devrait essayer, je lui dis que Chong Woo a déjà mis tout ça en place, mais il me répond que "ça marche pas bien"...
Ma réaction (à l'échelle) : "WHAT ?!"
Le pire, c'est que ce glorieux élu fait partie du top ten des spammés, et que justement, j'ai vérifié, il n'en a pas eu un seul pendant tout ce long week-end. PAS UN SEUL. Je saurai à l'avenir que ( "pas un seul spam" == "100 % d'efficacité" ) == "ça marche pas très bien".
D'ailleurs, en parlant d'Oléron, c'est encore plus fort : je disais avant qu'on avait agité des antennes à Oléron dans le vent. Bah le mec chargé de l'entretien (un connard confirmé) a appelé mon chef pour lui dire qu'on avait mobilisé ses gars (2 mecs, sympas, eux !) pour un "résultat presque nul" !
Mon chef l'a proprement engueulé, parce qu'il n'a aucune compétance pour évaluer le travail qu'on a fait. En plus, l'objectif principal, connecter le site à Oleane via LS et reconfigurer la tête de pont et le réseau interne, a été atteint avec succès. Mais bon, paraît que ce mec est un chiant fini et qu'il faut pas chercher.
C'est pas facile tous les jours, entre les "ça marche pas très bien" et "résultat presque nul", je me demande ce que je fais de la journée... Du surf ? P'têt bien, ouais...



