logo rss

Mise en place du filtre de courriels SpamAssassin sur un serveur Courier

Intro

On m'a demandé de mettre en place une solution de filtre anti-spam sur le serveur de mail courier-mta. Vu que le projet dspam semble ne plus être maintenu j'ai donné une chance à un des plus populaire, à savoir : SpamAssassin. L'installation et le paramétrage ont été effectués sur une distribution Debian.

Configuration

  • OS : debian stretch 9
  • courier-mta : 0.76
  • spamassassin : 3.4.2

Maildrop

On utilisera le MDA (Mail Delivery Agent) Maildrop pour regiriger nos mails à notre service SpamAssassin.

Activation maildrop

  • Nous activons maildrop pour notre utilisateur shebang.thedolphins :
echo "|/usr/bin/maildrop" | sudo tee -a /var/vmail/mydomain.net/shebang.thedolphins/.courier

/etc/maildroprc

  • SpammAssassin sera appelé seulement si un mail est envoyé à l'utilisateur shebang.thedolphins et si sa taille est inférieure à 256000 octets.
import HOME
import USER
if ( /^To: .*shebang.thedolphins@mydomain\.net.*/ && $SIZE < 256000 )
{
	#won't work with vmail users, to avoid "spamd: handle_user (userdir) unable to find user:" message
        #xfilter "/usr/bin/spamc -u $USER" 
        xfilter "/usr/bin/spamc"
}
#Optional : if we want, detected spams could be moved to a specific folder :
#if ( /^X-Spam-Status: Yes/ )
#{
#       to "$HOME/Maildir/.SpamAssassin/"
#}

SpamAssassin

Installation

root@host:~# apt-get install spamassassin spamc

Créer un dossier de travail et attribuer les droits

root@host:~# su - vmail/
vmail@host:~$ mkdir .spamassassin/
vmail@host:~$ chmod -R ugo+w .spamassassin/

Configuration

  • We create log folder and user account who will execute the service
root@host:~# mkdir /var/log/spamassassin/; groupadd spamd; useradd -g spamd -s /bin/false -d /var/log/spamassassin spamd; chown spamd:spamd /var/log/spamassassin

/etc/spamassassin/local.cf

  • Le champ *****SPAM***** sera ajouté dans le subjet. L'option report_safe 0 est présente pour ne pas modifier le corps du message.
rewrite_header Subject *****SPAM*****
report_safe 0 

/etc/default/spamassassin

  • Préciser les dossiers pour les logs et sous quel compte utilisateur le processus sera exécuté :
OPTIONS="--create-prefs --max-children 2 --username spamd -H /var/log/spamassassin/ -s /var/log/spamassassin/spamd.log"
CRON=1 
root@host:~# systemctl restart spamassassin

Script d'apprentissage pour SpamAssassin

/usr/local/sbin/spamassassin_learn.sh

  • Ce script sera exécuté dans le but d'améliorer la détection de notre filtre SpamAssassin et donc d'en améliorer ses résultats. Les mails qui seront dans le dossier Spam folder seront considérés comme spams et ceux dans le dossier Nospam folder seront considérés comme légitimes. L'utilisateur devra déplacer manuellement les spams non détectés dans Spam folder et les mails légitimes dans le dossier Nospam.
#! /bin/bash

#Mails in Spam folder are Spams
sa-learn --no-sync --spam /var/vmail/mydomain.net/shebang.thedolphins/Maildir/.Spam/{cur,new}
#Mails in Nospam folder are legit emails
sa-learn --no-sync --ham /var/vmail/mydomain.net/shebang.thedolphins/Maildir/.Nospam/{cur,new}
#Once processed as spam we put mails in trash folder
for i in /var/vmail/mydomain.net/shebang.thedolphins/Maildir/.Spam/{cur,new}/*; do
        mv "$i" /var/vmail/mydomain.net/shebang.thedolphins/Maildir/.Trash/cur/
done
#Once processed as legit we put mails in INBOX
for i in /var/vmail/mydomain.net/shebang.thedolphins/Maildir/.Nospam/{cur,new}/*; do
        mv "$i" /var/vmail/mydomain.net/shebang.thedolphins/Maildir/new/
done

/etc/cron.d/spamassassin

  • Nous paramétrons une tache cron afin que notre script soit exécuté toutes les 15 minutes :
*/15 *  * * *   root    /usr/local/sbin/spamassassin_learn.sh

Références

Creative Commons License
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.

Contact :

adresse mail de contact