<html>
  <head>
    <meta content="text/html; charset=windows-1252"
      http-equiv="Content-Type">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <div class="moz-cite-prefix">Moin Peer,<br>
      <br>
      vielen Dank dafür, dass Du Dir die Mühe gemacht hast mein Problem
      aufzudröseln.<br>
      <br>
      Am 05.01.2015 um 10:03 schrieb Peer Heinlein:<br>
    </div>
    <blockquote cite="mid:54AA5377.90305@heinlein-support.de"
      type="cite">
      <pre wrap="">Am 01.01.2015 um 17:53 schrieb Steffen Mutter:


</pre>
      <blockquote type="cite">
        <pre wrap="">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.
</pre>
      </blockquote>
      <pre wrap="">
Bau einen Spamfilter der das Zeug gleich in Echtzeit ablehnt, dann hast
Du keinen Junk-Folder mehr und das Problem stellt sich nicht.</pre>
    </blockquote>
    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.
    <blockquote cite="mid:54AA5377.90305@heinlein-support.de"
      type="cite">
      <blockquote type="cite">
        <pre wrap="">Nun habe ich sa-learn entdeckt, finde aber irgendwie keine Anleitung,
wie ich hier die Mdbox-Folder durchsuchen kann.
</pre>
      </blockquote>
      <pre wrap="">
Gar nicht. mdbox kann nur Dovecot, das kann sa-learn nicht. Du könntest
es in ein mbox (!=mdbox!) exportieren.</pre>
    </blockquote>
    Genau das habe ich gemacht.<br>
    <blockquote cite="mid:54AA5377.90305@heinlein-support.de"
      type="cite"><br>
      <blockquote type="cite">
        <pre wrap="">Wünschenswert wäre eine Lösung in der Art:
sa-learn durchsucht den Folder INBOX aller User und taggt diese Mails
als HAM.
</pre>
      </blockquote>
      <pre wrap="">
...und fängt sich dabei auch Spam-Mails ein, die als Ham gelernt werden.</pre>
    </blockquote>
    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.<br>
    <blockquote cite="mid:54AA5377.90305@heinlein-support.de"
      type="cite">
      <pre wrap="">Welche Qualität soll die Filterung am Ende haben wenn da so ein
Durcheinander trainiert wird?</pre>
    </blockquote>
    Spamassassin scheint das nicht wirklich zu stören, wenn ich mir da
    so anschaue, was dieser nach der Lernphase so ein- und aussortiert
    hat.<br>
    <blockquote cite="mid:54AA5377.90305@heinlein-support.de"
      type="cite"><br>
      <blockquote type="cite">
        <pre wrap="">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)
</pre>
      </blockquote>
      <pre wrap="">
...und die Nutzer verschieben jede Menge Mailinglisten- und
Newsletter-Mails, die alle double-opt-in und absolut clean sind, in den
Junk-Folder.</pre>
    </blockquote>
    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.<br>
    <blockquote cite="mid:54AA5377.90305@heinlein-support.de"
      type="cite">
      <pre wrap="">Welche Qualität soll die Filterung am Ende haben wenn da so ein
Durcheinander trainiert wird?</pre>
    </blockquote>
    Wird sich zeigen - denkbar ist auch eine Umstellung von INBOX auf
    INBOX.ham für falsch eingeordnete Mails.<br>
    <blockquote cite="mid:54AA5377.90305@heinlein-support.de"
      type="cite">
      <pre wrap="">/srv/vmail/users/domain/user/mdbox/mailboxes/Junk/
Learned tokens from 0 message(s) (0 message(s) examined)
</pre>
      <pre wrap="">
