Objectif : à partir d’un email considéré comme spam dans une boite mail, déterminer si nous pouvons identifier rapidement une cause évidente ou pas.

Prérequis :

  • avoir une machine capable de lancer un processus Docker
  • avoir netcat installé (par défaut sur la plupart des Unix like, dont MacOS)

Lancer une instance de Spamd

Pour traiter facilement notre problème, nous allons confier la tâche d’analyse à SpamAssassin, et plus précisément son démon SpamD.

Afin d’obtenir simplement une instance de SpamD convenablement configurée sans devoir toucher à une éventuelle instance existante et sans lutter contre la configuration parfois délicate de ce soft, nous allons utiliser une version packagée avec Docker.

> docker run -d -p 783:783 dinkel/spamassassin

À partir de là, nous avons un process SpamD en écoute sur le port 783 de la machine. Attention si vous utilisez docker-machine, il écoute sur l’adresse IP virtuelle de la machine Docker, sinon sur l’adresse locale soit 127.0.0.1.

Préparer l’email

Pour passer dans le filtre de SpamD, nous allons nous faire passer pour SpamC, le client de SpamD.

C’est très simple : il suffit d’ajouter au contenu de l’email préalablement enregistré au format EML une ligne de préfixe et une ligne vide. Attention sous la plupart des Unix les sauts de lignes sont des LF, mais SpamD travaille uniquement avec des CRLF. Choisissez la bonne option au moment de l’enregistrement.

Le préfixe dont nous avons besoin : SYMBOLS SPAMC/1.5

Nous sauvegardons l’email modifié dans un fichier nommé email.spamc.

Pour aller plus loin, la spécification du protocole SpamD.

Lancer l’analyse SpamAssassin

Nous pouvons alors lancer l’analyse :

> cat email.spamc | nc 127.0.0.1 783

Nous envoyons le contenu du fichier vers SpamC via Netcat (commande nc) qui devrait répondre en quelques secondes.

Comprendre les résultats

SpamD va répondre avec les quatre éléments suivants :

  • le statut du message, spam ou non
  • la note du message
  • le seuil utilisé pour classer le message (le message est spam si la note est supérieure au seuil)
  • la liste des règles utilisées pour la notation

Nous vérifions le statut et la note : en dessous de seuil/2, il n’y a pas lieu de s’inquiéter. Si la note est élevée ou que le statut est spam, alors nous pouvons détailler les règles appliquées. Attention :

  • certaines règles sont négatives : elles confortent le statut NON Spam, par exemple la combinaison DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU
  • certaines règles ne sont pas symétriques : par exemple DKIM_INVALID peut dire non(DKIM_VALID) ou simplement que le module de validation n’est pas actif

La liste officielle de règles n’est pas toujours à jour, n’hésitez pas à faire une recherche sur une règle absente de la spécification pour la comprendre.