Le spam en France

Le spam en France, c'est un vaste sujet. On pourrait gloser à loisir pendant des jours sur tel ou tel aspect du problème. Alors je vais juste donner un nombre : 96,1%. Ce nombre, c'est le taux de spam de la France pour le mois de juin. C'est à dire que dans notre beau pays, plus de 96% du trafic d'email sont du spam. C'est le record mondial (pour le mois de juin). Pour la même période, les États Unis d'Amérique sont à 78,4% et le Japon atteint un très enviable 67,1% de pollution. Et puis, si c'est MessageLab qui nous le dit, c'est forcément vrai (j'ironise, mais vu les logs de mes serveurs de messagerie, ils sont sûrement dans le vrai).

Je rappelle à toutes fins utiles que, si le cœur vous en dit, vous pouvez télécharger le "plug-in" signal-spam pour Mail, qui permet de déclarer votre spam à l'organisme paresseux nommé Signal Spam (c'est pas bien de se moquer, méchant patpro).

Utiliser la liste DROP de Spamhaus dans PF

Spamhaus, dont le travail quotidien consiste à maintenir des listes noires de spammers potentiels ou avérés, met aussi à disposition des utilisateurs une liste noire assez particulière : la liste DROP, pour Don't Route Or Peer.
Cette liste relativement courte regroupe les blocs d'adresses IP dont Spamhaus est certain qu'ils sont utilisés par des pirates ou des spammers professionnels.
Vous pouvez donc utiliser cette liste pour alimenter votre pare-feu, sans trop vous poser de question. Vous ne raterez aucun email légitime, ni aucun visiteur sur vos sites, si vous bloquez toutes ces adresses dans votre firewall.
La liste change de temps en temps. D'après mon expérience, pas plus d'une fois par jour. On peut donc assumer sans risque qu'une mise à jour quotidienne du firewall est largement suffisante. Mon firewall étant PF (Packet Filter sur FreeBSD et OpenBSD), mon exemple sera directement utilisable avec ce pare-feu. Pour les autres logiciels (ipfw par exemple), il faudra faire un travail d'adaptation.

Pour plus de simplicité, je laisse periodic lancer le script chaque nuit vers 3h15. Je crée donc un fichier /usr/local/etc/periodic/daily/310.spamhaus_dropall exécutable, et en lecture uniquement (sauf pour root).

Je dois aussi créer une table spamhaus_dropall dans la configuration de PF en ajoutant les lignes suivantes à mon /etc/pf.conf :

Dans les définitions de tables :

table <spamhaus_dropall> persist { }

Dans les règles proprement dites :

block in log quick proto tcp from <spamhaus_dropall> to any

Cette table, vide par défaut, va stocker le contenu filtré de la liste DROP, et sera mise à jour toutes les nuits.
Ensuite je force pf à relire la configuration par la commande pfctl -vf pf.conf.

Voici le code du script, à écrire dans /usr/local/etc/periodic/daily/310.spamhaus_dropall :

#!/usr/local/bin/bash
echo  downloading/cleaning blacklist drop.lasso
TMPFILE=`mktemp /tmp/drop.XXXXXX` || exit 1

/usr/local/bin/curl -s http://www.spamhaus.org/drop/drop.lasso | \
    sed 's, ;.*,,' | \
    egrep '^([0-9]{1,3}\.){3}[0-9]{1,3}/[0-9]{1,2}*$' > \
    ${TMPFILE}

echo  flushing the spamhaus_dropall table
egrep -v '^127|^WHITELIST' ${TMPFILE} | \
    pfctl -t spamhaus_dropall -vT replace -f -

La première étape consiste à télécharger la liste. Dans la foulée, les commandes sed et egrep me permettent de nettoyer et filtrer le contenu du fichier envoyé par Spamhaus.
Le fichier original ressemble à ceci :

; Spamhaus DROP List 11/24/08 - (c) 2008 The Spamhaus Project
116.199.128.0/19 ; SBL56563
116.50.8.0/21 ; SBL54501
128.199.0.0/16 ; SBL62478

