Se protéger des spam et autres vilenies SpamAssassin, Sieve, ClamAv

, par Christophe Bresso

Il y a des expéditeurs sans scrupules qui vont chercher à pourrir votre boîte mail. Tous les coups sont permis. Il est devenu indispensable de s’en protéger. Vous trouverez dans cet article quelques outils qui feront l’affaire.

Installation et configuration de SpamAssassin

SpamAssassin est un logiciel libre permettant de filtrer les mails afin d’éradiquer au maximum les courriers indésirables. Il fait passer un certain nombre de tests au message et en fonction du résultat de ces tests, il attribue un score qui permettra de savoir si il s’agit d’un pouriel ou non.

Liens utiles :

Vous commencez par installer SpamAssassin :

apt-get install spamassassin spamc

Ensuite vous modifiez le fichier de configuration de Postfix

sudo nano /etc/postfix/master.cf

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

#Ajoutez aussi ces deux lignes à la fin du fichier :

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

Ok maintenant vous relancez postfix avec la commande suivante :

service postfix reload

Dans le fichier /etc/spamassassin/local.cf, décommentez la ligne suivante :

rewrite_header Subject *****SPAM*****

Les mails considérés comme du SPAM auront un sujet préfixé avec *****SPAM*****. Ils pourront ainsi être traités comme vous le souhaitez en paramétrant un filtre dans votre client mail ou, comme vous allez le voir dans la suite de l’article, grâce à SIEVE.

Ajoutez aussi à la fin du fichier local.cf :

report_safe 0
whitelist_auth *@monsupernom.fr

add_header all Report _REPORT_
add_header spam Flag _YESNOCAPS_
add_header all Status _YESNO_, score=_SCORE_ required=_REQD_ tests=_TESTS_ autolearn=_AUTOLEARN_ version=_VERSION_
add_header all Level _STARS(*)_
add_header all Checker-Version SpamAssassin _VERSION_ (_SUBVERSION_) on _HOSTNAME_

Dans le fichier /etc/default/spamassassin, modifiez ces deux lignes :

sudo nano /etc/default/spamassassin

ENABLED=1
# Dans votre cas, votre version de Debian est au moins la 9 ('stretch') donc CRON=0
CRON=1 # Debian <= 7 "Wheezy"
CRON=0 # Debian >= 8 "Jessie"

Vous activez le service lors du boot puis vous le démarrez :

# Sous Debian 7
update-rc.d spamassassin defaults
# Sous Debian 8
sudo systemctl enable spamassassin.service
# Puis :
sudo service spamassassin start

Pour finir, ajoutez au cron [1] ces 3 lignes avec contab. Il vous est demandé quel éditeur vous souhaitez utiliser. J’ai une préférence pour ’nano’ (2).

sudo crontab -e
# Mise à jour des règles de spamassassin
20 02 * * * /usr/bin/sa-update

