[Postfixbuch-users] sa-learn von Spamassassin

Steffen Mutter steffen at gnuher.de
Mo Jan 5 15:27:16 CET 2015


Moin Peer,

vielen Dank dafür, dass Du Dir die Mühe gemacht hast mein Problem 
aufzudröseln.

Am 05.01.2015 um 10:03 schrieb Peer Heinlein:
> Am 01.01.2015 um 17:53 schrieb Steffen Mutter:
>
>
>> Die Mailbenutzer werden von mir gerade darauf getrimmt ihre SPAM-Mails
>> die Spamassassin nicht gleich (per global-sieve-script) in INBOX.Junk
>> verschiebt auch dort abzulegen.
> Bau einen Spamfilter der das Zeug gleich in Echtzeit ablehnt, dann hast
> Du keinen Junk-Folder mehr und das Problem stellt sich nicht.
Genau das will die werte Kundschaft ja nicht haben, die wollen alle ihre 
Spams zugestellt bekommen, falls deren Kundschaft mal wieder einen 
Mailserver im Einsatz hat, der gegen die guten Sitten verstößt. Da gibt 
es z.B. einen der keine Spams verfasst, aber eine Dial-Up-IP hat, kein 
FQDN Eintrag und noch so ein paar Nettigkeiten - da war ich genötigt 
seine Domain in eine whitelist einzutragen.
>> Nun habe ich sa-learn entdeckt, finde aber irgendwie keine Anleitung,
>> wie ich hier die Mdbox-Folder durchsuchen kann.
> Gar nicht. mdbox kann nur Dovecot, das kann sa-learn nicht. Du könntest
> es in ein mbox (!=mdbox!) exportieren.
Genau das habe ich gemacht.
>
>> Wünschenswert wäre eine Lösung in der Art:
>> sa-learn durchsucht den Folder INBOX aller User und taggt diese Mails
>> als HAM.
> ...und fängt sich dabei auch Spam-Mails ein, die als Ham gelernt werden.
Beim nächsten Durchlauf werden die falschen Hams als SPAM getraggt. 
Nicht wirklich schlimm, wenn ich der Mailingliste der SPAM-assassin-user 
Vertrauen schenken darf. False negatives werden dann rausgeschmissen und 
brav als SPAM erkannt. Mehrere Durchläufe die mein Script inzwischen 
hinter sich gebracht hat beweisen das.
> Welche Qualität soll die Filterung am Ende haben wenn da so ein
> Durcheinander trainiert wird?
Spamassassin scheint das nicht wirklich zu stören, wenn ich mir da so 
anschaue, was dieser nach der Lernphase so ein- und aussortiert hat.
>
>> INBOX.Junk wird duchsucht und als SPAM getaggt, alle Mails darin die
>> älter als 24 h sind gelöscht und alle Mails die als gelöscht markiert
>> werden endgültig gelöscht (Mdbox Eigenart, expunge reicht da ja nicht)
> ...und die Nutzer verschieben jede Menge Mailinglisten- und
> Newsletter-Mails, die alle double-opt-in und absolut clean sind, in den
> Junk-Folder.
Dann sind sie selber schuld. Jeder hat eine E-Mail von mir bekommen, in 
dem genau erklärt wird, wie das funktioniert und dass sie selber nach 
falschen Eintragungen sowohl in deren INBOX als auch in INBOX.Junk 
suchen sollen.
> Welche Qualität soll die Filterung am Ende haben wenn da so ein
> Durcheinander trainiert wird?
Wird sich zeigen - denkbar ist auch eine Umstellung von INBOX auf 
INBOX.ham für falsch eingeordnete Mails.
> /srv/vmail/users/domain/user/mdbox/mailboxes/Junk/
> Learned tokens from 0 message(s) (0 message(s) examined)
> Klar, er hat ja auch keine Mails im mbox-Format gefunden.
Habe mal mein Script angehängt, scheint brav das zu machen, was es 
machen soll. Ich hoffe ich hab's auch ganz verständlich dokumentiert, 
aber als Chefguru was Dovecot und Postfix angeht, denke ich nicht dass 
etwas unverständlich ist. Wenn irgendwo Denkfehler meinerseits drin sein 
sollten, gerne Bescheid geben.
Das Script läuft als Cronjob 1x täglich um 0:00 h und schickt die 
Ausgabe an die Admins.

--------- SPAMschool.sh ----------

# sa-learn script with wrapper for dovecots mdbox mailcontainers

# namespace is set to domain/username aka %d/%n in dovecot.conf
# seperator is . INBOX is root, subfolders created automatically are:
# INBOX INBOX.Drafts INBOX.Junk INBOX.Sent INBOX.Trash and marked as 
special meaning

# Path to (my) maildir, needs to be changed in most cases /var/mail/ or 
something more 'standard'
MAILPATH=/srv/vmail/users

cd $MAILPATH

# script suggests: /srv/vmail/users/domain.tld/user as HOME
# doveadm backup -u username at domain.tld maildir:/tmp/SPAMschool
# sa-learn --no-sync --ham  /tmp/SPAMschool/ # ham zuerst, falls da 
false positives drin sind...
# sa-learn --no-sync --spam  /tmp/SPAMschool/.Junk # jetzt den Spam, 
lieber eine mehr als eine zuwenig..
# rmdir /tmp/SPAMschool -rf
# sa-learn --sync
# sa-learn --dump magic



for DOMAIN in * ; do
     # needs to be changed if your namespace is different
     cd $MAILPATH/$DOMAIN
     for USER in * ; do
         if doveadm user $USER@$DOMAIN > /dev/null ; then
             echo cleaning up /tmp/SPAMschool/ directory...
             rm /tmp/SPAMschool -rf
             echo SPAMschool lesson for $USER@$DOMAIN initialized...
                         doveadm backup -u $USER@$DOMAIN 
maildir:/tmp/SPAMschool
             echo examining INBOX as ham...
             sa-learn --no-sync --ham  /tmp/SPAMschool/
             echo examining INBOX.Junk as spam...
             sa-learn --no-sync --spam  /tmp/SPAMschool/.Junk
             echo $USER@$DOMAIN lesson finished.
             echo DONE!
             echo
         else
             echo $USER@$DOMAIN does not exist, deleting...
#            rm -rf $MAILPATH/$DOMAIN/$USER
                         echo Proceeding with next entry!
                         echo
         fi
     done
done

echo
echo Cleaning up:
rm /tmp/SPAMschool -rf
echo Removing /tmp/SPAMschool...
doveadm expunge -A mailbox INBOX.Trash 3h
echo Sweeping:
echo Mails in Trash folders older 3h: expunged
doveadm expunge -A mailbox INBOX.Junk savedbefore 3d
echo Mails in Junk folders older 3d: expunged
# QUOTA
# I use MailQuota so if you don't use quota, comment these out
doveadm purge -A
echo All mails marked as expunged deleted completely this is a dovevot 
MDBOX special!
doveadm quota recalc -A
echo calculating Quotas:
doveadm quota get -A
# QUOTA end
echo
echo Spamassassin is fed up...
sa-learn --sync
echo BURP!
echo Spamassassin Database synced
echo Training statistics:
sa-learn --dump magic

Scheint ganz gut zu laufen und false positives sind nicht so schlimm, 
finde ich da es dem Benutzer obliegt das wieder richtig zu stellen.

LG,
Steffen

PS: Postfixbuch v 2015 ist bereits von mir bestellt, bei dem Umzug des 
Servers bin ich stellenweise echt ins Schleudern gekommen, da ich auch 
von Cyrus auf Dovecot umgestellt habe. Vielen Dank für die hervorragende 
Arbeit.
Das Problem bei mir war, dass in dem Kapitel Dovecot als Blackbox vor 
Postfix leider die Aufragen der postmap hash Datenbanken und deren 
Abstimmung zueinander beim Postfix nicht so genau erklärt wurden:
relay_domains (<- sehr ausführlich und verständlich, hat problemlos 
funktioniert)
virtual_alias_domains (werden nur gebraucht wenn es _nur_ 
Mailweiterleitungen gibt. Bei gemischten Setups  braucht man zwingend 
einen Eintrag in relay_domains und Einträge in virtual_alias_maps 
_keinesfalls_ in virtual_alias_domains!!!)
virtual_alias_maps (Mailumschreibungen an andere e-Mailadressen, auch 
externe Domains)
transport_maps (??? bei mir leer)
alias_maps (Umschreibung von wichtigen Standardmailempfängern auf lokale 
Nutzer. Kann problematisch werden, wenn auch die lokalen Nutzer z.B. bei 
einer Nutzung durch externe Mailclients durch das AUTH-Setup über 
Dovecot eine komplette E-Mailadresse für den Loginnamen brauchen. Beißt 
sich tierisch mit den login-setups auf der shell)
canonical_maps (das dürfte die Wahl sein um lokale Benutzer auf 
E-Mailadressen umzuschreiben also in alias_maps gehen mails an root -> 
steffen in canonical_maps gehen Mails an steffen an steffen at irgend.wo)
Das steht sicher alles genaustens im neuen Postfixbuch...

Da habe ich viel mit try & error herumprobieren müssen.
Ganz toll ist auch, wenn man bei Dovecot die Konfiguration (dann in 
mehreren einzelnen Dateien aufgedröselt bei Debian) editiert und ein # 
nicht entfernt. Die daraus resultierenden Meldungen in den Logfiles 
waren legendär :-)

-------------- nächster Teil --------------
Ein Dateianhang mit HTML-Daten wurde abgetrennt...
URL: <https://listi.jpberlin.de/pipermail/postfixbuch-users/attachments/20150105/769ef2ab/attachment.html>


Mehr Informationen über die Mailingliste Postfixbuch-users