Le fichier filtré et nettoyé, dont le contenu est écrit dans le fichier temporaire TMPFILE ressemble à cela :

116.199.128.0/19
116.50.8.0/21
128.199.0.0/16

L'étape suivante consiste à injecter les nouveaux blocs d'IP dans la table pour les faire prendre en compte par le firewall. Par mesure de précaution, j'ai choisi de filtrer ici les IP de la classe 127.0.0.0/8 ainsi que toutes les IP dont je ne veux absolument pas qu'elles figurent dans la blacklist. On n'est jamais à l'abri d'un dysfonctionnement de Spamhaus, ou du script, ou d'une malveillance locale sur la machine. Je remplace donc ^WHITELIST par tous les préfixes d'IP que je juge nécessaire (par exemple ^83.225. si mon IP résidentielle commence par "83.225"), et je les sépare par un |.
La commande egrep -v me permet donc d'exclure toutes les lignes que je veux sortir de la liste, et envoie le reste à pfctl pour remplacer le contenu de la table spamhaus_dropall par les nouvelles IP.

Voici un exemple de sortie, telle qu'elle apparaît dans le mail de daily :

downloading/cleaning blacklist drop.lasso
flushing the spamhaus_dropall table
8 addresses added.
1 addresses deleted.
A  192.43.153.0/24
A  192.43.154.0/23
A  192.43.156.0/22
A  192.43.160.0/24
A  192.86.85.0/24
A  78.157.128.0/19
A  91.209.14.0/24
A  94.176.96.0/20
D  94.176.96.0/21

Le script est bien sûr perfectible. Mais c'est une base de travail qui fonctionne.

Toujours plus de spam

Depuis fin mars, j'ai ajouté au bas de la marge de droite de cette page un compteur de spam. Il affiche en temps réél la quantité de spam de blog que mon système a bloquée depuis que je l'ai mis en place. Presque immédiatement, le nombre de tentatives de spam de commentaires a explosé. C'est à tel point que je réfléchi à une implémentation plus complète du compteur, avec arrière-boutique en sql, sauvegarde du contenu des requêtes POST, etc. En attendant un graph plus sexy, voilà un premier jet sous gnuplot Voici donc un graph un peu plus sexy que du gnuplot :

variations du nombre de tentatives de spam de commentaire par jour

Ce qui porte à sourire dans tout ce gourbi c'est l'acharnement des spammers à cibler les articles qui parlent justement de spam. Sur le total de spam bloqué, 25% des tentatives sont faites sur l'article le spam sur les blogs et les forums, et 20% visent l'article plug-in signal spam pour mail

"plug-in" Signal-Spam pour Mail

Les quelques personnes avec qui j'ai pu en discuter savent à quel point j'étais en rogne contre les gens de signal-spam.fr. Ce site, initié par le gouvernement et quelques industriels, affichait à son lancement beaucoup de prétentions qu'il était incapable d'assumer. Quand je l'ai testé, le 11 mai, lendemain de son ouverture officielle, absolument rien ne fonctionnait comme promis. À la faveur d'un échange récent sur fr.misc.droit.internet, j'ai décidé de tenter ma chance à nouveau et, miracle, Le site fonctionne enfin comme attendu.

J'ai donc eu envie de fabriquer un petit "plug-in" pour mon client de messagerie : Apple Mail. J'ai utilisé comme base de travail le script shell de Stéphane Bortzmeyer qui présente l'avantage énorme de partir d'Openssl et de cUrl, tous deux fournis dans Mac OS X. J'ai conçu, autour de cette base, un script AppleScript qui permet l'interaction avec Mail.

Téléchargement

Vous trouverez toujours la dernière version du script à cet endroit. Pour plus de simplicité, je ne donne pas de numéro de distribution, mais uniquement le numéro de version svn du fichier (plus récent en haut) :

