Automatisches SpamAssassin-Training

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.
 

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.
 

F4RR3LL

Active 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
 

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.
 

F4RR3LL

Active 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....
 

dmenne

New Member
Es wäre gut, zu wissen, ob diese Beschreibung auch noch für die derzeitig aktuelle Version von ISPConfig gilt
 

dmenne

New Member
Sorry, meine Frage war unklar. Ich hatte es schon installiert, und es funktioniert, aber eigentlich hatte ich erwartet, dass in der derzeitigen Installation des perfekten Servers - Ubuntu - das schon drin sein sollte. Hat aber damit alleine noch nicht funktioniert; die nicht-bayes Aktionen des Filters schon.

Drum nochmal besser gefragt: Ist die Installation wie hier beschrieben notwendig, um das Bayessche Filter zum Laufen zu bekommen? Egal ob per-cron oder per Spam-schieben. Wenn ja, dann habe ich vorher etwas anderes falsch gemacht - obwohl sonst alles perfekt lief.
 

florian030

Well-Known Member
Man kann zwar das antispam-plugin nehmen, es ist nur nicht mehr aktuell. Ich habe damit eher bescheidene Erfahrungen gemacht und setze lieber auf eigenen SA-Regeln zusammen mit ein paar anderen: https://www.schaal-24.de/server/aktuelle-regeln-fuer-spamassassin-von-schaal-it/

Wer CentOS nutzt, muss ggf. noch re2c installier und den Neustart von amavis mittels service amavis restart realisieren. Dazu kann man aber auch einfach mal das sa-update Script manuell ausführen.
 
Hallo,
wie steht es um dieses Thema, kann es auf einem aktuellen Perfect Server Apache ISPConfig Stretch Server angewendet werden oder sind die Spamregeln von Florian einfacher/besser?
Kämpfe seit meinem kürzlichen Serverumzug erheblich mit dem Spam Thema...
LG
 

Till

Administrator
Das sollte noch so gehen. wobei es ja unabhängig von Florians SpamAssassin Liste ist, kannst also auch beides machen. Mit ISPConfig 3.2 wird sich da beim Spam Siltern auch einiges tun, denn da setzen wir nicht mehr auf spamassasin und amavis sondern auf rspamd der deutlich bessere Ergebnisse bringt. man muss dann aber nicht umsteigen, das alte setup wird auch weiterhin unterstützt.
 
Kurzes Feedback zu den Beobachtungen.
Seit Serverumzug empfangen sämtliche Mail-Konten erheblich mehr Spam als mit dem alten Server. Wir reden gut vom 6-10fachen.
Mit Florians Skript sowie dovecot-antispam werden diese aber nun sehr gut erkannt und landen im Spam-Ordner. Ich habe kaum noch Spam im Posteingang, vielleicht 1-2 pro Tag.
Soweit kann ich damit leben.
 

Medialekt

New Member
Auch bei uns hat sich durch das Skript von Florian sowie Dovecot-Antispam das Spamaufkommen spürbar verbessert.
 

thommy

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.

auch wenns uralt ist... :D

ich hab das neulich mal nach der HowTo installiert und danach händisch die spam- und ham-Inhalte der bestehenden Mails eingelesen.

Bei ~30 Mailkonten mit ~260.000 Mails, die etwa 6GB HDD belegen, war das manuelle anlernen nach ca. 3h erledigt. Der Server mit den 2x 1TB SSD Raid1 war in dieser Zeit spürbar langsamer, die Load mit 2,x aber noch vertretbar (Blech: 24Core Intel inkl. HT, 82GB DDR3 RAM, 1TB SSD mit Windows Server 2012R2. Mail läuft in der HyperV-Umgebung auf Basis Debian mit max. 4 Cores, 8GB RAM auf der SSD)

Das manuelle Anlernen von Spam:
Code:
sa-learn --spam /path/to/folder

Das manuelle Anlernen von non-Spam:
Code:
sa-learn --ham /path/to/folder

Wem das zu viel Stress ist, kann die Pfade auch in eine txt-Datei geben und sa-learn jene zur Verarbeitung vorlegen. die man-page gibt dazu mehr input.
 

Werbung

Top