Comment installer un filtre anti-spam sur son serveur de messagerie (spamassassin)

Par le dans . Marqué comme , , , avec 10 Commentaires

Comment installer un filtre anti-spam sur son serveur de messagerie (spamassassin)

Afin de commencer à protéger un serveur de Mails / Courriels, il peut être intéressant et très pratique d’installer un Anti-Spam. Je vais donc dans cet article vous expliquer comment installer et configurer un Anti-Spam sur un serveur tournant sur la distribution GNU/Linux Debian.

Informations importantes :
Ce billet se base sur la dernière distribution « stable » de Debian GNU/Linux qui est la version 6.0.1, nom de code squeeze. Elle a été annoncée le 19 mars 2011. Pour suivre ce billet, il est nécessaire d’avoir un serveur de messagerie installé et opérationnel.
Le paquet que nous utiliserons pour l’installation et la configuration de l’Anti-Spam se nomme « spamassassin ».

Quelques explications :

Son fonctionnement est « simple » à comprendre puisque l’on va modifier la configuration de notre serveur de messagerie pour que celui-ci redirige les messages reçus vers notre Anti-Spam.
Une fois les messages pris en charge par Spamassassin, celui-ci va ensuite réaliser plusieurs essais/tests qui lui permettront de donner une « note » aux messages qu’il aura analysés.

Dans le cas où ce fameux « score » dépasserait la valeur “5“ qui est définie par défaut dans la configuration de Spamassassin, le message traité sera considéré comme un spam et son objet sera alors modifié pour que la notion ****SPAM**** y soit ajoutée.

Les entêtes du message marqué comme spam seront également modifiées, pour que notre serveur de mails puisse traiter le message différemment des autres et le déplacer dans un dossier spécifique (ou non) en fonction de la configuration mise en place.

Mettre en place l’Anti-Spam :

Commençons tout d’abord par installer notre anti-spam :

aptitude install spamassassin

Les paquets suivants seront également installés :

libdigest-hmac-perl{a} libdigest-sha1-perl{a} libio-socket-inet6-perl{a} libmail-spf-perl{a} libnet-dns-perl{a} libnet-ip-perl{a} libnetaddr-ip-perl{a} libsocket6-perl{a} libsys-hostname-long-perl{a} re2c{a} spamassassin spamc{a}

Il faut ensuite créer un utilisateur spécifique à Spamassassin :

useradd --home /var/spamassassin --create-home --system spamd

Et changer le propriétaire du répertoire /var/lib/spamassassin avec la commande suivante :

chown spamd:spamd /var/lib/spamassassin

Cet utilisateur aura donc les privilèges nécessaires pour démarrer le démon et possédera un répertoire personnel qui contiendra les informations que l’on nomme d’apprentissage.
C’est à dire toutes les règles et filtres que spamassassin utilisera pour « noter » les messages qu’il traitera …

Il faut ensuite éditer le fichier /etc/default/spamassassin pour activer le mode démon de Spamassassin qui est par défaut désactivé :

nano /etc/default/spamassassin

Il faut ensuite modifier la valeur "ENABLED=0" en "ENABLED=1"

Dans le même fichier, il faut ensuite donner à spamassassin le nom de l’utilisateur que l’on vient de créer en modifiant la ligne suivante :

OPTIONS="--create-prefs --max-children 5 --helper-home-dir --username spamd -H /var/lib/spamassassin -s /var/log/spamd.log"

Une fois ces modifications réalisées, il faut lancer le démon :

/etc/init.d/spamassassin start

Si le démon a démarré correctement, il faut préciser à notre serveur de mails (dans notre cas Postfix) qu’il doit rediriger tous les messages reçus vers le filtre de Spamassassin.
Cette modification doit être effectuée dans le fichier /etc/postfix/master.cf pour y ajouter l’option suivante :

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

Attention, ajoutez la ligne -o content_filter=spamassassin au niveau de la partie smtp même si vous utilisez le smtps

Il faut ensuite créer le filtre à la fin de ce même fichier de configuration en ajoutant les lignes suivantes :

# Filtre permettant à Spamassassin de scanner les messages reçus
spamassassin unix  -       n       n       -       -       pipe
   user = spamd argv=/usr/bin/spamc -f -e
   /usr/sbin/sendmail - oi -f ${sender} ${recipient}

Informations supplémentaires :

  • Le chemin vers le binaire spamc peut varier en fonction de votre distribution, argv vaudra alors le /chemin/vers/le/binaire/spamc de votre serveur !!
  • De la même façon, le chemin vers le serveur de messagerie vaudra alors le /chemin/vers/votre/serveur/de/messagerie
  • N’hésitez pas à ajouter des lignes de commentaires dans vos fichiers de configurations car cela vous sera utile le jour où vous retomberez sur vos modifications antérieures !!

Personnaliser son installation :

J’ai ensuite modifié la configuration par défaut de spamassassin en éditant le fichier suivant /etc/spamassassin/local.cf pour y modifier/dé-commenté les lignes suivantes :

rewrite_header Subject *****SPAM***** 
required_score 3.0 
report_safe 0
use_bayes 1
bayes_auto_learn 1 

Entrons dans les détails :

  • rewrite_header Subject *****SPAM***** :
    Ici vous pouvez modifier le message qui s’affichera dans le sujet de vos courriels. Il est également possible de remplacer ce message par la variable SPAM _SCORE_ qui permet d’afficher le score d’un message dans son sujet !
    En voici un exemple :
    Exemple d'un email avec la note de Spamassassin dans l'objet
  • required_score 3.0 :
    Ici vous pouvez modifier le scoring des messages sur cette ligne en sachant que spamassassin attribue une note à chaque message en fonction de conditions qu’il considère comme vraies.
    Par exemple un message contenant un mot clef comme viagra ou porn prend un score de +2, un score de -2 est attribué à un message provenant d’un hôte connu. Si la valeur dépasse ‘3’ dans ce cas (mais 5 par défaut) alors le message est marqué comme SPAM !!
  • bayes_auto_learn 1 :
    Cette ligne active l’apprentissage automatique des filtres de Spamassassin

