Spamassassin trainieren mit Dovecot
Das Dovecot Antispam-Plugin bewirkt, daß manuell in den Spam-Ordner verschobene Nachrichten den Spamfilter von Spamassassin trainieren. Allerdings wirkt sich das immer serverweit aus. Was also für den einen Nutzer gut ist, kann für den anderen schlecht sein – kein Vorteil ohne Nachteil! Spielt aber letztlich keine Rolle, da das Entfernen der Nachricht aus dem Spam-Ordner wiederum den Spamfilter trainiert.
Nachfolgende Installationsanleitung ist für Ubuntu 18.04 mit ISPCongfig 3.1.
Pakete installieren
apt update && apt -y upgrade
apt -y install dovecot-antispam
Plugin in Dovecot einbinden
vi /etc/dovecot/dovecot.conf
protocol imap {
mail_plugins = quota imap_quota listescape antispam
namespace {
type = private
separator = /
inbox = yes
}
plugin {
antispam_debug_target = syslog
antispam_verbose_debug = 1
antispam_backend = pipe
antispam_trash = Trash
antispam_spam = Junk;Spam;SPAM
antispam_allow_append_to_spam = "no"
antispam_pipe_program = /etc/dovecot/sa-learn-pipe.sh
antispam_pipe_program_spam_arg = --spam
antispam_pipe_program_notspam_arg = --ham
}
}
Die IMAP-Ordner Junk, Spam und SPAM werden „lernfähig“, also alles was hier hin verschoben wird, trainiert den Spamfilter.
Näheres zu den Parametern, wie z. B. antispam_allow_append_to_spam:
man antispam
Dovecot neu starten
service dovecot restart
sa-learn-pipe.sh erstellen
vi /etc/dovecot/sa-learn-pipe.sh
#!/bin/bash
#
# Wrapper script for dovecot-antispam without using temporary files
# Look mom, no temporary files!
#
# Security is provided by locking the vmail user (dovecot-imap/antispam)
# only run this script via the sudoers line. The script checks arguments
# to stay safe. Log everything to syslog and return intelligent codes.
#
# sudoers:
# vmail ALL= (amavis) NOPASSWD: /etc/dovecot/sa-learn-pipe.sh
#
# dovecot/conf.d/90-antispam.conf:
# plugin {
# antispam_debug_target = syslog
# #antispam_verbose_debug = 1
# antispam_backend = pipe
# antispam_trash = Trash
# antispam_spam = Junk;Spam;SPAM
# antispam_allow_append_to_spam = no
# antispam_pipe_program = /etc/dovecot/sa-learn-pipe.sh
# antispam_pipe_program_spam_arg = --spam
# antispam_pipe_program_notspam_arg = --ham
# }
#
if [ "$1" != "wrap" ]; then
out=$(sudo -Hu amavis "$0" wrap "$@" < /proc/self/fd/0 2>&1)
ret=$?
lvl="info"
if [ "$ret" -ne 0 ]; then
lvl="err"
fi
logger -p mail.$lvl -i -t sa-learn-pipe "${1//[^a-z]/}: $out"
exit $ret
fi
# sa-learn gets upset if in another user's home dir
cd "$HOME"
# Sanitize input to be only a-z, space and dash
cmd=${2//[^a-z\- ]/}
# Bash magic: turn stdin into a fd that sa-learn can read
sa-learn "$cmd" <(cat -)
ret=$?
exit $ret
chmod +x /etc/dovecot/sa-learn-pipe.sh
sudo für Benutzer vmail
sudo visudo
vmail ALL= (amavis) NOPASSWD: /etc/dovecot/sa-learn-pipe.sh
Fertig!
Zum Abschluß noch sicherheitshalber den IMAP-Ordner Junk für alle Konten abonnieren
doveadm mailbox subscribe -A Junk
Überprüfen
sa-learn --dbpath=/var/lib/amavis/.spamassassin --dump magic
Wurde der Spamfilter trainiert, ändern sich die Werte von nspam und/oder nham.
Siehe auch
- gist.github.com/kylemanna Download sa-learn-pipe.sh
- wiki2.dovecot.org/Plugins/Antispam Dovecot Antispam Plugin
- Punkt in IMAP-Ordner erlauben und Schrägstrich als IMAP-Separator