Spamassassin et Amavis


Warning: Undefined array key “code” in /var/www/memodugeek/wp-content/plugins/pastacode/build/template.php on line 46

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /var/www/memodugeek/wp-content/plugins/pastacode/build/template.php on line 46

Warning: Undefined array key “code” in /var/www/memodugeek/wp-content/plugins/pastacode/build/template.php on line 46

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /var/www/memodugeek/wp-content/plugins/pastacode/build/template.php on line 46
$config['markasjunk_spam_cmd'] = 

Aujourd’hui, on va parler de spam, ces pubs qui pourrissent nos boîtes mail. Dans un précédent article, j’avais expliqué comment installer ISPConfig, et parmi le tas de logiciel qu’on a installé se trouvait Amavis et Spamassassin, dont je n’avais pas parlé plus que ça, ainsi que Clamav dont on va moins parler. On va corriger ça.

Commençons par Amavis, qui est un logiciel central. C’est un logiciel qui filtre le contenu des mails en se couplant avec d’autres logiciels. En se couplant avec Spamassassin il va pouvoir filtrer les spam et à l’aide de Clamav il va éliminer les mails contenant des virus. Le tout avec la coopération de Postfix, le serveur mail, également installé lors de l’installation d’ISPConfig.
Autant le couple Amavis/Clamav fonctionne très bien avec touts les réglages par défaut, autant le couple Amavis/Spamassassin a besoin d’un petit coup de main pour être vraiment efficace. Dans cet article on va donc s’intéresser à comment configurer Spamassassin efficacement pour lutter contre les spams

1) Spamassassin, quésaco ?

Avant de se lancer dans la configuration, voyons d’abord comment fonctionne Spamassassin. C’est un logiciel qui fait passer à chaques mails une série de tests, appelés règles, et dont on peut trouver la liste ici. A chaque règle correspond une note, et le cumul des notes de toutes ces règles va représenter le score du mail. Par défaut, le système va considérer tous les mails avec un score supérieur à 5 comme un spam. Donc plus le score est haut, plus le mail a de chance d’être un spam.

Prenons la règle SUBJ_ALL_CAPS comme exemple pour expliquer le principe un peu plus en détail. Cette règle vérifie si le sujet du mail est écrit uniquement en majuscule. Comme toutes les règles, une note est associée à cette règle. Par défaut, cette règle vaut 1,506.
Dés qu’un mail est reçu, cette règle, comme toutes les autres, va être jouée. Si le sujet du mail est écrit uniquement en majuscule, la règle va être activée pour ce mail et augmentera le score du mail de 1,506. Si le sujet n’est pas uniquement en majuscule, elle ne sera pas activée sur ce mail et n’augmentera pas le score du mail.
Toutes les règles fonctionnent sur le même principe, de manière binaire. Si elles sont vraies, elles augmentent ou diminuent le score du mail d’une valeur fixe propre à chaque règle et si elles sont fausses, elles ne modifient pas le score du mail.

Ca fera peut-être tiquer certains de lire que les règles augmentent ou diminuent le score. L’écrasante majorité des règles sont des malus, dans le sens où lorsqu’elles sont actives elles augmentent le score du mail pour augmenter les chances qu’il soit classé en tant que spam. Comme SUBJ_ALL_CAPS par exemple.
Mais quelques unes sont des bonus. Comme USER_IN_SPF_WHITELIST par exemple, qui s’active si l’adresse de l’expéditeur est dans une liste blanche. Ces règles diminuent le score du mail lorsqu’elles sont actives pour augmenter les chances que le mail soit classé comme ham (l’inverse d’un spam, un mail désiré). La note de USER_IN_SPF_WHITELIST par exemple est de -100.

Comme expliqué plus haut, si le score est suffisamment haut, le mail sera classé comme spam. Les mails marqués comme spam vont voir leur titre modifié avec l’ajout du flag SPAM (suivant la configuration) et certains champs vont être ajoutés dans l’entête du mail :

  • X-Spam-Flag : indique si le mail est considéré comme spam ou ham.
  • X-Spam-Score : indique le score du mail calculé par Spamassassin.
  • X-Spam-Level : indique le niveau de spam lié au score, sous forme d’étoile. Si le score du mail est 2.5 par exemple, le champ X-Spam-Level affichera “**”.
  • X-Spam-Status indique le détail du calcul du score en affichant les règles activées sur ce mail et la note de chacunes d’elles.

