Bogofilter

Kezako?

Bogofilter est un puissant filtre bayésien permettant de tagguer le spam afin de pouvoir le repérer, trier, effacer… très facilement.

Quel intérêt? Remplacer SpamAssassin qui est, lui aussi très afficace, mais très consommateur de ressources (600 Mo en permanence sur mon modeste serveur mail).

Comment le mettre en place:

Il faut déja dans un premier temps “apprendre” au filtre ce que l’on considère comme courrier non sollicité (SPAM), et comme courrier souhaité (HAM).

Mes mails étant stockés au format maildir, nous nous rendons dans mon dossier de spams:

% cd ~/Maildir/.Spam/cur

for i in *; do bogofilter -s -I $i; done

Idem pour les mails sollicités (HAM)

% cd ~/Maildir/cur

for i in *; do bogofilter -n -I $i; done

Maintenant que bogofilter est “entrainé”, il faut modifier le ~/.procmailrc afin de filtrer les mails:

## BogoFilter
:0fw
* < 128000
| bogofilter -upelv

:0e
{ EXITCODE=75 HOST }
## BogoFilter

:0
* ^X-Bogosity.*spamicity=1\.0
.Spam/

:0
* ^X-Bogosity.*spamicity=0\.9[56789]
.Spam/

Ce code nous permet de déplacer dans un dossier Spam tous les mails considérés comme spam.

Que faire cas de détection d’un faux positif, ou d’un faux négatif?

Nous allons créer les dossiers Ham, Spam ainsi qu’un sous dossier Old pour chacun de ces dossiers dans notre boite mail nous permettant de faire réapprendre à bogofilter les mails concernés.

Le script suivant lancé périodiquement nous permettra de faire apprendre à bogofilter le Spam

#!/bin/sh

if [ $UID -eq 0 ]; then
echo “Lancement par les utilisateurs uniquement !” ;
exit
fi

if [ ! -d $1 ] || [ ! -d $2 ]
then
echo “Dossier manquant !” ;
exit 1
fi

SPAM=$1
OLDSPAM=$2
bogofilter=/usr/bin/bogofilter

# Reconnaissance du spam
echo “ANALYSE DU SPAM”
for f in $SPAM/*,S ; do
if [ -f $f ] ; then
echo $f ;
$bogofilter -s -I $f
fi
done
mv $SPAM/*,S $OLDSPAM/
echo “Done.”

Le script suivant lancé périodiquement nous permettra de faire apprendre à bogofilter le Ham

#!/bin/sh

if [ $UID -eq 0 ]; then
echo “Lancement par les utilisateurs uniquement !” ;
exit
fi

if [ ! -d $1 ] || [ ! -d $2 ]
then
echo “Dossier manquant !” ;
exit
fi

HAM=$1
OLDHAM=$2
bogofilter=/usr/bin/bogofilter

# Reconnaissance du ham
echo “ANALYSE DU FAUX SPAM”
for f in $HAM/* ; do
if [ -f $f ] ; then
echo $f;
$bogofilter -n -I $f
fi
done
mv $HAM/* $OLDHAM/
echo “Done.”
Ces scripts seront lancés par votre crontab grace aux lignes suivantes:

@daily /usr/local/bin/bogoaddspam.sh ~/Maildir/.Spam/cur ~/Maildir/.Spam.Old/cur
@daily /usr/local/bin/bogoaddham.sh ~/Maildir/.Ham/cur ~/Maildir/.Ham.Old/cur

This entry was posted in Anti Spam, Procmail. Bookmark the permalink.

Comments are closed.