Artisan Numérique

/système/courrier/postfix/smtp/ Ajouter SpamAssassin à Postfix

Le filtrage des sales courriels par les règles de PostFix est vital mais très loin d'être suffisant. Pour ne pas se faire inonder d'offres pourtant plus alléchantes il est indispensable de mettre en oeuvre un système plus évolué, le fameux SpamAssassin.

Installation

S'agissant d'un processus qui consomme un peu de CPU, il est préférable, si vous avez une configuration à deux serveurs postfix, de le poser sur la machine la plus véloce. Pour se faire, il faut commencer par installer les paquets spamassassin et spamc

aptitude install spamassassin spamc
installation de spam assassin

le paquet spamassassin contient à la fois le moteur de traitement de spam et un démon, spamd, qui va permettre de charger en mémoire plusieurs instance du moteur prêtes à l'emploi. spamc est quant à lui le client de ce démon.

Paramétrage de spamd/spamassasin

Spamassassin a ses fichiers de paramétrages placés en /etc/spamassasin. Ce dossier contient entre autre /etc/spamassasin/local.cf que vous pouvez modifier comme suit :

dns_available                   yes

# Activation du systeme Bayes
use_bayes                       1
bayes_auto_learn                1
bayes_learn_to_journal          1
bayes_journal_max_size          0
bayes_path                      /var/spool/spamassassin/bayes

# Activation de l'auto whitelist
use_auto_whitelist              1
auto_whitelist_path             /var/spool/spamassassin/auto-whitelist
auto_whitelist_file_mode        0666

# Activation de DCC
use_dcc                         1
dcc_timeout                     8
dcc_home                        /var/spool/spamassassin/dcc

# Activation de Pyzor
use_pyzor                       0

# Activatin de Razor
use_razor2                      1
razor_timeout                   8

# Optimisation des scores
score DCC_CHECK 4.500
score SPF_FAIL 10.000
score SPF_HELO_FAIL 10.000
score RAZOR2_CHECK 2.500
score RAZOR2_CF_RANGE_51_100 3.500
score BAYES_99 5.300
score BAYES_95 4.500
score BAYES_80 3.500
score BAYES_60 2.500
score BAYES_50 2.000

# Langages
ok_languages                    en fr vi
ok_locales                      en

#required_hits                          5

#add_header all Report _REPORT_
header Subject          /SPAM/
report_safe                     1
configuration spamassassin

Pas grand chose à signaler sur cette configuration assez simple à comprendre. Pour les différentes stratégies de filtrage (bayes, pyzor, razor2, etc.) demandez à M. Google qui expliquera cela beaucoup mieux que moi.

La version 3 de spamassassin fonctionne par plugins. Il y en a deux qui nous intéresse d'activer par rapport à notre configuration : dcc et textcat. Le premier va utiliser une base de données de spam, le second permet de deviner le langage d'un spam. Pour cela nous devons éditer le fichier /etc/mail/spamassassin/v310.pre pour décommenter les deux lignes suivante :

loadplugin Mail::SpamAssassin::Plugin::DCC
(...)
loadplugin Mail::SpamAssassin::Plugin::TextCat
paramétrage des greffons spamassassin

Nous allons maintenant créer un utilisateur spamassassin qui va avoir comme dossier home /var/spool/spamassassin. Ce dossier contiendra tout le paramétrage et les mise à jours de spamassassin :

$ sudo mkdir /var/spool/spamassassin
$ sudo useradd -d /var/spool/spamassassin -s /bin/false spamassassin
$ sudochown spamassassin:spamassassin /var/spool/spamassassin -Rc
création de l'utilisateur spamassassin

Maintenant que spamassassin est paramétré, il nous reste à vérifier que son démon, spamd, fonctionne. Sous Debian, le paramétrage du lancement de spamd est contrôlé par le fichier /etc/default/spamassassin.

ENABLED=1
OPTIONS="--create-prefs --max-children 5 --helper-home-dir -u spamassassin -g spamassassin"
PIDFILE="/var/run/spamd.pid"
CRON=1

Avec ce paramétrage nous avons activé le serveur spamd (ENABLED=1) et la mise à jour automatique de spamassassin (CRON=1). Enfin vous pouvez en plus rajouter -D dans les options pour obtenir de très nombreuses traces de deboggage.

Il suffit maintenant de lancer spamd et de vérifier dans les logs que tout s'est bien passé:

$ sudo /etc/init.d/spamassassin restart
Restarting SpamAssassin Mail Filter Daemon: spamd.

$ sudo tail -f /var/log/syslog
...bla bla bla...

Si aucune erreur n'apparaît dans les logs, le démon spamassassin est en route. Reste maintenant à paramétrer postfix.

Paramétrage de postfix

Nous allons indiquer à postfix d'insérer un script de notre cru dans la chaîne de traitement des courriers, juste après la réception par le moteur SMTP. Pour cela, modifier le fichier /etc/postfix/master.cf comme suit :

smtp inet n - n - - smtpd   -o content_filter=spamassassin:

et rajouter à la fin du fichier :

spamassassin unix - n n - - pipe flags=Rq user=spamassassin argv=/etc/postfix/spamassassin.sh -f ${sender} -- ${recipient}

Tout est en place, il faut maintenant fabriquer le script de filtrage dont le but est de recevoir le courrier entrant (postfix), de le traiter avec spamassassin via spamc/spamd, puis de le ré-expédier sur la chaîne suivante. Le script est à placer (par exemple) dans le fichier /etc/postfix/spamassassin.sh :

#!/bin/bash

IP="$1" ; shift
FROM="$1"; shift
TO="$1"

logger -t spamd "$FILE Client:$IP From:$FROM To:$TO CC:$@"
/usr/bin/spamc -u $TO | /usr/sbin/sendmail -i -f $FROM "$@"
exit $?
script de filtrage des spams - /etc/postfix/spamassassin.sh

Ceci fait, il faut juste rendre ce script exécutable et opérer un petit redemarrage de postfix et c'est fini. Vous pouvez auditer les logs par un tail -f /var/log/syslog pour vérifier que tout ce passe correctement. Et si tout marche, il ne reste plus qu'à attendre 10 secondes qu'un pourriel se présente :)

Conclusion

Et voilà. Si tout vas bien vous être maintenant immunisé aux spams. Prochaine étape, comment ne pas être pris pour un spammer (SPF, DKIM, toussa) ...