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