# Automatisches SpamAssassin-Training



## customhost (16. März 2015)

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:*

```
apt-get install dovecot-antispam
```
*2. Dovecot-Konfiguration anpassen:*

```
nano /etc/dovecot/dovecot.conf
```
In der Sektion "protocol imap" das Plugin "antispam" hinzufügen:

```
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):

```
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:*

```
nano /etc/dovecot/sa-learn-pipe.sh
```
speichern und anschließend ausführbar machen:

```
chmod +x /etc/dovecot/sa-learn-pipe.sh
```
*4. Neuen sudo-Benutzer "vmail" hinzufügen:*

```
sudo adduser vmail
```
Anschließend entsprechende Berechtigungen vergeben:

```
sudo visudo
```
nach Sektion "# User privilege specification" suchen, Benutzer "vmail" hinzufügen und speichern:

```
# User privilege specification
root    ALL=(ALL:ALL) ALL
vmail   ALL= (amavis) NOPASSWD: /etc/dovecot/sa-learn-pipe.sh
```
*5. Roundcube-Konfiguration anpassen:*

```
nano /etc/roundcube/main.inc.php
```
nach "$rcmail_config['plugins']" suchen und Plugin "markasjunk" hinzufügen:

```
...
// ----------------------------------
// 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:*

```
/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:

```
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 (16. März 2015)

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

Gruß Sven


----------



## customhost (16. März 2015)

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 (16. März 2015)

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 (16. März 2015)

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 (18. März 2015)

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


----------



## customhost (20. März 2015)

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


----------



## mrx02de (18. Apr. 2015)

Lässt sich sowas auch für squirrelmail realisieren?


----------



## customhost (20. Apr. 2015)

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


----------



## dmenne (26. März 2017)

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


----------



## m.siebert (28. März 2017)

Habe es getestet in der aktuellen Umgebung, funktioniert weiterhin.


----------



## dmenne (28. März 2017)

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 (31. März 2017)

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.


----------



## shadowcast (16. Jan. 2019)

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 (16. Jan. 2019)

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.


----------



## shadowcast (16. Jan. 2019)

Hallo,
ich habe beide installiert und werde die Sache beobachten.
LG


----------



## shadowcast (21. Jan. 2019)

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.


----------



## thommy (7. Apr. 2019)

Zitat von dmenne:


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


läuft in der 3.1.13 ohne probleme auf Basis Debian


----------



## Medialekt (11. Apr. 2019)

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


----------



## thommy (11. Apr. 2019)

Zitat von customhost:


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

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:

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

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


----------



## Strontium (15. Apr. 2019)

Zitat von dmenne:


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


Funktioniert bei mir mit ISPConfig 3.1.13p1 und Ubuntu 18.04.2 gut.


----------



## Domi83 (9. Mai 2019)

Schönen guten Abend, primär bin ich auf die Idee gekommen hier zu posten, weil ich diesen Beitrag über eine Suche gefunden habe. Euer ISPconfig System finde ich echt toll und es ist nichts verschachtelt, verbastelt etc. so dass auch ich mit meinen Skills (kein Anfänger, aber Profi würde ich auch nicht sagen) hier und da Anpassungen durchführen kann 

Nun zum Grund meines Posts...


Zitat von Till:


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


Gibt es schon einen ungefähren Release Termin für die ISPconfig 3.2? In dem von mir genannten Thread wurde ja erwähnt, dass man 'rspamd' relativ simple einbauen kann, aber dann nicht über ISPconfig steuern kann, was erst einmal nicht tragisch wäre.

Grund der ganzen Recherche ist der, dass ich auf einem meiner Server (bin hauptberuflicher IT'ler und auch selbstständiger IT'ler) ziemlich zugemüllt werde. Ich kann zwar nicht genau sagen, ob 'sa-learn' so klappt wie ich mir das wünsche, aber in der Ausgabe von _'sa-learn --dbpath=/var/lib/amavis/.spamassassin --dump magic'_ gibt es zumindest zahlen für "nspam" sowie "nham" 

Nun würde ich natürlich gerne schauen, ob man das noch etwas verbessern kann. Graylisting habe ich ebenfalls schon aktiv und irgendwann hab ich sogar postscreen eingebaut, aber seit grob zwei Wochen wird es etwas wilder.

Die Mails werden zwar (zum Glück) mit *SPAM* markiert, dass sagt mir schon mal das spamassassin etwas tut, habe aber das Gefühl dass es noch besser sein könnte.

Gruß, Domi


----------



## Till (10. Mai 2019)

Zitat von Domi83:


> Euer ISPconfig System finde ich echt toll und es ist nichts verschachtelt, verbastelt etc. so dass auch ich mit meinen Skills (kein Anfänger, aber Profi würde ich auch nicht sagen) hier und da Anpassungen durchführen kann



Das freut mich zu hören  Wir gehen halt den Ansatz (anders als diverse andere Panels) dass wir die Pakete der Linux Distribution verwenden und konfigurieren und möglichst bei allem die standard locations der config Dateien beizubehalten.



Zitat von Domi83:


> Gibt es schon einen ungefähren Release Termin für die ISPconfig 3.2?


Nein, es ist aber schon viel erledigt von der ToDo liste.

Zum Thema Spamfilter verbessern hat Florian einiges veröffgentlicht, siehe sein Link in #13 hier im Thread.


----------



## Domi83 (10. Mai 2019)

Super, ich bedanke mich vielmals für die Rückmeldung. Aber ja, die diversen Anpassungen die andere Systeme vornehmen, ergaben dann keinen wirklich nachvollziehbaren Sinn. Ich bin nun kein super Profi, Anfänger aber auch nicht und als ich damals mit einem Server ohne System und kurz darauf mit einem System anfing, war das schon sehr merkwürdig.

Den Link aus Post 13 habe ich gestern Abend noch geöffnet und wollte mir den heute mal genauer anschauen. Ich bleibe gespannt, ob ich es wieder etwas ruhiger bekomme. Gestern waren es ca. 10 als SPAM erkannte Mails, die direkt im JUNK Ordner landeten, drei davon hat Thunderbird dann selbst erkannt und verschoben... somit scheint das schon gut zu klappen. Ich muss mich nur mal dran setzen und SIEVE sagen, dass er die als SPAM erkannten Mails nicht nur verschieben sondern auch gleich als "gelesen" markieren darf 

Wünsche nun noch einen entspannten Freitag an alle, und ein schönes Wochenende.

Gruß, Domi


----------



## Viperdriver2000 (14. Juli 2019)

Hallo, 
Danke erstmal für die hilfreichen Infos. 
Ich habe das jetzt auch mal bei mir eingerichtet. 
Ich habe dann auch noch meine schon vorhandenen Mails gescannt und habe somit ~11k nspam Mails. 
Das von Florian habe ich (noch) nicht eingebunden. 

Mein Problem ist das trotzdem nur ein Bruchteil der eingehenden Mails mit *SPAM* markiert werden. 
Ich bekomme zur Zeit auf meiner einen Mail ~150  Spam Mails pro Tag. 

Im ispconfig habe ich für das Postfach bei Spam "normal" ausgewählt. 

Muss ich noch was spezielles im ispconfig einstellen? Bzw bei der normal Spamfilter policy? 

Danke & Gruß


----------



## shadowcast (5. Sep. 2019)

Morgen,
ich nehme an, wenn ich auf das neue ISPConfig aktualisiere mit Rspamd sollte es auch wenn ich diese Modifikationen habe nichts tragisches passieren oder?


----------



## Till (5. Sep. 2019)

Steht in den release notes das sich bei amavis systemen nichts ändert.


----------

