Automatisches SpamAssassin-Training

Dieses Thema im Forum "Tipps - Tricks - Mods" wurde erstellt von customhost, 16. März 2015.

  1. customhost

    customhost New Member

    Hallo zusammen,

    nachdem ich mich nun lange mit dem automatischen Training von SpamAssassin beschäftigt habe, möchte ich meine Erkenntnisse nun gern mit euch teilen. Am Ende dieser Anleitung lernt SpamAssassin automatisch, sobald ein Benutzer über IMAP / Roundcube Mails in dem SPAM-Ordner verschiebt bzw. Mails aus dem SPAM-Ordner in den Posteingang.

    Grundlage für diese Funktionalität sind diese Tutorials:
    - https://www.howtoforge.com/perfect-server-debian-wheezy-apache2-bind-dovecot-ispconfig-3
    - https://www.howtoforge.com/using-roundcube-webmail-with-ispconfig-3-on-debian-wheezy-apache2

    1. Plugin "dovecot-antispam" installieren:
    Code:
    apt-get install dovecot-antispam
    2. Dovecot-Konfiguration anpassen:
    Code:
    nano /etc/dovecot/dovecot.conf
    In der Sektion "protocol imap" das Plugin "antispam" hinzufügen:
    Code:
    protocol imap {
      ...
      mail_plugins = quota imap_quota antispam
    }
    In der Sektion "plugin" die relevanten Konfigurationseinträge für dovecot-antispam setzen (nähere Infos zu den einzelnen Einträgen: http://johannes.sipsolutions.net/files/antispam.html):
    Code:
    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
    }
    3. Dieses Skript (https://gist.github.com/kylemanna/d45a2be450de8ce6b79d) unter "/etc/dovecot/sa-learn-pipe.sh" erstellen:
    Code:
    nano /etc/dovecot/sa-learn-pipe.sh
    speichern und anschließend ausführbar machen:
    Code:
    chmod +x /etc/dovecot/sa-learn-pipe.sh
    4. Neuen sudo-Benutzer "vmail" hinzufügen:
    Code:
    sudo adduser vmail
    Anschließend entsprechende Berechtigungen vergeben:
    Code:
    sudo visudo
    nach Sektion "# User privilege specification" suchen, Benutzer "vmail" hinzufügen und speichern:
    Code:
    # User privilege specification
    root    ALL=(ALL:ALL) ALL
    vmail   ALL= (amavis) NOPASSWD: /etc/dovecot/sa-learn-pipe.sh
    5. Roundcube-Konfiguration anpassen:
    Code:
    nano /etc/roundcube/main.inc.php
    nach "$rcmail_config['plugins']" suchen und Plugin "markasjunk" hinzufügen:
    Code:
    ...
    // ----------------------------------
    // PLUGINS
    // ----------------------------------
    
    // List of active plugins (in plugins/ directory)
    //$rcmail_config['plugins'] = array();
    $rcmail_config['plugins'] = array("markasjunk", "jqueryui", "ispconfig3_account", "ispconfig3_autoreply", "ispconfig3_pass", "ispconfig3_spam", "ispconfig3_fetchmail", "ispconfig3_filter");
    ...
    6. Dovecot neustarten:
    Code:
    /etc/init.d/dovecot restart
    7. Fertig!

    Von nun an könnt ihr den Spam-Filter selbst trainieren, indem ihr Mails in den IMAP-Ordner "Junk", "Spam" oder "SPAM" verschiebt bzw. falsch identifizierte Mails aus diesen Ordnern zurück in den Posteingang verschiebt. Außerdem findet man in Roundcube Webmail nun auch eine Option "als Spam markieren", die den Filter ebenfalls anlernt und die Mails automatisch in den Junk-Ordner verschiebt.

    Mit folgendem Befehl könnt ihr dann noch kontrollieren, ob der Spam-Filter auch wirklich angelernt wird:
    Code:
    sa-learn --dbpath=/var/lib/amavis/.spamassassin --dump magic
    Die Einträge für "non-token data: nspam" und "non-token data: nham" sollten sich entsprechend verändern, wenn eine Mail als Spam eingestuft wird.

    Ich hoffe diese kleine Anleitung hilft einigen von euch weiter.
     
    F4RR3LL, nowayback und Till gefällt das.
  2. F4RR3LL

    F4RR3LL Member

    Liest sich gut. Läuft das bei Dir rund?

    Gruß Sven
     
  3. customhost

    customhost New Member

    Läuft bei mir rund, ja - ich bin mit der Lösung sehr zufrieden. Allerdings hoste ich auch keine hunderte eMail-Accounts.

    Bei größeren Setups wäre es wahrscheinlich sinnvoll, das sa-learn Shell-Skript so zu modifizieren, dass SpamAssassin mit der Option --no-sync (Erläuterung siehe hier: http://spamassassin.apache.org/full/3.1.x/doc/sa-learn.html#options) ausgeführt wird und die Synchronisation nur einmal am Tag per Cron ausgeführt wird, statt bei jedem Verschieben einer Nachricht in den Junk-Ordner. SpamAsassin ist leider doch recht ressourcenhungrig.

    Alternativ geht natürlich auch eine komplette Cronjob-Lösung: http://serverfault.com/questions/614018/suggested-mechanisms-for-user-driven-spam-training
    Nachteil dieser Lösung ist, dass SpamAsassin nur dann angelernt wird, wenn der Cronjob ausgeführt wird. Sollten zwischenzeitlich Mails verschoben/gelöscht worden sein, tragen diese dann nicht mehr zum Anlernen von SpamAssassin bei.
     
  4. F4RR3LL

    F4RR3LL Member

    Besten Dank für die Informationen. Ich werde das mal auf nem Dümpelserver testen und den dann mit Spam zuballern und schauen was passiert bzgl der Last.

    Gruß Sven
     
  5. customhost

    customhost New Member

    Das Skript wird nur beim händischen Verschieben von Nachrichten von/nach Junk ausgeführt. Interessant wäre also mal ein Lasttest, wenn viele User gleichzeitig viele Nachrichten verschieben.

    Wenn Du neue Erkenntnisse hierzu hast, wäre das natürlich super interessant zu wissen.
     
  6. F4RR3LL

    F4RR3LL Member

    Ich hab das nun erstmal so bei mir getestet *läuft sauber*... ich hatte das script am Anfang falsch verstanden bzgl der Funktion.
    Ich hab zwar einen Server mit hunderten Mailaccounts laufen .. jedoch keine Möglichkeit hier x Kunden zeitgleich zu motivieren was zu verschieben. Ma überlegen das müsste sich ja mit nem Script testen lassen. Wobei die frage ist ... wie viele verschieben wirklich zeitgleich ne Spam....
     
  7. customhost

    customhost New Member

    Danke für die Rückmeldung!
    Das mit dem Skript klingt gut. Vielleicht finde ich ja auch die Tage mal Gelegenheit dazu.
     
  8. mrx02de

    mrx02de New Member

    Lässt sich sowas auch für squirrelmail realisieren?
     
    Zuletzt bearbeitet: 18. Apr. 2015
  9. customhost

    customhost New Member

    Das eigentliche Training des Spamfilters findet immer dann statt, wenn eine eMail in den Junk-Ordner bzw. vom Junk-Ordner zurück in den Posteingang verschoben wird. Daher sollte dieses Verschieben auch mit SquirrelMail möglich sein.

    Vielleicht hilft Dir ja dieses Plugin weiter: http://squirrelmail.org/plugin_view.php?id=242
     

Diese Seite empfehlen