Combat contre le SPAM

Après un long vide, me revoici. Aujourd’hui, nous allons parler mails. Plus précisément, serveurs mails et anti-spams.

Je ne fais pas confiance dans les services type GMail, yahoo, laposte.net et cie pour héberger ma messagerie, et ce pour diverses raisons : stockage limité et/ou dans des pays pas forcément respectueux de la vie privée, interprétation très personnelle du protocole IMAP (gmail), plantages, politique de sauvegarde inconnue … Possédant un serveur dédié discount chez un fournisseur bien connu, je préfère donc gérer tout ca moi même.

Comme tout administrateur de serveur mail, je me suis confronté au problème de la lute contre le SPAM (ou pourriel, courriel non solicité …). En effet, il suffit de mettre en place un serveur SMTP en ligne pour voir arriver moultes publicités, tentatives d’escroquerie et de hameçonnage. La problématique est souvent posée comme suit : « comment filtrer le spam ? ». Je préfère la poser comme celà : « Comment réduire l’impact du spam sur l’utilisation quotidienne de la messagerie ».

Les approches communément  rencontrées sont les suivantes (ou des variantes) :

  • Le serveur accepte tout les mails, et on laisse faire le client de messagerie
  • Le serveur accepte les mails, puis les transfère à l’anti-spam (ou l’antivirus), qui va décider de le conserver ou non dans la boite du destinataire. Les messages indésirables étant soit supprimés soit mis de coté (dans un dossier ou une boite au lettre dédiés).

Ces approches sont problématiques vis à vis des faux positifs. En effet, un mail légitime, mais détecté comme spam aura de fortes chances de subir un destin tragique : être supprimé sans avoir été lu.

  • Supprimé par le système anti-spam ou
  • Non attendu, et perdu au milieu des trop nombreux vrais positifs, il se fera supprimer par l’utilisateur.

Dans les deux cas, l’expéditeur n’aura aucun retour et pourra penser que le mail est arrivé à destination. C’est, pour moi, ici que le bat blesse. J’ai donc cherché, lorsque j’ai mis en place mon anti spam, à respecter ces deux principes :

  • Le nombre de mails classés comme spam doit être le plus réduit possible : le temps passé à vérifier le contenu de « la boite spam » ne doit pas être prohibitif.
  • Un mail qui n’arrive pas dans la boite du destinataire doit être refusé au serveur expéditeur, et jamais détruit en silence. Ainsi, l’expéditeur est notifié et peux agir en conséquence.

Ma solution technique :

Elle utilise les logiciels Exim, Spamassassin.

Spamassassin permet d’attribuer des « scores » aux mails. Plus le score d’un mail est haut, plus le mail à des chances d’être indésirable.

Lorsqu’un mail est recu, à la fin de la transmission, mais avant de confirmer la bonne réception et clore le dialogue SMTP, Exim le fait analyser promptement par spamassassin.  En fonction du score retourné, Exim va donc accepter ou refuser le mail. On choisira tout d’abord un score limite relativement haut (ex : 10.0).

Si le mail est accepté, mais que le score reste supérieur à un seuil défini (ex : 1.0), un tag  [SPAM xx] est ajouté, ou xx correspond au score. Ce tag permettra le classement par le client de messagerie (ou dans mon cas, par Sieve).

Les seuils pourront ensuite être ajustés après une période d’observation, et/ou en fonction de la boite mail.

Ajout du greylisting dans l’équation :

Le greylisting permet de refuser temporairement un mail douteux. Le SMTP destination demandant à l’expéditeur : « laisse moi le temps de la réflexion, recontacte moi dans 30mn ». Cette solution à deux avantages : 1. de nombreux spambots sont incapable de gérer ce type de refus, et ne renverrons jamais le message. 2. Les 30mn de délai vont permettre aux RBL (blacklists) utilisées par spamassin d’être mises à jour, et de lever le doute lors d’une éventuelle réexpédition.

Afin d’éviter d’être trop invasif, et de retarder les correspondances, le greylisting ne devra être utilisé que lorsque le score spamassassin est suffisant pour avoir un doute.

Bannissement des émetteurs récalcitrants :

Comment éviter que notre pauvre serveur se fasse harceler par de méchants spambots ?

A chaque spam refusé, j’attribue 5 points à l’IP émettrice . J’ajoute aussi 2 points lorsque le destinataire n’existe pas.

Au delà d’un certain score, Exim refuse gentiment les mails, et je rajoute 1 point à chaque fois que l’IP insiste. (un serveur légitime va ici pouvoir prévenir l’expéditeur).

Dépassé un score bien supérieur, l’IP est bannie pour 1 journée. Ce système permet de réduire fortement la charge de spamassassin.

En espérant que mon expérience pourra vous aider. Un prochain post pourra détailler la configuration des différents éléments. En attendant, vous pourrez trouver un début d’exemple là : http://struction.de/

3 commentaires sur “Combat contre le SPAM”

  1. Yves Denan dit :

    Alors là c’est carrément intéréssant. comment faire pour être tenu informé de ton tuto en préparation ?

    Merci d’avance

Laisser une réponse à tzim