Combattre les pourriels avec Spamassassin

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.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *