23
Mailserver: Trainingsskript für Spamassassin
Nachdem ich die Tage einen neuen Mailserver aufgesetzt habe (mehr oder weniger nach dem Howto von johker), hatte ich mich nun ein bischen mit dem Feintuning beschäftigt. U.a. habe ich das Skript fürs Trainieren von Ham- bzw. Spam-Mails für die Bayes-Datenbank von Spamassassin überarbeitet, damit weniger (Fehler-)Meldungen produziert werden und man sich das Ergebnis damit eher per E-Mail (zur Kontrolle der Arbeit) zuschicken lassen kann:
#!/bin/bash VMAILDIR="/var/vmail" SADIR="/var/lib/amavis/.spamassassin" DBPATH="/var/lib/amavis/.spamassassin/bayes" cd $VMAILDIR for domain in $(find ./ -maxdepth 1 -not -name "." -type d | sed -e 's/\.\/*//'); do domaindir="$VMAILDIR/$domain" cd $domaindir for user in $(find ./ -maxdepth 1 -not -name "." -type d | sed -e 's/\.\/*//'); do maildir="$domaindir/$user/maildir" hamdir="$maildir/.Ham" spamdir="$maildir/.Spam" # train ham if [ -d $hamdir ]; then hamcount=$(find $hamdir -regex '.*\(/.*\)?\/\(cur\|new\)/.*' -type f | wc -l) if [ $hamcount -ge 1 ]; then echo "Learning ham from $hamdir/cur" sa-learn --ham --showdots --dbpath $DBPATH $hamdir/cur find $hamdir -regex '.*\(/.*\)?\/\(cur\|new\)/.*' -type f -delete fi fi # train spam if [ -d $spamdir ]; then spamcount=$(find $spamdir -regex '.*\(/.*\)?\/\(cur\|new\)/.*' -type f | wc -l) if [ $spamcount -ge 1 ]; then echo "Learning junk from $spam/cur" sa-learn --spam --showdots --dbpath $DBPATH $spamdir/cur find $spamdir -regex '.*\(/.*\)?\/\(cur\|new\)/.*' -type f -delete fi fi done done chown -R amavis:amavis $SADIR
Das Skript ist sicherlich nicht optimal, sollte aber, ob des mehr an Abfragen, sa-learn nur noch aufrufen, wenn auch wirklich E-Mails fürs Training vorhanden sind. Desweiteren werden die gelernten E-Mails im Anschluss gelöscht.