# Auto-apprentissage de spam assassin
30 02 * * * /usr/bin/sa-learn --ham /var/mail/vhosts/monsupernom.fr/utilisateur/mail/cur/*
40 02 * * * /usr/bin/sa-learn --spam /var/mail/vhosts/monsupernom.fr/utilisateur/mail/.Junk/cur/*

Spamassassin est très intelligent, il peut apprendre tout seul au fur et à mesure que vous recevez des mails, lorsque vous ajoutez manuellement un mail dans le dossier spam (ce qui veut dire qu’il ne l’avait pas détecté en tant que tel), sa-learn —spam permet de mettre à jour le filtrage bayésien en analysant les mails contenus dans le dossier spam, donc Spamassassin s’améliore un peu chaque jour en fonction de vous.

Le contraire est aussi possible avec l’option —ham de la commande sa-learn, si Spamassassin considère un mail en tant que spam alors que ce n’est pas le cas (faux positif), vous pouvez lui indiquer en remettant le mail dans le dossier principal de réception (INBOX).

Filtrer les mails avec Sieve et Sieve-Manager

Vous connaissez très certainement les filtres côté clients, tout bon client mail possède un système de filtre permettant de trier automatiquement les mails en fonction de différents critères que vous pouvez définir. Sieve c’est exactement la même chose mais côté serveur, il possède un langage de script pour définir soit même l’ensemble des règles. L’avantage de ce système c’est que les règles sont côté serveur donc elles s’appliquent à tous vos clients mail, pas besoin de les refaire lorsque vous changez de client.

Liens utiles :

Pour installer sieve, exécutez la commande suivante :

sudo apt-get install dovecot-sieve dovecot-managesieved

Éditez le fichier principal de configuration de Dovecot et ajoutez "sieve" dans la liste des protocoles :

sudo nano /etc/dovecot/dovecot.conf

protocols = imap lmtp sieve

Ensuite dans le fichier /etc/dovecot/conf.d/20-lmtp.conf, ajoutez le contenu suivant :

sudo nano /etc/dovecot/conf.d/20-lmtp.conf

protocol lmtp {
 postmaster_address = postmaster@funngo.com
 mail_plugins = $mail_plugins sieve
}

Dans le fichier /etc/dovecot/conf.d/90-sieve.conf, modifiez la configuration du plugin :

sudo  nano /etc/dovecot/conf.d/90-sieve.conf

plugin {

   sieve = /var/mail/vhosts/%d/%n/.dovecot.sieve
   sieve_default = /var/mail/sieve/default.sieve
   sieve_dir = /var/mail/vhosts/%d/%n/sieve
   sieve_global_dir = /var/mail/sieve

}

Puis :

sudo mkdir /var/mail/sieve/

sudo touch /var/mail/sieve/default.sieve
sudo chown -R vmail:vmail /var/mail/sieve

Par défaut,’ vous pouvez mettre toutes les règles dans le fichier default.sieve, elles s’appliqueront à toutes les adresses, les règles spécifiques à une adresse doivent être mises dans le fichier /var/mail/vhosts/funngo.com/adresse/.dovecot.sieve. Attention si ce fichier existe, le fichier par défaut (default.sieve’) ne sera pas lu pour l’utilisateur courant.

Pour démarrer, vous allez ajouter une règle basique mais très utile :

sudo nano /var/mail/sieve/default.sieve

require ["fileinto"];

if header :contains "Subject" "*****SPAM*****" {

   fileinto "Junk";

}

Vous l’avez compris, cette règle permet de placer les courriers détectés comme indésirables par SpamAssassin dans la boîte indésirables (junk en anglais).

Pour finir, compilez les règles avec la commande sievec :

sudo sievec /var/mail/sieve/default.sieve

et vous redémarrez Dovecot :

sudo service dovecot restart

Installation et configuration de ClamAV

ClamAV est un antivirus destiné aux systèmes UNIX principalement. Il est capable de détecter en temps réel des logiciels malveillants et des virus grâce à une base de détection de plus de 3 500 000 signatures. ClamAV est généralement utilisé avec Postfix pour filtrer les emails comportant des virus, malwares...etc

Liens utiles :

Installez le paquet clamav-milter depuis les dépôts officiels :

sudo apt-get install clamav-milter

4 autres paquets seront installés en même temps :

  • clamav : C’est le paquet principal
  • clamav-base : C’est le paquet de base de ClamAV, contient divers outils pour son fonctionnement
  • clamav-daemon : Permet de faire tourner ClamAV en tâche de fond
  • clamav-freshclam : Outil permettant de mettre à jour la base de signature des virus

Une fois que tous les paquets sont installés, il faut mettre à jour la base de signature avec freshclam :

sudo service clamav-freshclam stop

sudo freshclam

# ClamAV update process started at Sat Sep 13 23:42:44 2014
# main.cvd is up to date (version: 55,' sigs: 2424225, f-level: 60, builder: neo')
# daily.cvd is up to date (version: 19360,' sigs: 1098967, f-level: 63, builder: dgoddard')
# bytecode.cvd is up to date (version: 242,' sigs: 46, f-level: 63, builder: dgoddard')

sudo service clamav-freshclam start

Ensuite vous démarrez le daemon :

sudo service clamav-daemon start

[ ok ] Starting ClamAV daemon: clamd.

Vous créez le répertoire qui contiendra le socket UNIX et vous définissez clamav en tant que propriétaire :

sudo mkdir /var/spool/postfix/clamav
sudo chown clamav /var/spool/postfix/clamav

Exécutez la commande suivante pour configurer clamav-milter :

sudo dpkg-reconfigure clamav-milter

#Répondez aux questions avec les réponses ci-dessous :
Handle configuration automatically --> yes
User for daemon --> clamav
Additional groups --> laisser le champ vide
path to socket --> /var/spool/postfix/clamav/clamav-milter.ctl
group owner for the socket --> clamav
permissions (mode) for socket --> 666
remove stale socket --> yes
wait timeout for clamd --> 120
foreground --> no
chroot --> laisser le champ vide
pid file --> /var/run/clamav/clamav-milter.pid
temporary path --> /tmp
clamd socket --> unix:/var/run/clamav/clamd.ctl
hosts excluded for scanning --> laisser le champ vide
mail whitelist --> laisser le champ vide
action for "infected" mail --> reject
action on error --> defer
reason for rejection --> Rejecting harmful e-mail: %v found.
headers -> replace
log file --> /var/log/clamav/clamav-milter.log
disable log file locking --> no
maximum log file size --> 50
log time --> yes
use syslog --> no
log facility (type of syslog message) --> LOG_LOCAL6
verbose logging --> no
log level when infected --> off
log level when no threat --> off
size limit for scanned messages  --> 25
support multiple recipients --> no
enable log rotation --> yes

Après la re-configuration, clamav-milter devrait redémarrer pour prendre en compte les modifications :

[ ok ] Stopping Sendmail milter plugin for ClamAV: clamav-milter.
[ ok ] Starting Sendmail milter plugin for ClamAV: clamav-milter.

Par défaut, freshclam récupère les dernières mises à jour depuis le serveur principal database.clamav.net, on peut spécifier d’autres serveurs, plus proches, par exemple : db.fr.clamav.net. Dans le fichier /etc/clamav/freshclam.conf, ajouter la ligne suivante au-dessus des autres serveurs "DatabaseMirror" :

sudo nano /etc/clamav/freshclam.conf

DatabaseMirror db.fr.clamav.net

Sous Debian 7, ajoutez une nouvelle tâche CRON pour mettre à jour la base de signature automatiquement toutes les heures. La mise à jour est effectuée automatiquement sous Debian 8 Jessie (ce qui devrait être votre cas), la tâche CRON n’est plus nécessaire.

sudo crontab -e

15 * * * * /usr/bin/freshclam --quiet

Une dernière petite modification pour que Clamav ne bloque pas si les pièces jointes sont bien lourdes, changez la valeur de ’CommandReadTimeout’ en la passant de 5 (valeur par défaut) à 30 :

sudo nano /etc/clamav/clamd.conf

CommandReadTimeout 30

On redémarre le daemon pour prendre en compte les modifications :

service clamav-daemon restart

Il ne reste plus qu’à dire à Postfix où se trouve le socket UNIX de clamav dans le fichier /etc/postfix/main.cf :

sudo nano /etc/postfix/main.cf

smtpd_milters = unix:/opendkim/opendkim.sock, unix:/opendmarc/opendmarc.sock, unix:/clamav/clamav-milter.ctl

Rechargez la configuration de Postfix :

service postfix reload

Voili voilou

Évènements à venir

N'hésitez pas à vous inscrire