Da ich früher meine Server mit OpenSUSE aufgesetzt habe, dies aber mit Virtualmin immer ein gefummel war und mehr schlecht als recht funktionierte, habe ich beschlossen auf Debian umzusteigen.
Debian wird als Grade A supported System gelistet und man kann den automatischen Installer verwenden.
OpenSUSE wird als Grade B supported System gelistet und man muss viel manuell konfigurieren.
Deshalb habe ich gewechselt.
Allerdings gibt es bei Debian einen "Haken" (zumindest für mein Szenario); der Spamfilter läuft auf per-User Basis, was bedeutet, dass jeder Mail-User seine eigene Bayes Datenbank für Spamassassin benutzt.
Da ich aber möchte dass alle Benutzer von der Spam Klassifizierung der anderen Benutzer profitieren, muss ich eine globale Datenbank verwenden.
Dazu benutze ich folgendes Script und speichere es unter /opt/spam-learn.sh
:
nano /opt/spam-learn.sh
#!/bin/bash
echo "Starting SpamAssassin training..."
sa-learn --spam --dbpath /var/lib/spamassassin --dir /home/*/homes/*/Maildir/.spam
sa-learn --spam --dbpath /var/lib/spamassassin --dir /home/*/domains/*/homes/*/Maildir/.spam
sa-learn --ham --dbpath /var/lib/spamassassin --dir /home/*/homes/*/Maildir/.INBOX*/{cur,new}
sa-learn --ham --dbpath /var/lib/spamassassin --dir /home/*/homes/*/Maildir/{cur,new}
sa-learn --ham --dbpath /var/lib/spamassassin --dir /home/*/domains/*/homes/*/Maildir/.INBOX*/{cur,new}
sa-learn --ham --dbpath /var/lib/spamassassin --dir /home/*/domains/*/homes/*/Maildir/{cur,new}
echo "SpamAssassin training completed."
exit 0
Anschliessend muss ich die Datei noch ausführbar machen:
chmod +x /opt/spam-learn.sh
Nun kann man die Datei /opt/spam-learn.sh
per Cron oder Systemtimer regelmässig ausführen lassen und alle Mails in jedes Benutzers .spam
-Ordner wird nun automatisch als Spam gelernt und in der globalen Datenbank vermerkt.
Es dürfte sicherlich aufgefallen sein, dass ich den Parameter --dbpath
explizit gesetzt habe.
Ich habe das Script vorher auf OpenSUSE ohne diesen Parameter benutzt, da ich die dort eintreffende Mails mit Postfix durch Amavis "gepiped" habe und sa-learn
per default die Datenbank in /var/lib/spamassassin
geschrieben hat.
Bei Debian läuft sa-learn
jedoch per Benutzer weshalb die Datenbank in /root/.spamassassin
geschrieben wurde. Darauf haben die Benutzer natürlich keinen Zugriff.
Weshalb sollten die Benutzer darauf überhaupt Zugriff haben? Nun, in Debian werden mit der default Virtualmin installation die Mails nicht durch Amavis gepiped sondern direkt durch Spamassassin welcher in Daemon-Mode läuft (spamd
). Das heisst; jeder Benutzer triggert spamd
über spamc
und spamd
läuft dann für die Dauer des Prozesses auch unter diesem Benutzer.
Damit nun auch Spamassassin weiss welche Datenbank es benutzen soll, muss ich die Konfiguration noch wie folgt anpassen:
(Ich habe diese Einträge einfach ans Ende der Konfigurationdatei gepackt)
nano /etc/spamassassin/local.cf
use_bayes 1
bayes_path /var/lib/spamassassin/bayes
bayes_file_mode 0777
bayes_auto_learn 1
bayes_auto_learn_threshold_spam 6.0
bayes_auto_learn_threshold_nonspam -2.5
bayes_ignore_header X-Spam-Status
bayes_ignore_header X-Spam-Flag
bayes_ignore_header X-Spam-Level
Anschliessend startet man Spamassassin neu:
systemctl restart spamd
Das war's! Nun sollten alle Benutzer die globale Bayes Datenbank benutzen.