Parmi toutes ces règles, il y en a une, ou plutôt un ensemble, qui est toujours activée. C’est un ensemble de règle utilisant un filtre bayésien (n’étant pas mathématicien, je vous laisse chercher sur Wikipédia comment fonctionne en détail un filtre bayésien 😉 ). A la différence des autres tests, le filtre bayésien est amélioré avec le temps chaque fois que vous marquez manuellement un mail comme spam ou comme ham via le programme sa-learn, un outil interne de Spamassassin qui sert à alimenter la base de donnée du filtre bayésien.
Pour chaque mail, il va calculer le pourcentage que le mail soit un spam. Si, par exemple, il estime que le mail a entre 40 et 60% de chance d’être un spam, il va activer la règle BAYES_50 sur ce mail et augmenter le score de 0,8. Si l’estimation est entre 60 et 80%, il va activer la règle BAYES_60 qui augmente le score de 1,5, et ainsi de suite.

Et comme je vous disais, il apprend de ses erreurs si vous lui expliquez que tel mail ne doit pas être considéré comme un spam. On va donc voir deux méthodes, qui peuvent être combinées, pour marquer manuellement des mails comme spam ou ham et ainsi alimenter la base donnée du filtre bayésien.
La première méthode va utiliser Roundcube, un des webmail les plus utilisés.
La seconde méthode va utiliser Thunderbird (ou tout autre gestionnaire de mail).

Petite précision : toutes les commandes indiquées dans cet article doivent être lancées en root. Idem quand je demande d’ouvrir ou d’éditer un fichier.

2) Activer le dépôt Backports sous Debian 8

Avant toute chose, si vous utilisez encore Debian 8, il va falloir activer le dépôt Backports afin de pouvoir installer Roundcube.

Petite explication sur Backports histoire que vous compreniez ce que vous faites si vous n’êtes pas familier avec Debian. Il faut savoir que Debian est scindée en plusieurs branches :

  • Stable : c’est la dernière version sortie. Au moment où j’écris ces lignes la version stable est Debian 9
  • Testing : c’est la version en développement de la prochaine version (donc Debian 10 à ce moment)
  • Unstable (appelée Sid également) : ce n’est pas vraiment une future version de Debian. C’est une branche qui permet de tester tous les paquets récent (Debian visant la stabilité, la version Stable a généralement des versions un peu ancienne des paquets). Cette branche permet d’avoir accès aux versions récentes des différents logiciels supportés par Debian mais, comme son nom l’indique, peut avoir des problème de stabilité.
  • Experimental : cette branche est une version plus extrême de Unstable contenant les versions en cours de développement (appelées version alpha). Comme vous vous en doutez, ce n’est pas un modèle de stabilité, loin de là.

Les paquets sous Debian ont le cycle de vie suivant :

  • le paquet est ajouté à la branche Experimental.
  • Une fois validé sous Experimental, il passe dans la branche Unstable. Certains paquets arrivent directement dans la branche Unstable sans passer par Experimental.
  • Ensuite le paquet passe dans la branche Testing une fois validé
  • Puis une fois validé sous Testing il passe dans la branche Stable.Pourquoi je vous parle de tous ça ? Parce que le dépôt Backports permet d’installer dans la branche Stable des paquets provenant de la branche Testing.

Sous Debian 8, Roundcube n’est pas disponible dans le dépôt Stable, mais il est dans le dépôt Backports. Il est par contre disponible sous Debian 9 dans le dépôt Stable.
Pour activer dépôt Backports sous Debian 8, ouvrez le fichier /etc/apt/sources.list et rajoutez les lignes suivantes

[pastacode lang=”bash” manual=”%23%20Backports%20repository%0Adeb%20http%3A%2F%2Fdeb.debian.org%2Fdebian%20jessie-backports%20main%20contrib%20non-free%0Adeb%20http%3A%2F%2Fdeb.debian.org%2Fdebian%20jessie-backports-sloppy%20main%20contrib%20non-free” message=”” highlight=”” provider=”manual”/]

