Gestion des spams avec dovecot
On peut laisser l'antispam faire son travail tranquille dans son coin. Toutefois, c'est intéressant de lui indiquer les quelques mails indésirables qu'il n'a pas détecté ou au contraire les faux-positifs afin qu'il apprenne et devienne de plus en plus efficace.
Si vous utilisez dovecot afin de consulter vos messages avec un client IMAP, il est possible de marquer comme spam les messages que vous déplacez dans le dossier "Junk" (par exemple). De la même façon vous pouvez marquer un message comme légitime si vous le retirez du dossier "Junk".
Notez que cette fonctionnalité pourra être mise en place quel que soit l'antispam que vous utilisez.
L'installation va se dérouler en trois étapes :
1. Installation du plugin.
2. Activation et configuration du plugin.
3. Création des scripts d'apprentissage relatifs à chaque antispam.
Tout ceci est décrit dans la documentation de dovecot.
Pour configurer dovecot de cette façon, nous commençons par installer le plugin pigeonhole qui donnera accès à sieve.
# pkg_add dovecot-pigeonhole
On active ce plugin en ajoutant les lignes suivantes à la fin du fichier "/etc/dovecot/local.conf" :
protocol imap { mail_plugins = $mail_plugins imap_sieve }
Enfin, toujours dans le même fichier, on configure ce plugin. On indique des actions à réaliser selon les emplacements où sont déplacés les messages. :
plugin { sieve_plugins = sieve_imapsieve sieve_extprograms # Un message déplacé dans le dossier Junk est un spam imapsieve_mailbox1_name = Junk imapsieve_mailbox1_causes = COPY imapsieve_mailbox1_before = file:/usr/local/lib/dovecot/sieve/report-spam.sieve # Du dossier des spams vers n'importe ou : le mail est légitime imapsieve_mailbox2_name = * imapsieve_mailbox2_from = Junk imapsieve_mailbox2_causes = COPY imapsieve_mailbox2_before = file:/usr/local/lib/dovecot/sieve/report-ham.sieve sieve_pipe_bin_dir = /usr/local/lib/dovecot/sieve sieve_global_extensions = +vnd.dovecot.pipe +vnd.dovecot.execute }
On crée maintenant deux fichiers dans le dossier "/usr/local/lib/dovecot/sieve/".
Le premier s'appelle report-spam.sieve:
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"]; if environment :matches "imap.user" "*" { set "username" "${1}"; } pipe :copy "learn-spam.sh" [ "${username}" ];
Le second s'appelle report-ham.sieve
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"]; if environment :matches "imap.mailbox" "*" { set "mailbox" "${1}"; } if string "${mailbox}" "Trash" { stop; } if environment :matches "imap.user" "*" { set "username" "${1}"; } pipe :copy "learn-ham.sh" [ "${username}" ];
On fait maintenant en sorte que sieve tienne compte de ces fichiers. Avant tout, il faut recharger dovecot :
# rcctl restart dovecot
Ensuite, compilez les scripts sieve :
# sievec /usr/local/lib/dovecot/sieve/report-spam.sieve # sievec /usr/local/lib/dovecot/sieve/report-ham.sieve
Ces deux fichiers font appel à deux scripts : learn-spam.sh et learn-ham.sh. Le contenu de ces derniers va dépendre de l'antispam que vous utilisez. Ils serviront à apprendre à votre antispam si un message est légitime ou non. Lisez la suite pour terminer.
Scripts d'apprentissage
Voici comment remplir les scripts d'apprentissages pour spamassassin et rspamd. Nous mettrons ces scripts dans le dossier "/usr/local/lib/dovecot/sieve".
Pour spamassassin
#!/bin/sh #learn-spam.sh /usr/local/bin/spamc -u ${1} -L spam -C report #!/bin/sh # learn-ham.sh /usr/loca/bin/spamc -u ${1} -L ham -C report
Pour rspamd
#!/bin/sh #learn-spam.sh exec /usr/local/bin/rspamc -d "${1}" learn_spam #!/bin/sh # learn-ham.sh exec /usr/local/bin/rspamc -d "${1}" learn_ham
Dans tous les cas
Afin que ces scripts puissent être lancés, rendez-les exécutables avec cette commande :
# chmod +x /usr/local/lib/dovecot/sieve/learn-*.sh
Pour terminer, n'oubliez pas de recharger dovecot :
# rcctl reload dovecot
Et voilà, désormais, les scripts d'apprentissages seront appelés selon le dossier dans lequel les utilisateurs déplaceront les mails.
Si vous souhaitez en savoir plus, vous pouvez lire la documentation de dovecot.