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) ...