Paramétrer efficacement spamassassin sous Debian (Ubuntu)

Voici une question que je me posais depuis longtemps : est il possible de paramétrer spamassassin efficacement sur un petit serveur de mail n’excédant pas 100 mails par jour ?

La réponse est oui. Spamassassin est un outil très puissant mais qui nécessite quelque paramétrages  supplémentaires que ceux de l’installation type.

Dans cet article, je vais présenter l’installation de spamassassin par l’intermédiaire du MTA postfix. Je présenterai dans une deuxième partie les moyens d’optimiser spamassassin pour une détection efficace du spam. Enfin dans la troisième partie, je présenterai une petite technique maison pour permettre à spamassassin d’optimiser son filtre de détection Bayesien.

Installation de spamassassin

 

Installez spamassassin avec votre gestionnaire de paquets préféré. Dans un terminal, par exemple :

apt-get install -qq spamassassin spamc

Quelques opérations système sont nécessaire pour installer spamassassin avec postfix (en root) :

  groupadd -g 5001 spamd
  useradd -u 5001 -g spamd -s /sbin/nologin -d /var/lib/spamassassin spamd
  mkdir /var/lib/spamassassin
  chown spamd:spamd /var/lib/spamassassin

Pour une installation avec postfix, il vous faudra modifier la configuration comme suit :

Ajoutez les lignes suivantes à la fin de votre fichier /etc/postfix/master.cf

spamassassin  unix  -   n     n     -   -   pipe
    user=spamd    argv=/usr/bin/spamc -f  -e
    /usr/sbin/sendmail -oi -f ${sender} ${recipient}

Brève explication : pour tout mail recu depuis une interface réseau, postfix va router le mail vers l’application /usr/bin/spamc lancé avec l’id utilisateur spamd puis renvoyer le mail avec les flags de spamassasin dans les en-têtes (spam ou non, note, règles utilisées pour la détection…).

Puisque la commande sendmail utilise le démon local de postfix, le mail renvoyé sera délivré directement à l’utilisateur sans repasser par spamassassin (le cas échéant, le mail tournerait en boucle entre postfix et spamassassin).

Optimisation de spamassassin

Vos emails doivent maintenant contenir des en têtes du type “X-Spam-Status:” ou encore “X-Spam-Checker-Version:”. Si tel n’est pas le cas, revoyez la partie 1, essayez de redémarrer spamassassin, regardez ce qui ne va pas dans vos logs de mails (/var/log/mail.log), googlez votre problème, ou bien arrêtez l’admin sys pour aller élever des chèvres dans le Larzac.

Passons maintenant aux améliorations qui vont permettre à votre spamassassin de détecter efficacement les spams :

Modification du fichier /etc/spamassassin/local.cf

Ce fichier est le fichier permettant de changer la configuration de spamassassin. Pour rappel, spamassassin fonctionne comme un système expert. Il possède une base de connaissance qui lui permet de donner des points ou d’en soustraire en fonction de si une règle s’applique (exemple : -2 si le mail vient d’un hote connu, +2 si le mail contient le mot viagra). Si le score dépasse un certain seuil, le mail est considéré comme un spam. Voilà les paramètres intéressants (parmi tant d’autres) dans le fichier de configuration de spamassassin :

Required_score 2.0
whitelist_from *@mydomain.tld

Mise à jour de la base de règles

La base de règles du système expert peut etre mise à jour très facilement. C’est réellement ce qui permet à spamassassin d’être tenu à jour des nouvelles règles de détection du spam :

/usr/bin/sa-update
Si spamassassin vous insulte avec des messages d’erreur relatifs à la gestion des clés, la méthode est la suivante (en root) :
    wget http://spamassassin.apache.org/updates/GPG.KEY
    gpg --import GPG.KEY
Il est conseillé de lancer sa-update tous les jours pour maintenir sa base de règles à jour (un script cron fait l’affaire).

Mise à jour du filtre bayesien

Voici maintenant l’heure de la partie apprentissage automatique de spamassassin. Pour ca, voici une méthode basée sur le concept de honeypot que j’ai déployé récemment et qui s’avère très efficace : 

Créez une fausse adresse email (spam_hole@yourdomain.tld par exemple) et routez tous les mails vers un chemin spécial (grace à procmail par exemple). Disons /var/spamassassin/spamhole.

Ensuite, inscrivez cette adresse un peu partout sur Internet (sites de vente en ligne, sites auxquels vous ne feriez jamais confiance, sites aux images un peu osées :) , bref les endroits ou vous ne mettriez jamais votre adresse email en temps normal). L’idée est de faire venir un maximum de spam dans une boite pour permettre à spamassassin d’entrainer le filtre bayesien.

Une fois de plus, vous pouvez ajouter dans un script cron la commande :

/usr/bin/sa-learn --spam --mbox /var/spamassassin/spamhole

qui permettra à spamassassin d’apprendre toutes les nuits quels sont les derniers spams à la mode.

Conclusion

Avec tous ces petits réglages, spamassassin est aussi performant que le filtre antispam de gmail, en tous les cas dans mon cas avec une moyenne de 200 spams par jour.

2 Responses to “Paramétrer efficacement spamassassin sous Debian (Ubuntu)”

  1. Cedric says:

    Bonjour

    Est-il possible de configurer spamassassin pour rajouter l’entête [SPAM] devant l’objet des mails qui ont un score inférieur à 10 et de supprimer systématiquement tous les mails qui ont un score supérieur ?

  2. Selim says:

    Bon article. Merci :)

Leave a Reply