Afin que notre serveur de messagerie (ici Postfix) prenne en compte la nouvelle configuration, il faut le recharger :

postfix reload ou /etc/init.d/postfix restart

Si aucune erreur n’a été détectée, le message suivant s’est affiché à l’écran :
postfix/postfix-script: refreshing the Postfix mail system

La configuration de notre anti-spam est maintenant terminée et fonctionnelle. Nous allons donc réaliser quelques tests afin de contrôler si tout fonctionne normalement.

Phase de tests :

Il est possible de simuler la détection d’un courriel considéré comme un spam (un peu comme avec le faux virus EICAR pour ceux qui connaissent, sinon un peu de lecture ne vous fera pas de mal.
Il faut pour cela envoyer un courriel contenant dans le corps du message de test la chaîne de caractère suivante :

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

Pour information, ce fameux spam « faux positif » génère un scoring de 1000 et en sachant que le score par défaut qui marque un message comme étant un spam est de 5, je peux vous dire que spamassassin ne lui laissera aucune chance ^^

Si notre anti-spam fraîchement installé fonctionne, celui-ci devrait délivrer le message spam dans votre boite de réception avec un sujet modifié et contenant la mention ***SPAM*** ou le message que vous aurez renseigné dans le fichier local.cf de Spamassassin. Pour réaliser d’autres essais, il est également possible de rédiger un courriel de test contenant des mots clefs comme viagra, porn, sexe etc.

Il est également possible pour plus de « confort » de rediriger les messages considérés comme spam dans un dossier qui aura été créé à cet effet, mais je vous avouerai que n’ayant pas besoin de ce type de configuration, je n’ai pas poussé plus loin la réflexion …

Maintenance de notre Anti-Spam :

Notre « spam killer » étant maintenant en place, il est important de la maintenir à jour ! Pour cela, il est possible de mettre à jour la base de règles de filtres.
C’est réellement ce qui permet à spamassassin d’être tenu à jour des nouvelles règles de détection du spam, donc exécuter cette commande régulièrement ne peut pas faire de mal :

/usr/bin/sa-update

Informations supplémentaires :

Si jamais vous rencontrez des problèmes avec votre installation de Spamassassin, n’oubliez pas d’aller consulter vos fichiers de logs qui se trouvent dans : /var/log/spamd.log car ceux-ci peuvent être une vraie mine d’informations pour vos débogages !!

Mes « marque TA page » glanés lors de ce périple anti-spam :



Un site permettant de savoir si l’adresse IP d’un serveur est blacklistée : MxToolbox
Un générateur de configuration pour Spamassassin : Yrex

Voici les sources que j’ai utilisé pour réaliser ce billet :
– Le site The Apache SpamAssassin Project – spamassassin.apache.org
– Le wiki Apache.org concernant Spamassasin – wiki.apache.org/spamassassin
– L’excellent blog de Gege2061.homecomputing.fr

Source de l’image utilisée en illustration : Dedewatson.com

10 Commentaires


    • Tu l’as installé en utilisant le billet ou le système était déjà présent sur ton serveur ?
      Si jamais tu as une config différente, n’hésites pas à partager tes astuces !

      En tout cas, merci pour le compliment :)

  1. Pingback : Qu’est-ce que le Leet Speak ? « Sublimigeek

  2. Pingback : Le SPF ou l’autorisation d’émettre un mail ! « Sublimigeek

  3. Pingback : Installer et configurer le paquet Fail2ban sur un serveur | Sublimigeek | Geek, Astuces, High Tech et découvertes du Net

  4. Bonjour,

    J’ai installé spamassasin sur mon dédié il ya plusieurs mois maintenant, et il fonctionne tres bien. J’ai cependant une petite question… certain mails sont tagué et passent jusque gmail, ce qui est tres bien.mais parfois la version qui arrive jusque gmail est tronquée, et la version complete du mail se retrouve dans un dossier de quanrantaine. Donc quand il s’agid ‘un faux positif, je dois aller dans les méandre du sereur pour retrouver le mail en question et le lire « en dure ». Donc ma question : commnt gerer la quarantaine, ou alors comment emepcher cette mise en quarantaine et laisser les mails complet passer quand meme jusque gmail?

    Merci

    • Salut,

      Normalement (d’après ce que je sais mais je n’ai jamais poussé mes recherches sur ce point), la quarantaine ne se gère pas vraiment …
      Le principe serait de ne pas configurer de quarantaine et d’ajouter une gestion de redirections des mails en fonction de leur score attribué par Spamassassin.
      Cela fait longtemps que je n’ai pas touché à ma configuration, mais c’est que j’avais mis en place à l’époque sur mon serveur il me semble ^^

      J’espère t’avoir un peu aider, si ce n’est pas le cas, repasses par ici et on fera ensemble une analyse plus poussée du fonctionnement de Spamassassin.

      @+

  5. Bonjour,

    attention une erreur s’est glissé dans votre tutoriel

    # Filtre permettant à Spamassassin de scanner les messages reçus
    spamassassin unix – n n – – pipe
    user = spamd argv=/usr/bin/spamc -f -e
    /usr/sbin/sendmail – oi -f $ {sender} ${recipient}

    Il ne faut pas mettre d’espace entre le $ et le { sinon la réception des mails ne se fait pas.

N'hésitez pas, laissez un commentaire — DoFollow activé sur ce site —


« »