TueSpam, un outil pour conserver sa boite aux lettres propre

Introduction

TueSpam ou en abgégé ts est un mot franglais qui vient de la contraction du mot tue (du verbe tuer) et du mot spam que tout le monde connait et qui est quelquefois traduit par pourriel. Sa mission est de supprimer, sous votre controle, les mails indésirables dans votre boite aux lettres électronique.

TueSpam s'adresse essentiellemnt aux personnes qui se trouvent en bout de la chaine de distribution du courrier électronique et qui n'ont aucune autre action possible sur la régulation de cette distribution. Autrement dit c'est vous et moi, qui avons un ou plusieurs compte email POP3 chez un FAI (fournisseur d'accès internet). TueSpam aura son audience tant que les velléités des responsables de la lutte anti spam ne se seront pas traduites en actions concètes et efficaces.

Caractéristiques en bref

Description du fonctionnement

Aprés lecture de son fichier de configuration, TueSpam va, pour chacun des comptes (boite aux lettres) décrit dans cette configuration, lire et analyser, un à un, chacun des messages qui s'y trouvent. Le résultat de l'analyse est alors soumis à un filtre constitué d'un jeu de règles, qu'il va falloir établir à un moment donné. Suivant le résultat en sortie du filtre, le programme décide si le mail est accepté ou refusé. Si le mail est accepté, il est transmis dans votre boite aux lettres locale, si il est refusé, il est supprimé sur le serveur.

Le paragraphe précédent n'est que le schéma directeur de ce qui peut se passer dans TueSpam. En fait il y a un certain nombre d'options qui permettent de modifier son comportement suivant les désirs de l'utilisateur et qui vont être évoquées dans la suite de ce document.

Les règles et les options sont, bien sur, à la charge de l'utilisateur, car c'est lui qui décide, par les règles, quels messages il veut supprimer, les autres étant conservés par défaut et, par les options, ce qu'il va faire des mails supprimés et conservés. Elles sont placées dans le fichier de configuration.

Les règles sont définies par des RE (Regular expression) traduit par expression régulière. Si vous ne savez pas ce que c'est, évitez de chercher à deviner le sens à partir de ces 2 mots, car il n'y rien à en tirer, lisez plutôt le paragraphe d'introduction les concernant.

Dans la version actuelle et dans mon application, TueSpam est lancé par le démon Cron toutes les 15 minutes comme on le ferait pour fetchmail ou mailfilter.

Contrairement à ce que certains prétendent, TueSpam n'analyse pas le message sur le serveur et doit, comme tout le monde, le télécharger en mémoire pour le faire. Mais si le mail est accepté, il délivré tout de suite sans autre téléchargemnt.

Introduction aux expressions régulières uniquement pour les débutants

Les 2 mots expressions régulières ne veulent pas dire grand chose, mais cachent une petite technique astucieuse pour rassembler sous une forme d'écriture (une expression) un ensemble de formes qui, d'une certaine façon, se ressemblent, une forme étant définie comme une suite de caractères.

Il faut savoir qu'il existe plusieurs versions de RE et sans trop rentrer dans le détail:

Par défaut les RE sont sensibles à la casse des caractères et distinguent majuscules et minuscules. Dans TueSpam en général on demandera à ne pas différencier les deux.

Il faut savoir ensuite que, dans les RE, il y a des caractères spéciaux avec donc une signification particulière, dont voici une liste non exhaustive :

Pour tester sous Linux, c'est très simple, utilser grep -e ou egrep dans une fenêtre terminal. If suffit maintenant de concrétiser tout cela par quelques exemples.

[hq@olix ~]$ echo "Gnome desktop" | grep -i -e "Desktop"
Gnome desktop
[hq@olix ~]$ echo "bureau Gnome" | grep -i -e "Desktop"
[hq@olix ~]$ 

