Filtrer les spamsParfois le matin, en lançant Thunderbird, je me demande à quoi ressemblerait le monde si le courrier électronique n’existait pas. Toutes ces missives que je ne lirais pas :

  • La supplique du fils d’un célèbre dictateur africain qui m’invite à planquer son pactole dans ma penderie, moyennant une modeste contribution initiale de ma part.
  • Un courrier personnel de Bill Gates pour m’annoncer que j’ai gagné le jackpot de la loterie annuelle Microsoft avec une demande de confirmation pour savoir si l’adresse électronique de l’heureux gagnant est bien valide.
  • Une exhortation à augmenter la taille de mon attribut viril afin de satisfaire ma partenaire frustrée par les dimensions ridicules dudit membre.
  • Une fausse lettre d’amour de Britney Spears, accompagnée d’une bombe à retardement numérique censée détruire mon système.

Nous vivons une époque formidable.

300 milliards de spams par jour

En janvier 2004, Bill Gates avait annoncé solennellement que « le problème du spam sera résolu d’ici 2006, car les ingénieurs Microsoft sont en train d’étudier la question ». Vingt ans après cette prophétie optimiste, près de 300 milliards (!) de courriers non sollicités sont envoyés quotidiennement sur tous les réseaux de la planète, au grand dam des utilisateurs excédés par ce tsunami numérique.

En attendant que les ingénieurs Microsoft restent penchés sur la question, on peut déjà utiliser quelques solutions anti-spam qui fonctionnent. Aujourd’hui, nous allons entamer notre lutte contre le spam avec SpamAssassin.

Présentation de SpamAssassin

SpamAssassinSpamAssassin est un programme écrit en Perl qui agit au niveau du serveur mail :

  • Il fait passer un certain nombre de tests à tous les messages.
  • Un score est attribué à chaque message en fonction du résultat de ces tests.
  • Si le score dépasse un certain seuil, le message est considéré comme spam et identifié comme tel dans l’en-tête.
  • Il suffit alors de créer un filtre correspondant dans le client de messagerie.

AstuceDans la pratique quotidienne, le filtrage est assez efficace. SpamAssassin permet d’éliminer un pourcentage significatif de spams sans pour autant envoyer les messages légitimes au nirvana numérique.

Prérequis

Dans l’exemple ci-dessous, nous allons installer SpamAssassin sur un serveur dédié tournant sous Rocky Linux 8, et disposant d’un serveur mail IMAP avec Postfix et Dovecot.

ImportantPour la durée de l’installation et des premiers tests de filtrage de spams, nous allons basculer SELinux en mode permissif pour éviter de nous retrouver confrontés à des blocages mystérieux :

# setenforce 0

Installation

SpamAssassin est fourni par les dépôts officiels de Red Hat Enterprise Linux et Rocky Linux. On notera que l’application dépend d’une quantité importante de modules Perl :

# dnf install -y spamassassin

Configuration de SpamAssassin

Éditer /etc/mail/spamassassin/local.cf comme ceci :

# /etc/mail/spamassassin/local.cf
required_hits 5
report_safe 0
required_score 5
rewrite_header Subject [SPAM]

Quelques mots sur les options utilisées :

  • required_hits définit le seuil du filtrage. Un paramétrage à 5 est généralement considéré comme efficace pour une PME. Plus ce chiffre est réduit, plus le filtrage sera agressif. Si vous êtes un labo d’analyes et que vous recevez régulièrement des mails qui tentent de vous vendre des produits pharmaceutiques, vous avez intérêt à définir un score plus élevé, 8 par exemple.
  • report_safe décide si le message en question doit être supprimé (1) ou redirigé vers la boîte de réception avec une réécriture de l’en-tête (0).
  • required_score définit le score pour tous les messages envoyés au domaine, en allant du message légitime (0) au spam résolument pourri (5). Si nous abaissons ce score à 3, cela nous permettrait certes d’éliminer un plus grand nombre de courriers non sollicités. En revanche, on augmenterait la probabilité d’avoir des faux positifs, c’est-à-dire des messages légitimes identifiés comme spams.
  • rewrite_header se charge de réécrire l’en-tête du message. En l’occurrence, la chaîne de caractères [SPAM] est ajoutée au sujet du message.