Il ne reste plus qu’à lancer la commande aptitude update (ou apt-get update) pour que le dépôt Backports soit activé.

3) Installation de RoundCube

Pour installer Roundcube, lancez la commande aptitude install roundcube roundcube-plugins. Une fenêtre va apparaître vous demandant si vous voulez configurer la base de donnée pour Roundcube. Répondez oui, puis choisissez “mysql” sur la fenêtre d’après et indiquez le mot de passe de l’administrateur MySQL. Il vous sera ensuite demandé un mot de passe de connexion à la base de donnée pour Roundcube. Soit vous en choisissez un, soit vous laissez vide pour qu’un mot de passe soit créé aléatoirement. Perso j’ai pris le second choix.

4) Configuration Apache

On va maintenant devoir configurer Apache pour pouvoir accéder à l’interface web de Roundcube. Ouvrez le fichier /etc/roundcube/apache.conf.
Décommentez la ligne Alias /roundcube /var/lib/roundcube (supprimez le # devant la ligne). Cette ligne va permettre d’accéder à l’interface web de Roundcube en tapant votrenomdomaine/roundcube. Pour ma part j’ai modifié la ligne de redirection en remplaçant /roundcube par /webmail car je trouve plus intuitif d’accéder au webmail en tapant nomdomaine/webmail. Mais ce n’est absolument pas obligatoire.

 

Il ne reste plus qu’à redémarrer Apache avec la commande systemctl restart apache2.service.

Si vous vous rendez à l’adresse nomdedomaine/roundcube ou adresseip/roundcube si votre serveur n’a pas de nom de domaine rattaché (si vous avez comme moi remplacé /roundcube par /webmail il faut bien évidemment mettre webmail au lieu de roundcube dans l’adresse), l’interface web Roundcube va s’afficher.

5) Configuration Roundcube

Après avoir configurer Apache, on va configurer Roundcube. Ouvrez le fichier /etc/roundcube/config.inc.php . Si toutes vos adresses mail utilisent le même nom de domaine, par exemple toto.fr, ça va être chiant de rentrer à chaque fois dans le champ Server de Roundcube le nom de domaine toto.fr afin de se connecter. Pour remédier à ça, remplacez la ligne $config['default_host'] = ''; par $config['default_host'] = 'toto.fr';

C’est tout pour la configuration de Roundcube. Maintenant que nous pouvons accéder à nos mail via Roundcube, on va voir comment alimenter la base de donnée du filtre bayésien de Spamassassin via Roundcube.

6) Plugin markasjunk2

On va utiliser le plugin markasjunk2. Ce plugin permet de marquer des mails en spam ou ham manuellement en utilisant sa-learn et ainsi améliorer la base de donnée du filtre bayésien.
Etant donnée que sur Debian 8 et 9 la version de Roundcube est respectivement la 1.1.5 et 1.2.3, nous allons prendre la version 1.10 du plugin (pour les versions plus récente il faut Roundcube 1.3).

Allez dans le répertoire /usr/share/roundcube/plugins et lancez la commande wget https://github.com/JohnDoh/Roundcube-Plugin-Mark-as-Junk-2/archive/1.10.zip. Puis lancez la commande unzip 1.10.zip .
Enfin, lancez la commande mv Roundcube-Plugin-Mark-as-Junk-2-1.10/ markasjunk2 pour renommer le dossier.

Lancez la commande ln -s /usr/share/roundcube/plugins/markasjunk2 /var/lib/roundcube/plugins/markasjunk2 afin de créer un lien symbolique nécessaire à RoundCube.

On va maintenant activer le plugin. Ouvrez le fichier /etc/roundcube/config.inc.php et dans la partie

[pastacode lang=”bash” manual=”%24config%5B’plugins’%5D%20%3D%20array(%0A’archive’%2C%0A’zipdownload’%2C%0A)%3B” message=”” highlight=”” provider=”manual”/]

rajoutez “markasjunk2”. Vous devez avoir ceci après modification :