Klar, er hat ja auch keine Mails im mbox-Format gefunden.
</pre>
    </blockquote>
    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.<br>
    Das Script läuft als Cronjob 1x täglich um 0:00 h und schickt die
    Ausgabe an die Admins.<br>
    <br>
    --------- SPAMschool.sh ----------<br>
    <small><small><br>
        # sa-learn script with wrapper for dovecots mdbox mailcontainers<br>
        <br>
        # namespace is set to domain/username aka %d/%n in dovecot.conf<br>
        # seperator is . INBOX is root, subfolders created automatically
        are:<br>
        # INBOX INBOX.Drafts INBOX.Junk INBOX.Sent INBOX.Trash and
        marked as special meaning<br>
        <br>
        # Path to (my) maildir, needs to be changed in most cases
        /var/mail/ or something more 'standard' <br>
        MAILPATH=/srv/vmail/users<br>
        <br>
        cd $MAILPATH<br>
        <br>
        # script suggests: /srv/vmail/users/domain.tld/user as HOME<br>
        # doveadm backup -u <a class="moz-txt-link-abbreviated" href="mailto:username@domain.tld">username@domain.tld</a> maildir:/tmp/SPAMschool<br>
        # sa-learn --no-sync --ham  /tmp/SPAMschool/ # ham zuerst, falls
        da false positives drin sind...<br>
        # sa-learn --no-sync --spam  /tmp/SPAMschool/.Junk # jetzt den
        Spam, lieber eine mehr als eine zuwenig..<br>
        # rmdir /tmp/SPAMschool -rf<br>
        # sa-learn --sync<br>
        # sa-learn --dump magic <br>
        <br>
        <br>
        <br>
        for DOMAIN in * ; do<br>
            # needs to be changed if your namespace is different<br>
            cd $MAILPATH/$DOMAIN<br>
            for USER in * ; do<br>
                if doveadm user $USER@$DOMAIN > /dev/null ; then<br>
                    echo cleaning up /tmp/SPAMschool/ directory...<br>
                    rm /tmp/SPAMschool -rf <br>
                    echo SPAMschool lesson for $USER@$DOMAIN
        initialized...<br>
                                doveadm backup -u $USER@$DOMAIN
        maildir:/tmp/SPAMschool <br>
                    echo examining INBOX as ham...<br>
                    sa-learn --no-sync --ham  /tmp/SPAMschool/<br>
                    echo examining INBOX.Junk as spam...<br>
                    sa-learn --no-sync --spam  /tmp/SPAMschool/.Junk<br>
                    echo $USER@$DOMAIN lesson finished. <br>
                    echo DONE!<br>
                    echo<br>
                else<br>
                    echo $USER@$DOMAIN does not exist, deleting...<br>
        #            rm -rf $MAILPATH/$DOMAIN/$USER<br>
                                echo Proceeding with next entry!<br>
                                echo<br>
                fi<br>
            done<br>
        done<br>
        <br>
        echo<br>
        echo Cleaning up:<br>
        rm /tmp/SPAMschool -rf <br>
        echo Removing /tmp/SPAMschool...<br>
        doveadm expunge -A mailbox INBOX.Trash 3h<br>
        echo Sweeping: <br>
        echo Mails in Trash folders older 3h: expunged <br>
        doveadm expunge -A mailbox INBOX.Junk savedbefore 3d<br>
        echo Mails in Junk folders older 3d: expunged<br>
        # QUOTA <br>
        # I use MailQuota so if you don't use quota, comment these out<br>
        doveadm purge -A<br>
        echo All mails marked as expunged deleted completely this is a
        dovevot MDBOX special!<br>
        doveadm quota recalc -A<br>
        echo calculating Quotas:<br>
        doveadm quota get -A<br>
        # QUOTA end<br>
        echo<br>
        echo Spamassassin is fed up...<br>
        sa-learn --sync<br>
        echo BURP! <br>
        echo Spamassassin Database synced<br>
        echo Training statistics:<br>
        sa-learn --dump magic</small></small><br>
    <br>
    Scheint ganz gut zu laufen und false positives sind nicht so
    schlimm, finde ich da es dem Benutzer obliegt das wieder richtig zu
    stellen.<br>
    <br>
    LG,<br>
    Steffen<br>
    <br>
    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.<br>
    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:<br>
    relay_domains (<- sehr ausführlich und verständlich, hat
    problemlos funktioniert)<br>
    virtual_alias_domains (werden nur gebraucht wenn es <u>nur</u>
    Mailweiterleitungen gibt. Bei gemischten Setups  braucht man
    zwingend einen Eintrag in relay_domains und Einträge in
    virtual_alias_maps <u>keinesfalls</u> in virtual_alias_domains!!!)<br>
    virtual_alias_maps (Mailumschreibungen an andere e-Mailadressen,
    auch externe Domains)<br>
    transport_maps (??? bei mir leer)<br>
    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)<br>
    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
    <a class="moz-txt-link-abbreviated" href="mailto:steffen@irgend.wo">steffen@irgend.wo</a>)<br>
    Das steht sicher alles genaustens im neuen Postfixbuch...<br>
    <br>
    Da habe ich viel mit try & error herumprobieren müssen.<br>
    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 :-)<br>
    <br>
  </body>
</html>