La prochaine étape consiste à ajouter l’utilisateur système spamd et le groupe système correspondant :

# groupadd --system spamd
# useradd --system -c "SpamAssassin User" -g spamd -s /bin/false \
  -d /var/log/spamassassin spamd

Créer le répertoire système de SpamAssassin avec les permissions appropriées :

# mkdir -v /var/log/spamassassin
mkdir: created directory '/var/log/spamassassin'
# chown spamd:spamd /var/log/spamassassin/

Activer et démarrer le service :

# systemctl enable spamassassin --now

Mettre à jour les règles de SpamAssassin :

# sa-update -v
Update available for channel updates.spamassassin.org: -1 -> 1915243
http: (curl) GET https://spamassassin.apache.org/updates/MIRRORED.BY, success
http: (curl) GET http://sa-update.verein-clean.net/1915243.tar.gz, success
http: (curl) GET http://sa-update.verein-clean.net/1915243.tar.gz.sha512, success
http: (curl) GET http://sa-update.verein-clean.net/1915243.tar.gz.asc, success
Update was available, and was downloaded and installed successfully

Configuration de Postfix

Éditer /etc/postfix/master.cf. Ajouter une option tout en haut du fichier :

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

Ensuite, ajouter ceci tout à la fin du fichier :

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

Redémarrer Postfix :

# systemctl restart postfix

Premier test

Envoyer un mail depuis un compte externe. Le sujet peut être librement choisi. Dans le corps du message, copier/coller la chaîne de caractères suivante :

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Si tout s’est bien passé, la boîte de réception contient un message marqué [SPAM] :

Test SpamAssassin

L’opération de filtrage est enregistrée comme ceci :

# journalctl | grep "identified spam"
Jan 17 11:42:46 sd-155842 spamd[120781]: spamd: identified 
spam (1002.6/5.0) for spamd:987 in 0.7 seconds, 1811 bytes.

Mise à jour automatique des règles

Éditer un petit script shell pour la mise à jour des règles et le redémarrage du service :

#!/bin/bash
#
# spamassassin-update.sh

sa-update
systemctl restart spamassassin

exit 0

Ranger ce script dans un endroit approprié comme ~/bin et définir des permissions appropriées :

# chmod +x spamassassin-update.sh

Ensuite, définir une tâche automatique pour la mise à jour quotidienne :

# crontab -e
# Update SpamAssassin
00 01 * * * /root/bin/spamassassin-update.sh 1> /dev/null

Configuration de Thunderbird

Une méthode efficace pour séparer le bon grain de l’ivraie, c’est de définir un filtre dans Thunderbird. Ouvrir l’interface de définition des filtres dans Outils > Filtres de messages et créer un nouveau filtre comme ceci, par exemple :

Filtrage spams Thunderbird

Dorénavant, les spams sont automatiquement redirigés vers la Corbeille, et il ne reste plus que quelques faux négatifs que l’on pourra trier manuellement dans la boîte de réception.

SpamAssassin et SELinux

Les premières tentatives de débogage avec SELinux peuvent mener à des résultats quelque peu déroutants. Avec un peu d’obstination, on finit par tomber sur le booléen qui va bien :

# setsebool -P spamd_enable_home_dirs 1

Par la suite, SELinux cause un autre problème. En résumé, Spamassassin n’arrive pas à accéder à /var/log/spamassassin/.spamassassin. Les fichiers de ce répertoire ont un contexte SELinux var_log_t.

En temps normal, Spamassassin est capable d’écrire dans /var/lib/spamassassin. On va donc prendre le contexte de ce répertoire (spamd_var_lib_t) et l’appliquer à /var/log/spamassassin.

# semanage fcontext -a -t spamd_var_lib_t '/var/log/spamassassin(/.*)?'
# restorecon -Rv /var/log/spamassassin/

À partir de là, plus rien à signaler :

# sealert -a /var/log/audit/audit.log
100% done
found 0 alerts in /var/log/audit/audit.log
# setenforce 1

La rédaction de cette documentation demande du temps et des quantités significatives de café espresso. Vous appréciez ce blog ? Offrez un café au rédacteur en cliquant sur la tasse.

 


0 commentaire

Laisser un commentaire

Emplacement de l’avatar

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