[pastacode lang=”bash” manual=”%24config%5B’plugins’%5D%20%3D%20array(%0A’archive’%2C%0A’zipdownload’%2C%0A’markasjunk2’%2C%0A)%3B” message=”” highlight=”” provider=”manual”/]

Passons à la configuration du plugin. Allez dans le répertoire /usr/share/roundcube/plugins/markasjunk2 . Lancez la commande mv config.inc.php.dist config.inc.php pour renommer le fichier de config puis ouvrez-le.
C’est là qu’on va configurer le plugin pour qu’il utilise sa-learn, l’outil de Spamassassin servant à améliorer la base de donnée du filtre antispam. Vous allez devoir modifier plusieurs lignes :

  • Remplacez la ligne $config['markasjunk2_learning_driver'] = null; par $config['markasjunk2_learning_driver'] = cmd_learn; pour activer le lancement de commande.
  • Remplacez la ligne $config['markasjunk2_debug'] = false; par $config['markasjunk2_debug'] = true; . Cette modification est optionnelle mais c’est conseillé d’activer le mode debug pour pouvoir vérifier que le plugin fonctionne correctement avec Spamassassin
  • Remplacez la ligne $config['markasjunk2_move_spam'] = false; par $config['markasjunk2_move_spam'] = true; . Cette modif aussi est optionnelle. Passer cette ligne à “true” permet de marquer les mail en tant que spam quand on les déplace du courrier entrant vers le dossier spam. Je trouve ça pratique.
  • Remplacer la ligne $config['markasjunk2_move_ham'] = false; par $config['markasjunk2_move_ham'] = true; . Idem que la ligne précédente mais quand on déplace un mail du dossier spam vers le dossier courrier entrant.
  • Remplacer la ligne $config['markasjunk2_spam_cmd'] = null; par[pastacode lang=”bash” manual=”%24config%5B’markasjunk2_spam_cmd’%5D%20%3D%20’sa-learn%20-D%20learn%2Cbayes%20-u%20amavis%20–dbpath%20%2Fvar%2Flib%2Famavis%2F.spamassassin%2F%20–cf%3D%5C’bayes_path%20%2Fvar%2Flib%2Famavis%2F.spamassassin%2Fbayes%5C’%20–prefspath%3D%2Fvar%2Flib%2Famavis%2F.spamassassin%2Fuser_prefs%20–spam%20%25f%20%3E%3E%20%2Fvar%2Fwww%2Flogs%2Fsa-learn.log%202%3E%261’%3B” message=”” highlight=”” provider=”manual”/]

    J’expliquerai cette ligne plus tard.

  • Remplacer la ligne $config['markasjunk2_ham_cmd'] = null; par[pastacode lang=”bash” manual=”%24config%5B’markasjunk2_ham_cmd’%5D%20%3D%20’sa-learn%20-D%20learn%2Cbayes%20-u%20amavis%20–dbpath%20%2Fvar%2Flib%2Famavis%2F.spamassassin%2F%20–cf%3D%5C’bayes_path%20%2Fvar%2Flib%2Famavis%2F.spamassassin%2Fbayes%5C’%20–prefspath%3D%2Fvar%2Flib%2Famavis%2F.spamassassin%2Fuser_prefs%20–ham%20%25f%20%3E%3E%20%2Fvar%2Fwww%2Flogs%2Fsa-learn.log%202%3E%261’%3B” message=”” highlight=”” provider=”manual”/]

  • J’expliquerai cette ligne plus tard également.

C’est tout pour ce fichier.

Maintenant lancer la commande mkdir /var/www/logs puis chown -R www-data:www-data /var/www/logs. La première commande sert à créer le dossier logs dans le répertoire /var/www et la seconde à rendre l’utilisateur www-data, qui exécute toutes les application web comme Roundcube, propriétaire de ce dossier.
Pourquoi créer ce dossier ? C’est lier aux deux lignes que je n’ai pas expliquées. Passons donc aux explications.