version 116 de signal-spam.scpt | sources au format txt | changelog cf. commentaires
version 66 de signal-spam.scpt | sources au format txt | changelog cf. commentaires
version 65 de signal-spam.scpt | sources au format txt | changelog cf. commentaires - mise à jour de sécurité
version 64 de signal-spam.scpt | sources au format txt | changelog cf. commentaires
version 63 de signal-spam.scpt | sources au format txt | changelog cf. commentaires
version 61 de signal-spam.scpt | sources au format txt

Installation et utilisation

Avant d'utiliser ce script, vous devez disposer d'un compte utilisateur sur le site signal-spam.fr. Une fois cette formalité accomplie, copiez ce script dans votre dossier "Library/Scripts/Mail Scripts/" (en français "Bibliotheque/Scripts/Mail Scripts/"). Ensuite, ouvrez ce script par un double-click. Le script vous demande alors votre identifiant puis votre mot de passe signal-spam. Saisissez ces paramètres, puis enregistrez le script. Ainsi, vos identifiants de connexion sont enregistrés dans le script qui pourra fonctionner sans que vous ayez à les ressaisir à chaque utilisation. Si vous désirer modifier le login et/ou le mot de passe il vous suffit de rouvrir le script, et de saisir les nouveaux paramètres. N'oubliez pas d'enregistrer à nouveau le script.
Pour que ce script soit utilisable dans Mail, il vous faut activer le "script menu" (script menu). Vous pouvez activer ce menu grace à l'utilitaire "AppleScript Utility.app" qui se trouve dans le dossier "/Applications/AppleScript/". Ensuite, dans Mail, sélectionnez les messages que vous souhaitez signaler, puis dans le "script menu" choisissez "signal-spam". Voilà !

Le script est conçu pour retourner les codes d'erreurs HTTP que le serveur signal-spam.fr lui renvoie. L'erreur probablement la plus courante est la "400". Un code d'erreur "400" signifie que "quelque chose" ne s'est pas bien déroulé. C'est en général du à une erreur de login ou de mot de passe.

Nouveauté de la version 64 : Si vous êtes un utilisateur de Growl, vous pouvez installer l'Extra growlnotify qui est fourni dans l'image disque de Growl. Cet utilitaire permet de piloter Growl en ligne de commande, et c'est le mode de notification qui a été choisi pour le script signal-spam. Le script détecte automatiquement la présence de growlnotify dans le répertoire /usr/local/bin, et poste une notification visuelle si ce dernier est présent.

Licence

Ce script est fourni sans garantie, et sous licence BSD. Ce qui signifie très grossièrement que vous pouvez en faire ce que vous voulez à condition de mentionner les auteurs, y compris en faire un produit commercial.

N'hésitez pas à me laisser un petit mot si vous utilisez ce script, ou si vous rencontrez des problèmes avec lui.

Spam un jour, spam toujours

Maintenant que ce blog est équipé d'un système anti-spambot façon Vauban, j'ai tout le loisir de voir ces pollueurs s'écraser contre mes murs. Il n'y a même plus de spam résiduel à modérer, un régal.
En pâture pour les chiens, voici les adresses IP des vilains pris dans mes lignes de défense depuis le 1er février :

121.134.43.80		208.101.5.141		64.72.127.155	
125.18.15.102		209.67.219.74		66.7.192.34
125.189.49.45		210.64.156.40		66.79.164.130	
163.28.33.226		210.87.251.107		67.128.2.9	
165.228.130.12		212.138.64.171		67.172.170.196
165.228.133.11		212.138.64.176		67.185.5.14
193.69.180.120		212.150.97.114		68.178.206.47
193.85.227.42		213.115.205.82		68.85.25.214
200.179.190.126		213.173.239.33		69.57.190.138
200.201.183.18		217.158.155.13		69.61.55.202
200.209.172.246		218.41.52.250		72.29.95.61
200.88.125.9		218.72.250.54		74.118.183.154
200.88.223.98		220.226.63.254		74.134.113.31
201.17.253.65		24.226.153.18		74.52.44.34
201.39.75.130		4.78.211.221		80.227.0.156
201.6.84.126		59.144.155.17		81.211.102.38
201.80.4.156		59.94.244.169		82.179.244.68
203.121.69.154		59.95.5.57		82.234.90.177
203.144.160.250		61.205.234.121		83.206.200.105
205.234.106.105		61.240.111.196		84.54.132.26
207.36.196.10		61.6.54.241		85.105.85.189
208.101.5.140		62.212.81.166		89.178.64.57

