Lorsque l’on utilise son propre serveur de messagerie, une des premières choses à mettre en place est un système anti-spam. Continuant avec notre série d’articles sur la configuration d’un serveur IMAP utilisant Postfix et Dovecot, ce billet explique l’installation de Spamassassin sous Fedora. A noter que ce tutoriel s’applique donc aussi aux dérivés de Red Hat, à savoir RHEL, CentOS et consorts, et globalement en ce qui concerne les autres distributions, seules de légères adaptations seront nécessaires pour faire fonctionner Spamassassin.
Installation et fichiers de configurations
L’installation se fait naturellement avec le gestionnaire de paquets yum :
yum install spamassassin
Une fois l’installation faite, il va falloir configurer les règles d’anti-spam. Pour chaque email arrivant sur notre serveur, Spamassassin lui donne un score, celui-ci dépend de plusieurs caractéristiques du message comme les fichiers joints ou les mots-clés. Au départ Spamassassin va certainement laisser passer des pourriels, car comme beaucoup d’anti-spam il doit apprendre pour devenir de plus en plus précis et détecter le vrai spam.
Le fichier de configuration de Spamassassin est local.cf
et se trouve sous /etc/mail/spamassassin/
, son contenu est décrit ci-dessous :
required_hits 5 report_safe 0 rewrite_header Subject [SPAM]
- Required_hits : détermine le poids du filtre, un score faible représente un filtre agressif et inversement. Ainsi un score de 5.0 est en général correct pour une petite organisation avec peu d’utilisateurs.
- Report_safe : Ce paramètre détermine si un message marqué comme spam doit être supprimé ou s’il doit être délivré dans la boite aux lettres (en lui ajoutant un message significatif dans le champ du sujet). Une valeur de 1 supprime le message, alors que 0 délivre le message. Il est bien sur plus prudent de mettre ce paramètre à 0 et de gérer le spam dans sa boite aux lettres.
- Rewrite_header : cette ligne est explicite, pour chaque message marqué comme spam, son sujet sera préfixé par [SPAM].
A propos de spamd et spamc
Spamassassin fonctionne comme ceci : spamd
est le daemon qui attend les requêtes entrantes, lorsqu’un message arrive, spamd
va déléguer le traitement à un processus enfant spamc
. Lorsque le traitement est effectué, le processus enfant renvoit le message à spamd
qui va réécrire le message – dans le cas de l’ajout d’un préfixe dans le sujet de l’email. Le processus enfant spamc
est terminé. Le message est enfin délivré par le serveur de messagerie.
Afin d’éviter des problèmes de permissions, il est recommandé de créer un utilisateur dédié pour Spamassassin.
sudo useradd -s /bin/false -d /var/log/spamassassin spamd sudo chown spamd:spamd /var/log/spamassassin
La partie Spamassassin est terminée, nous allons faire quelques modifications coté Postfix.
Postfix
Editons le fichier master.conf
qui se situe sous /etc/postfix
, en modifiant la ligne smtp
et/ou submission
:
(....) smtp inet n - n - - smtpd -o content_filter=spamassassin (....) submission inet n - n - - smtpd -o content_filter=spamassassin (....)
Et en fin de ce même fichier, ajouter ceci :
spamassassin unix - n n - - pipe user=spamd argv=/usr/bin/spamc -f -e /usr/sbin/sendmail.postfix -oi -f ${sender} ${recipient}
Les règles de Spamassassin sont mises à jour réguliérement avec l’exécution de la commande sa-update
(qui est ajoutée dans un cronjob à l’installation). Nous pouvons lancer cette mise à jour manuellement avant de (re)démarrer Spamassassin et Postfix.
sa-update systemctl restart spamassassin.service systemctl restart postfix.service
Test
Spamassassin fournit un moyen de tester l’arrivée d’un spam, il s’agit du GTUB : Generic Test for Unsolicited Bulk Email. Il suffit alors d’envoyer un email possédant la chaine de caractères ci-dessous :
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Si tout est correct, ce message sera reçu préfixé par [SPAM] et en regardant les headers du message on peut voir les lignes relatives à l’anti-spam :
Return-Path: <fabien@feub.net> Delivered-To: fabien@feub.net (....) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on mailserver.domain.net X-Spam-Flag: YES X-Spam-Level: ************************************************** X-Spam-Status: Yes, score=1001.3 required=5.0 tests=GTUBE,HELO_NO_DOMAIN, HTML_MESSAGE,RDNS_NONE autolearn=no version=3.3.2 X-Spam-Report: * 1000 GTUBE BODY: Generic Test for Unsolicited Bulk Email * 0.0 HTML_MESSAGE BODY: HTML included in message * 1.3 RDNS_NONE Delivered to internal network by a host with no rDNS * 0.0 HELO_NO_DOMAIN Relay reports its domain incorrectly Received: from mail-qc0-f169.google.com (mail-qc0-f169.google.com [209.85.216.169]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by mailserver.domain.net (Postfix) with ESMTPSA id AF97F62528 for <fabien@feub.net>; Fri, 9 May 2014 13:48:57 +0200 (CEST) Received: by mail-qc0-f169.google.com with SMTP id e16so4181471qcx.0 for <fabien@feub.net>; Fri, 09 May 2014 04:51:07 -0700 (PDT) X-Gm-Message-State: ALoCoQnKX12u5qMy6cypPm1TyC/Jz1oqEoKZ4kIaEjfPgoFoZJtU0BYJJpJo12eiuX5vo/mqMyYB X-Received: by 10.224.121.133 with SMTP id h5mr11925046qar.79.1399621867554; Fri, 09 May 2014 04:51:07 -0700 (PDT) MIME-Version: 1.0 (....)
Dernier petit point, il faut noter que Spamassassin se borne à marquer les messages comme étant des pourriels, il ne déplace pas ceux-ci par exemple dans un dossier spam ou junk, ceci doit se faire par des règles de filtrage au niveau du client ou coté serveur.