$config['markasjunk2_spam_cmd'] et $config['markasjunk2_ham_cmd'] permettent d’indiquer quelle commande lancer quand on marque un mail, respectivement, en tant que spam et en tant que ham. Voyons comment elles sont composées :

  • sa-learn correspond au binaire à exécuter. Comme dit précédemment, sa-learn est un outil de Spamassassin qui permet d’apprendre au filtre bayésien quels mails sont des spams et lesquels n’en sont pas
  • -D learn,bayes : -D active le mode debug de sa-learn et learn,bayes indique quelle partie on veut en mode debug. J’ai seulement activé la partie apprentissage et les messages liés au filtre bayésien.
  • -u amavis sert à indiquer qu’on veut lancer cette commande avec le profil de l’utilisateur amavis (c’est lui qui détient la base de donnée anti-spam)
  • --dbpath /var/lib/amavis/.spamassassin/ indique dans quel répertoire se trouve la base de donnée anti-spam
  • --cf=\'bayes_path /var/lib/amavis/.spamassassin/bayes\' indique où se trouve le filtre bayésien qui sert à tester les mails
  • --prefspath=/var/lib/amavis/.spamassassin/user_prefs indique où se trouve le fichier de préférence à utiliser
  • --spam %f et ---ham %f servent à marquer le mail sélectionné en tant que spam ou ham
  • enfin, >> /var/www/logs/sa-learn.log 2>&1 sert à écrire les logs du mode debug dans le fichier /var/www/logs/sa-learn/log. C’est pour ça que je vous ai fait créer ce répertoire et l’ai rendu accessible à l’utilisateur www-data.

Si vous vous rendez sur Roundcube et vous connectez, vous remarquerez un bouton Pourriel si vous êtes dans les courriers entrants et Not junk si vous êtes dans le dossier spam. Il vous suffit de sélectionner un mail puis de cliquer sur ce bouton pour apprendre au filtre anti-spam que ce mail doit être considéré comme un spam ou comme un ham, selon le dossier dans lequel vous vous trouvez.
Après avoir effectué cette action, vous trouverez dans le fichier /var/www/logs/sa-learn.log les logs liés à sa-learn avec à la fin un message comme celui-ci Learned tokens from 1 message(s) (1 message(s) examined) vous indiquant si le message a bien était examiné et si sa-learn a amélioré son algo avec ce mail.

7) Méthode Thunderbird

Maintenant que la première méthode est traitée, passons à la seconde. Avant de vous lancez dans cette méthode, il faut que vous ayez un serveur mail imap d’activé et configuré. Si vous avez suivi le tuto sur ISPConfig, vous devriez avoir tout ce qu’il faut d’installé. Il faudra penser à ouvrir les port imap (143 ou 993 suivant si vous utilisez le ssl ou non).

Sur votre gestionnaire de mail (Thunderbird ou autre), rajouter votre compte email en utilisant l’imap et non le pop3. Une fois le compte créé, via Thunderbird créez les dossiers Spam_sa-learn et Ham_sa-learn à la racine de votre compte mail. Vous pouvez changez les noms si vous le souhaitez. Vous devriez avoir ceci :

Sur votre serveur, rendez vous dans le répertoire /var/vmail/nomdedomaine/utilisateurmail/Maildir. Si l’adresse mail rajoutée sur Thunderbird était toto@memodugeek.info, le répertoire où aller serait /var/vmail/memodugeek.info/toto/Maildir.  En tapant la commande ls -lah, vous verrez que deux dossier sont présents, .Spam_sa-learn et .Ham_sa-learn.  Ces deux dossiers vont nous permettre d’indiquer à sa-learn que les mails contenus dans .Spam_sa-learn sont des ham qui aurait dû être classés en spam et que les mails contenus dans .Ham_sa-learn sont des spam qui aurait dû être classés en ham.

Tout d’abord il faut que l’utilisateur amavis, qui gère le filtrage des mail en utilisant Spamassassin, puisse avoir accès à ces dossiers. Pour commencer, on va mettre l’utilisateur amavis dans le groupe de vmail, le propriétaire du répertoire /var/vmail ainsi que de ses sous-dossier. Pour ce faire, tapez la commande addgroup amavis vmail.