La RE est "Desktop" , avec comme caractéristique très peu de forme équivalente, et la forme testée est "Gnome desktop". Le résultat est positif pour le premier test et négatif pour le second. En effet grep affiche la forme d'entrée dans le cas positif et rien si négatif. Mais ce n'est qu'une caractéristique de grep ! Attention les " ne sont que des délimiteurs et ne font pas partie de la RE.

[hq@olix ~]$ echo "Gnome desktop" | grep -i -e ".*"
Gnome desktop
[hq@olix ~]$ echo "bureau Gnome" | grep -i -e ".*"
bureau Gnome

Avec la RE ".*" toutes les formes sont équivalentes. En effet . est équivalent à n'importe quel caractère et * permet de multiplier ce n'importe quel caractère.

Entre une RE qui laisse pratiquement rien passer et une qui laisse tout passer, il y a de la marge. En voici une plus sympathique, toujours entre ses délimiteurs : "from emailer.*\.emv[0-9]+\.(net|com)". Elle sélection tout ce qui contient "from emailer" et qui contient emv0, emv1, ... emv999,... et qui se termine par .com ou .net.

La règle du jeu consiste donc à trouver les RE qui vont sélectionner les formes souhaitées. Ce n'est pas plus difficile que les mots croisés ou le Sudoku !

Le fichier de configuration

Lorsque le nom du fichier de configuration n'est pas précisé par une option de lancement de la commande, TueSpam cherche un fichier de nom "nom du programme" terminé par "rc" dans le répertoire courant, ainsi si le programme est appelé ts, le nom du fichier de configuration est tsrc. Si le fichier n'existe pas il est cherché dans le répertoire $HOME/.tsrc c'est à dire dans un répertoire .tsrc situé au sommet de la hiérachie de l'utilisateur.

Le fichier de configuration peut être donnné explicitement par l'option -R. Dans ce cas le répertoire contenant ce fichier devient le répertoire de base des autres fichiers utilisés lorsqu'ils sont relatifs.

[hq@olix ~]$ ts -R /home/hq/.tsrc/tsrc

Le fichier de configuration definit certaines variables du système comme le nom du fichier log, ... et des directives d'inclusion des fichiers comptes, règles, ignhosts, spamIp et carnet d'adresse Thunderbird.

Le format du fichier est simple : une clé suivi du signe = suivi de la valeur entre " si la valeur est alphanumérique. Seules les directives d'inclusion n'ont pas le signe =. Le caractère # introduit un commentaire. Les commentaires sont ignorés par le programme. Les quelques lignes suivantes montrent quelques lignes du fichier de configuration.

# if defined, rejected mails are stored in this file
SPAMMAILFILE = "spamMail"

# if defined, log headers for all messages
HEADERS = "hdrs"

include "Account"
include "Rules"
include "ignHosts"
include "RspamIp"
abThunderbird "/home/hq/.thunderbird/id89j59d.default/abook.mab"

Il est peut être utile de préciser que les noms de fichier peuvent être changés. Après tout, c'est votre configuration. ! Je les ai nommé ainsi pour les réutiliser dans la suite du texte.

Le document tskey.php donne la description des mots clés utilisés pour la configuration.

Le fichier de compte: Account

Le fichier de compte définit le ou les comptes qui doivent être accédés par TueSpam. Un compte est introduit par la directive SERVER qui doit être la première suivie des directives qui définissent les variables pour ce compte. Le format est le même que celui du fichier de configuration et les instructions, qu'il contient, pourraient être placées dans ce dernier à la place de la directive d'inclusion. Mais le contenu de ce fichier est spécifique à une installation et ne peut sans doute pas être partagé.

SERVER = "pop.free.fr"
USER = "username"
IDENT = "my identification sting"
PASS = "xxxxxxx"
EMAIL = "xxxxx.yyyyy@free.fr"
PROTOCOL = "pop3"
PORT = 110
# ACTEST = "yes"
# ACSKIP = "yes"
# ACKEEPSPAM = "yes"
MAILDEST = "hq@localhost"
# FORCESAVE = "hq"

