Apprentissage MailCleaner (avec Zimbra)

Nous utilisons quelques MailCleaner en interne (devant nos plateformes SaaS) et nous en déployons régulièrement chez des clients.
Un des intérêts de la solution est que MailCleaner est capable d’apprendre depuis les classements HAM et SHAM réalisés sur une plateforme Zimbra (ou autre mais dans cet article, on va parler de Zimbra).

Pour mettre en place cet apprentissage, il faut passer par quelques étapes.
Ce qui est indiqué ci-dessous peut certainement être amélioré (utilisation d’IMAPs, une seule récupération des mails par compte, etc) et doit être adapté à vos propres règles/habitudes.

On commence par récupérer les noms des comptes HAM et SPAM de la plateforme Zimbra.
Sur un des serveurs de la plateforme :

# su - zimbra
zimbra@zimbra:~$ zmprov gacf |grep -i spamaccount
zimbraSpamIsNotSpamAccount: nxigt5q7@zimbra.domain.tld
zimbraSpamIsSpamAccount: yd_8isft@zimbra.domain.tld

Le premier, c’est le compte qui récupère les HAM (faux positifs) et le second, le compte qui récupèrent les SPAM (messages non taggés alors qu’ils auraient du l’être).

Ensuite, via l’interface web (ou la CLI), attribuer à ces comptes des mots de passe et vérifier qu’ils sont accessibles en IMAP.
Ca… Je vous laisse faire. Dans notre cas, on va attribuer les mots de passe passwordHAM et passwordSPAM.

On continue, sur le serveur MailCleaner cette fois, en installant les outils nécessaires :

root@mailcleaner:~# apt-get install fetchmail

Vérifiez dans /etc/default/fetchmail que la dernière ligne est bien : START_DAEMON=no
On ne veut pas que fetchmail tourne en daemon mais uniquement utiliser l’outil en CLI.

On crée ensuite, dans le homedir de root, un fichier .netrc qui sera utilisé par fetchmail.
Ce fichier va contenir deux entrées, une pour chaque compte (HAM et SPAM).
La valeur machine correspond à votre serveur Zimbra (ou zimbra-proxy en multi-serveurs), login c’est le compte et password, je vous laisse deviner.

machine zimbra.domain.tld
login nxigt5q7@zimbra.domain.tld
password passwordHAM

machine zimbra.domain.tld
login yd_8isft@zimbra.domain.tld
password passwordSPAM

Puis, toujours dans le homedir de root, on va créer le script sa-learn.sh (n’oubliez pas de le rendre exécutable).
Ce script utilise fetchmail pour se connecter aux deux boites (en IMAP), récupérer les messages de chaque boite et faire le double apprentissage pour SpamAssassin (Spamc) et BogoFilter (NiceBayes) :

#!/bin/bash
/usr/bin/fetchmail -p IMAP zimbra.domain.tld -u yd_8isft@zimbra.domain.tld -a -k -s -n --folder INBOX -m '/usr/local/bin/sa-learn -p /usr/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf --siteconfigpath /usr/mailcleaner/share/spamassassin --no-sync --spam'
/usr/bin/fetchmail -p IMAP zimbra.domain.tld  -u nxigt5q7@zimbra.domain.tld -a -k -s -n --folder INBOX -m '/usr/local/bin/sa-learn -p /usr/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf --siteconfigpath /usr/mailcleaner/share/spamassassin --no-sync --ham'
/usr/local/bin/sa-learn -p /usr/mailcleaner/etc/mailscanner/spam.assassin.prefs.conf --siteconfigpath /usr/mailcleaner/share/spamassassin --sync

/usr/bin/fetchmail -p IMAP zimbra.domain.tld  -u yd_8isft@zimbra.domain.tld -a -k -s -n --folder INBOX -m '/opt/bogofilter/bin/bogofilter -s '
/usr/bin/fetchmail -p IMAP zimbra.domain.tld  -u nxigt5q7@zimbra.domain.tld -a -k -s -n --folder INBOX -m '/opt/bogofilter/bin/bogofilter -n '

L’exécution du script est assez verbeuse et il est intéressant de récupérer les informations dans un fichier (sa-learn.log, toujours dans le homedir root).
Dans notre example, on va récupérer les informations et supprimer le log précédéent à chaque exécution, via la crontab. Pour cela, il suffit d’ajouter dans /etc/crontab :

15 22 * * *     root    rm -f /root/sa-learn.log ; /root/sa-learn.sh >> /root/sa-learn.log
Ce contenu a été publié dans Zimbra. Vous pouvez le mettre en favoris avec ce permalien.

Les commentaires sont fermés.