Ensuite, on va modifier les droits du répertoire /var/vmail. De base, ce répertoire est accessible en lecture/écriture pour le propriétaire (vmail) et en lecture seule pour les utilisateurs faisant parti du groupe vmail. On va modifier ça pour que les utilisateurs membre du groupe vmail (donc amavis) puisse écrire dans ce répertoire, avec la commande chmod 775 -R /var/vmail/.
On va également modifier les droits des deux dossiers que nous avons créés pour que tous les utilisateurs puissent écrire dedans. Toujours en étant dans le répertoire /var/vmail/nomdedomaine/utilisateurmail/Maildir tapez la commande chmod 777 -R .Spam_sa_learn/ .Ham_sa_learn/

Maintenant que ceci est fait, on va modifier le cron de l’utilisateur amavis. Le cron permet de planifier des tâches. Il permet par exemple de lancer une commande ou un script tous les jours à 17h45 (un exemple parmi d’autres).
Tapez la commande sudo -u amavis crontab -e et choisissez nano si on vous pose la question. Rajoutez les lignes suivantes :

[pastacode lang=”bash” manual=”00%2000%20*%20*%20*%20if%20%5B%20%22%24(ls%20%2Fvar%2Fvmail%2Fmemodugeek.info%2Ftoto%2FMaildir%2F.Spam_sa-learn%2Fcur%2F)%22%20%5D%3B%20then%20sa-learn%20-D%20learn%2Cbayes%20–spam%20%2Fvar%2Fvmail%2Fmemodugeek.info%2Ftoto%2FMaildir%2F.Spam_sa-learn%2Fcur%2F%20%3E%3E%20%2Fvar%2Fwww%2Flogs%2Fsa-learn.log%202%3E%261%20%26%26%20rm%20-R%20%2Fvar%2Fvmail%2Fmemodugeek.info%2Ftoto%2FMaildir%2F.Spam_sa-learn%2Fcur%2F*%3B%20fi%0A01%2000%20*%20*%20*%20if%20%5B%20%22%24(ls%20%2Fvar%2Fvmail%2Fmemodugeek.info%2Ftoto%2FMaildir%2F.Ham_sa-learn%2Fcur%2F)%22%20%5D%3B%20then%20sa-learn%20-D%20learn%2Cbayes%20–ham%20%2Fvar%2Fvmail%2Fmemodugeek.info%2Ftoto%2FMaildir%2F.Ham_sa-learn%2Fcur%2F%20%3E%3E%20%2Fvar%2Fwww%2Flogs%2Fsa-learn.log%202%3E%261%20%26%26%20rm%20-R%20%2Fvar%2Fvmail%2Fmemodugeek.info%2Ftoto%2FMaildir%2F.Ham_sa-learn%2Fcur%2F*%3B%20fi” message=”” highlight=”” provider=”manual”/]

Il faudra évidemment remplacer memodugeek.info et toto par votre nom de domaine et votre utilisateur mail.

Si vous n’avez pas suivi la méthode utilisant Roundcube, il vous faut lancer la commande mkdir /var/www/logs puis chown -R www-data:www-data /var/www/logs. La première commande sert à créer le dossier logs dans le répertoire /var/www et la seconde à mettre l’utilisateur www-data, qui exécute toutes les application web comme Roundcube, propriétaire de ce dossier.
Ensuite, lancez la commande sudo -u www-data touch /var/www/logs/sa-learn.log pour créer le fichier de log.