Le fichier de règles: Rules

Le fichier de règles définit les règles qui ont été abordées plus haut dans ce document. Le format est encore le même que celui du fichier de configuration et les instructions, qu'il contient, pourraient être placées dans ce dernier à la place de la directive d'inclusion. Le contenu de ce fichier est plus générique et peut donc etre partagé par plusieurs installations.

DENY = "Reply-To: pas_de_repon.*@aliceadsl.fr"

DENY = "InBody: http://.*googlegroups.com" 

Le fichier ignHosts

Le fichier ignHosts regroupe la liste des noms des machines qui peuvent être contenu dans un mail mais que TueSpam doit ignorer, par exemple www.w3.org. Le format du fichier est identique au format d'un fichier de règles. Ainsi le mot clé IGNHOST ajoute le nom de machine à la liste. Notez que le nom de machine est une expression réguliere. Les commentaires sont acceptés.

IGNHOST = ".*\.w3[c]?.org"
IGNHOST = "sourceforge.net"

Le fichier RspamIp

Le fichier RspamIp contient les adresses IP à exclure. Si, dans le corps du message, un nom de machine pointe sur cette adresse IP le mail sera refusé. Ce fichier a un format identique à celui d'un fichier règles. En genéral le champ country est généré par TueSpam, mais sa valeur n'a pour l'instant pas d'importance. Le champ count qui permet de mesurer l'audience de cette adresse IP est incrémentée par TueSpam.

#               Ip             Name        Country        Count
DENY = "SpamIp: 218.61.7.21-30 laidmain.com CN"               12
DENY = "SpamIp: 218.61.33.235 www.checkstill.com AA"               21

L'adresse IP peut être remplacée par une gamme d'adresses. Dans ce cas, la première adresse constitue la borne inférieure. La deuxième adresse ou partie d'adresse constitue la borne supérieure et si elle est incomplète, elle représente les derniers champs. Ainsi dans l'exemple ci-dessus, les adresses rejetées iront de 218.61.7.21 218.61.7.30.

Le fichier spamIp.tmp

C'est exactement le même que le précédent. Il est automatiquement généré par TueSpam et est en attente d'approbation de votre part. Cette approbation consiste à copier la ou les lignes de ce fichier dans RspamIp. En ce faisant, le mail qui transporte un nom correspondant à cette adresse sera éliminé, la prochaine fois.

Le fichier actions

Ce fichier optionnel permet de définir des actions spécifiques à activer à la réception d'un mail. Il s'introduit, de la manière suivante, dans le fichier de configuration.

include "actions"