Et pour rire, le top 5 des URL sur lesquelles ils se sont acharnés :

40 …/index.php/2006/11/26/67-le-spam-sur-les-blogs-et-les-forums
11 …/index.php/2006/11/26/67-le-spam-sur-les-blogs-et-les-forums/register.php
 9 …/tb.php?id=60
 9 …/tb.php?id=49
 5 …/tb.php?id=30

Le spam sur les blogs, suite

Les pourvoyeurs de spam sont légion, et rien à voir avec la légion étrangère ou quelque groupe de rock. En plus ils lisent ce blog, les salauds.

Fin novembre je proposais quelques trucs pour esquiver une partie du spam de blogs robotisé. Je précisais que les scripts du moment faisaient des erreurs faciles à déceler, et donc à exploiter pour se protéger contre ces invasions barbares numériques.
Il aura fallu environ 20 jours pour que les spammers corrigent leurs moulinettes de tous les défauts que j'avais relevés. Pour le coup, je me sens presque coupable. Maintenant ils font un GET avant le POST, et non plus après. Ils envoient aussi des informations cohérentes à propos du navigateur prétendument utilisé, et font l'effort de simuler un "referer" qui pourrait être valide (même si il est évident pour l'oeil humain que le referer est bidonné).

Il est amusant de noter que depuis la mi-décembre, ces spammers qui ont adapté leurs attaques s'acharnent sur l'article dans lequel je parle du spam de blogs. Je compte 18 tentatives de spam contre cet article, sur un total de 21 tentatives "nouvelle formule".
Bref, tout cela n'est pas si drôle finalement et il va bien falloir trouver une parade. Comme je veux absolument éviter les méthodes invasives (celles qui touchent au code de l'application, ou qui dépendent de l'interpréteur de ce code), ça me donne un maximum de fil à retordre. Pour moi, l'idéal serait une méthode impliquant un module Apache, du style mod_access, mod_access_rbl, mod_usertrack, ... Il y a peu, je me prenais même à rêver de l'existence d'un mod_p0f, mais réfléxion faite, c'est pratiquement inutilisable.
Toutes les idées sont les bienvenues d'ailleurs.

Le spam sur les blogs et les forums

Toute méthode de diffusion d'information qui peut être automatisée est un jour ou l'autre récupérée pour délivrer des messages publicitaires non sollicités : du spam. La multiplication des forums ou des blogs avec leurs commentaires et autres trackback est une bénédiction pour les pourris qui vendent du viagra chinois placébo ou des rollex en taule ondulée.

La première chose à comprendre c'est qu'aucune méthode automatique n'est infaillible. Seule une modération manuelle, par un humain en pleine possession de ses moyens, peut bloquer tout le spam qui serait posté à destination d'un forum ou d'un blog. Ceci posé, voilà quelques conseils pour filtrer un peu la crasse du monde.

Continue reading

Temps de traitement amavisd-new/clamav

En complément de mon précédent article sur les performances du filtrage antispam et antivirus sur une plateforme Mac OS X Server + amavisd-new/clamav, voilà un graphique de temps de traitement moyen des emails. Ce graphique représente donc la durée moyenne du filtrage d'un email dans la passerelle frontale de Lyon 2. La partie filtrage est gérée par amavisd-new, qui utilise clamav comme antivirus et les librairie Perl de spamassassin pour filtrer le spam.

timing amavis

Je ne trouve pas cela très bon comme performance...