Ensuite, lancez la commande chmod 777 -R /var/www/logs/*  afin que les fichiers de logs soient accessibles à tous les utilisateurs. Cette dernière commande doit être lancée même si vous avez suivi la méthode Roundcube.

Expliquons un peu ces lignes :

  • 00 00 * * * et 01 00 * * * signifient que ces lignes vont être exécutées tous les jours à 00:00 et 00:01
  • if [ "$(ls /var/vmail/memodugeek.info/toto/Maildir/.Spam_sa-learn/cur/)" ]; then est une condition pour que le reste de la commande s’exécute. Cette condition est que le répertoire /var/vmail/memodugeek.info/toto/Maildir/.Spam_sa-learn/cur/ ne soit pas vide. Ca évitera les remontées de message d’erreur suite à la tentative de supprimer le contenu d’un répertoire vide.
  • sa-learn correspond au binaire à exécuter. Comme dit précédemment, sa-learn est un outil de Spamassassin qui permet d’apprendre au filtre bayésien quels mails sont des spams et lesquels n’en sont pas
  • -D learn,bayes : -D active le mode debug de sa-learn et learn,bayes indique quelle partie on veut en mode debug. J’ai seulement activé la partie apprentissage et les messages liés au filtre bayésien.
  • --spam var/vmail/memodugeek.info/toto/Maildir/.Spam_sa-learn/cur/ indique que sa-learn va scanner les mails contenus dans le dossier .Spam_sa-learn (qui sont en fait stockés dans le sous-dossier cur) et rajouter dans sa base de donnée que ses mails doivent être considérés comme du spam.
  • --ham var/vmail/memodugeek.info/toto/Maildir/.Ham_sa-learn/cur/ indique que sa-learn va scanner les mails contenus dans le dossier .Ham_sa-learn (qui sont en fait stockés dans le sous-dossier cur) et rajouter dans sa base de donnée que ses mails doivent être considérés comme des mail légitimes (ham)
  • >> /var/www/logs/sa-learn.log 2>&1 sert à écrire les logs du mode debug dans le fichier /var/www/logs/sa-learn/log. C’est pour ça que je vous ai fait créer ce répertoire.
  • && rm -R /var/vmail/memodugeek.info/toto/Maildir/.Ham_sa-learn/cur/* (et la seconde avec .Spam_sa-learn) supprime les mails contenu dans les deux dossiers une fois qu’ils ont été analysés par sa-learn.
  • fi indique la fin de la condition.

Si vous recevez un spam qui n’a pas été classé en spam, déplacez-le dans le dossier Spam_sa-learn et à minuit, il sera analysé par sa-learn afin de lui apprendre que ce mail est un spam et il sera ensuite supprimé.
Si vous recevez un mail légitime qui a été classé en spam, déplacez-le dans le dossier Ham_sa-learn et à minuit une, il sera analysé par sa-learn afin de lui apprendre que ce mail n’est pas un spam et il sera ensuite supprimé.
ATTENTION : si c’est un mail important que vous souhaitez conserver, mettez une copie du mail dans le dossier Ham_sa-learn, sinon vous perdrez ce mail !!!

Si vous avez plusieurs adresses mails, il vous suffit de réutiliser la même méthode. Dans le crontab, décalez les heures de lancement de commande d’une minute chaque fois que vous rajoutez des lignes.

6) Configuration ISPConfig

Maintenant, quelque soit la méthode que vous avez suivi, il ne nous reste plus qu’à configurer ISPConfig pour utiliser le filtre anti-spam sur les adresses mails créées.

Dans ISPConfig, allez dans la partie email puis dans Stratégie (sous le menu Filtre anti-spam). Soit vous éditez une stratégie existante, soit vous en créez une nouvelle. Pour ma part j’ai préféré en créer une nouvelle.
Dans l’onglet Stratégie, mettre tout à No.
Allez ensuite dans l’onglet “Niveau du tag”. Voici à quoi servent les différents champs :

  • Niveau du tag de SPAM : indique à partir de quel score l’entête du mail sera modifiée pour rajouter les champs X-Spam-Flag, X-Spam-Score, X-Spam-Level et X-Spam-Status indiquant, respectivement, si le mail est considéré comme spam ou ham, le score calculé par Spamassassin, le niveau de spam lié au score, et le détail du calcul du score.
    Comme je souhaite toujours avoir ses informations, que le mail soit un spam ou pas, j’ai mis ce champ à -999
  • Niveau du tag2 de SPAM : indique à partir de quel score un mail est considéré comme un spam. La valeur par défaut est 5 mais j’ai mis en place une politique plus agressive en mettant ce champ à 0. Vous pouvez adapter cette valeur selon vos besoin.
  • Niveau du kill de SPAM : indique à partir de quel score un mail est supprimé automatiquement dés réception. J’ai mis ce champ à 10 qui est un score assez haut.
  • SPAM modifie le sujet : si vous mettez Yes, ça ajoutera un tag dans le titre des mails considérés comme des spams
  • SPAM tag dans le sujet 2 : indique le tag que vous voulez rajoutez si vous avez choisi d’ajouter un tag. Je suis resté classique et ai choisi [SPAM]

Je n’utilise pas les autres champs.

Enregistrez les modifications et, toujours dans la partie Mail, allez dans le menu Domaine. Sélectionnez votre domaine mail et dans Filtre antispam, choisir la stratégie que vous avez modifiée ou créés précédemment puis enregistrez.

Voilà, tout est configuré.

Quelques dernières précisions.

Si dans les en-têtes des mails vous ne voyez pas de test utilisant le filtre bayésien (vous devez voir BAYES_50=0.8, par exemple, dans l’entête X-Spam-Status), c’est normal. Il faut que vous ayez marqué manuellement 200 mails en tant que spam et 200 en tant que ham pour que Spamassassin utilise le filtre bayésien.
Pour savoir combien de spam et ham ont été appris, lancez cette commande : sudo -u amavis sa-learn --dump magic . Elle vous affichera, entres autres, une ligne non-token data: nspam qui correspond au nombre de mails marqués manuellement comme ham et une ligne non-token data: nham qui correspond au nombre de mails marqués manuellement comme spam.

Si après avoir marqué manuellement 200 mails en spam et 200 en ham, vous voyez dans les entêtes des mails que le filtre bayésien n’est toujours pas utilisé, ouvrez le fichier /etc/amavis/conf.d/50-user et vérifiez que la variable $sa_debug est bien à 0. Si on active le debug, ça fait planter l’activation des filtres bayesiens (me demandez pas pourquoi…).
Il faut ensuite redémarrer amavis avec la commande systemctl restart amavis.service

Une dernière chose. Si vous trouvez les notes par défaut des règles utilisant le filtre bayésien pas à votre goût, il vous est possible de les modifier. Imaginons que vous ayez certains mails avec la règle BAYES_00=-1.9 activée dans l’en-tête (donc considéré par le fitre bayésien comme 0 à 1% de chance d’être un spam) marqués comme spam, deux solutions s’offrent à vous.
Soit votre score limite pour considérer un mail en tant que spam est trop haut et vous le modifiez dans ISPConfig, soit vous pouvez donner plus de poids à la règle BAYES_00 en augmentant sa note (en négatif), ce qui fera diminuer le score des mails ayant cette règle et diminuera leurs chances d’être considérés comme spam.
Pour modifier le score des règles, ouvrez le fichier /var/lib/amavis/.spamassassin/user_prefs en root et ajoutez la ligne score BAYES_00 -3.0. J’ai remplacé la note de la règle BAYES_00 de -1.9 par -3.0, mais vous pouvez mettre la note que vous voulez. Si vous voulez changer la note d’une autre règle, le principe reste le même : score nom_de_la_règle note.
Pensez à redémarrer Amavis avec la commande systemctl restart amavis.service pour que la modification soit prise en compte.

 

Ce long article est enfin fini. A la base je comptais faire un article tout simple sur l’installation de Roundcube, puis Spamassassin et Amavis sont venu se greffer dessus (avec la compréhension du fonctionnement de Spamassassin), puis le plugin de Roundcube pour améliorer le filtre bayésien, puis la méthode utilisant Thunderbird et enfin le réglage d’ISPConfig. D’un article qui devait me prendre 1h à tout casser je suis passé à un article qui m’a pris plusieurs journées ^^”
J’espère donc qu’il vous sera utile 😉


Warning: Undefined array key “code” in /var/www/memodugeek/wp-content/plugins/pastacode/build/template.php on line 46

Deprecated: str_replace(): Passing null to parameter #3 ($subject) of type array|string is deprecated in /var/www/memodugeek/wp-content/plugins/pastacode/build/template.php on line 46

3 réponses pour “Spamassassin et Amavis”

  1. Christophe17 mars 2018 à 14 h 19 minRépondre

    Merci pour l’article (même si en fait j’avais juste besoins de 2 lignes dedans elles m’ont été utiles 🙂

  2. fate19 mars 2018 à 8 h 00 minRépondre

    Ravi d’avoir pu t’être utile 😉

  3. Ping : Installation de ISPConfig sur Debian 9

Répondre à fate Annuler la réponse

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.