Voici un exemple de fichier qui comporte une action SaveAttachement, qui est une action interne (la seule pour l'instant) et qui permet de sauvegarder les fichiers en attachement dans le répertoire ActionDir si le mail provient de l'émetteur From: .* et si le sujet du message satisfait à la règle sur le sujet. On peut bien sur utiliser autant de règles que l'on veut, dans la mesure ou cela a un sens, et utiliser d'autres critères. Tout autre nom dans le champ ActionCmd désigne une commande externe de votre choix.

Une action comme celle-ci ne doit pas être spontanée mais résulter d'un accord préalable entre l'émetteur et le récepteur.

ActionCmd = "SaveAttachement"
ActionRule = "From: .*jean.bonneau@aliceadsl.fr"
ActionRule = "Subject: Photos suite..."
ActionDir  = "/home/hq/tmp"

Le fichier abook.mab

C'est le fichier de Thunderbird qui stocke les adresses email de vos correspondants favoris. Il est donc rare qu'il faille supprimer un mail venant de ces correspondants. Au contraire il faut les protéger. C'est pourqoui, TueSpam, pour chaque adresse, crée une règle comme celle-ci:

ALLOW = "From: .*alain.dupont@free.fr"

Ceci n'interdit pas d'inclure, manuellemnt, ce genre de règles dans le fichier de règles.

Le fichier hdrs

Ce fichier n'est pas un fichier de configuration, mais un fichier résultat qui résume le mail et comment TueSpam l'a traité. Voici un enregistrement pour un mail

Rejected trc1.emv2.com 81.92.115.209 with rule 'Received: 'from emailer.*\.emv[0-9]+\.(net|com)'':
         Fri Oct  8 16:05:04 2005
Subject: Nouveau et gratuit : gagnez jusqu'à 10.000 Euros chaque jour
        Return-path: <newsletter@info.madwin.com>
        From: Pénélope de MadWin <newsletter@info.madwin.com>
        To: xxxx21 <xxxxxx.xxxxxxx@xxxxxxx.fr>

Et voici le sujet correspondant dans le message ! Tout cela pour dire que si vous devez monter une RE sur le sujet, faites le sur le sujet juste au dessus et non pas celui de dessous.

Subject: =?iso-8859-15?Q?Nouveau_et_gratuit_:_gagnez_ju?=
 =?iso-8859-15?Q?squ'=E0_10.000_Euros_chaque_jour?=

Le fichier Uidl

Ce fichier n'est pas un fichier de configuration, il est créé par TueSpam lorsqu'il doit laisser les mails acceptés dans la boite aux lettres, afin d'éviter de retraiter ces mêmes mails au prochain passage. Ceci évite d'avoir une répétition du même enregistrement dans le fichier hdrs. Le fichier disparait lorsqu'il n'y a plus de mails dans les boites aux lettres.

Le fichier spamMail

Ce fichier, si il a été défini, entasse les mails qui ont été rejetés. Ceci permet de récupérer un mail qui a été supprimé par une mauvaise règle. C'est donc à conseiller en période d'apprentissage. En pratique, il suffit de surveiller le fichier hdrs et si tout va bien, nettoyer.

Le fichier log

Ce fichier enregistre les messages d'infos ou d'incidents générés par TueSpam lui même. Il n'est pas nécessaire de le consulter quand tout va bien, car il est assez bruillant. Par contre en cas problèmes, il peut être très utile et pourra être demander avec un rapport d'anomalie.

Les Règles

Dans TueSpam il n'y a que 2 catégories de règles : celles qui refusent et celle qui aident à l'acceptation du message. Elles sont introduitent respectivement par les mots clés DENY et ALLOW.

DENY = "From:.*irislink.com"
ALLOW = "Subject:.*TueSpam"

Une règle comporte une sous catégorie qui va indiquer à quel champ du message va s'appliquer la règle. Dans l'exemple ci dessus il s'agit de From: et Subject:. Il faut noter que la RE effectivement appliquée au champ du message se limite à .*irislink.com et .*TueSpam. Voici la liste exhaustive des sous catégories actuellemnt implémentée :

Les 6 premières sous règles s'appliquent aux champs correspondants du message.

On peut remarquer que tous les champs de l'entête ne sont implémentés, encore faut-il que ce soit justifié. La sous règle InHeader: permet de pallier à ce manque avec une restriction : elle s'applique à l'entête brute (non décodée) du message.

La règle InBody: s'applique au corps du message et BodyLink: s'applique au contenu de la page adressée par une Url du corps de message.

La règle Attach: permet de rechercher des .exe ou autre chose dans les attachements zippés.

Ci dessous, voici une forme particulière de règle. Elle contient 2 informations supplémentaires indépendantes.

DENY <> "To: @EMAIL@" 

La règle veut simplement dire que si le champ To: ne contient pas votre adresse email, le message sera refusé. C'est la moindre des choses que le destinataire soit renseigné...

Installation

Après avoir récupéré l'archive, il suffit de compiler le code après l'avoir décompressé. Copier le binaire dans un répertoire accessible.

tar zxvf ts-20090611.tar.gz
cd ts-20090611
make
cp tuespam /usr/local/bin/ts

Il faut ensuite configurer TueSpam. Le répertoire de configuration suggéré est $HOME/.ts. Y copier les fichiers du répertoire contrib de l'archive, ils serviront de squelette. Il faut sans doute ajuster certaines valeurs, au moins pour les chemins d'accès absolu, avnt de lancer Tuespam.

ts -R $HOME/.ts

Attention : Tuespam scrute les comptes, télécharge les mails éventuellemnt et s'arrête. Il faudra donc le relancer ou demander au système de le faire par le cron par exemple.

Le code de retour de TueSpam indique, si il est positif, le nombre de mails laissés dans les boites aux lettres visitées. Ceci permet à l'utilisateur de lancer une autre commande si nécessaire.

Il faudra par la suite ajuster vos règles aux mails qui vous arrivent.

A propos de localisation

Tuespam peut, à titre informatif, trouver le pays de l'émetteur d'un message en utilsant des bases de données de géolocalisation. Voir la page.

La mise en oeuvre est simple : il suffit de déposer un fichier ipToCountry.gz dans le répertoire de configuraton et de vérifier, dans le fichier de configuration tsrc, que la variable CSVFILE est positionnée à la valeur correcte.

Psychologie du spammer

Avant d'établir une règle, il n'est pas inutile de caractériser, un temps soi peu, le modèle du spammer :

Le vendeur auquel vous avez, un jour, acheté ou demandé quelque chose. Il se croit donc dans l'obligation de vous tenir informé tous les jours ou, des fois, plusieurs fois par jour. Il a donc mis votre adresse dans son robot et attends que vous reveniez tout de suite lui racheté quelque chose, mais vous n'en avez rien à faire. Voici deux règles qui permettent d'éliminer ce genre de spammer dans TueSpam. Remarquer le pas_de_repon, c'est déja suffisant pour qualifier le mail de spam.

DENY = "From:.*cofidis@aliceadsl.fr"
DENY = "Reply-To: pas_de_repon.*@aliceadsl.fr"

Le marketer l'industriel, le spécialiste quoi, lui au moins il travaille !. Il va cumuler, moyennant finances, ceux de la catégorie précédente qui ont les moyens et qui ne veulent pas s'emmerder avec ces basses besognes. Dans TueSpam, on peut généralement les caractériser par la règle suivante.

DENY = "Received: from.*g7r[0-9].com"

Le spammer le vrai. Il essaie d'être anonyme sur toute la ligne. Il est donc inutile de chercher une règle qui va réagir sur un champ de l'entête, car tout est faux. Mais il faut bien qu'il vous dise ce qu'il a à vous dire, ce brave. Pas très bavard, il vous laisse juste une adresse URL dans le corps du message, qu'il va changer bien sûr au prochain mail. Mais pas de problème, TueSpam les repère à l'adresse IP correspondant à ces liens et utilise le contenu du fichier spamIp.

122.198.62.4     20 CN www.didnow.com

Une autre variante consiste à vous inviter à ouvrir le message en pièces jointes. Alors là, attention à vous, car votre pc va bientôt servir de relais aux spammers. Mais TueSpam cherche et élimine sans l'ouvrir, bien sûr.

DENY = "Attach: \.exe"

Remerciements

Un remerciement tout particulier aux spammers pour leur contribution, certes involontaire mais combien efficace. Sans eux, ce projet aurait été impossible et ils sont invités à persévérer pour le perfectionnement de cet outil.

LICENSE

The TueSpam software is licensed under the terms of the GNU General Public License as published by the Free Software Foundation. See the file "COPYING" in the "tuespam" directory.

Références

  1. Les mots clés de configuration de TueSpam.
  2. Une page sur un outil de géolocalisation.
  3. Notes complémentaires sur l'utilisation de TueSpam.

Download