Page 1 of 3

Rspamd - Automatisches lernen

Posted: Fri 27. Oct 2023, 04:08
by OlliTheDarkness
Moin zusammen :D

Beim suchen der Autolearn Funktion im Panel, stellte ich fest, keine da. :lol:

Wieso, weshalb warum, keine Ahnung.

Beim durchsehen der Serverconfigs, irgendwie auch keine Spur. :(

Also, selbst ist der Admin und ran ans Werk.

Vorwort

Alle Änderungen erfolgen auf eigene Gefahr, für Probleme seid Ihr selbst verantwortlich.
Ich übernehme keinerlei Verantwortung wenn was nicht läuft oder sonst welche Fehler auftretten, egal ob jetzt oder zukünftig.

Beachtet auch, dass wenn KH die Funktion später integriert, es zu Problemen kommen könnte.

Eventuell vorhandene Regeln zB. aus RoundCube finden weiter Anwendung.



Die Anpassungen in DoveCot

/etc/dovecot/conf.keyhelp.d/20-protocols.conf

Code: Select all

protocols = imap pop3 lmtp sieve

mail_max_userip_connections = 10

protocol imap {
    imap_logout_format = in=%i out=%o

    mail_plugins = $mail_plugins imap_quota imap_sieve
}

protocol pop3 {
    pop3_logout_format = in=%i out=%o top=%t/%p retr=%r/%b del=%d/%m size=%s

    pop3_uidl_format = UID%u-%v
}

protocol lda {
    auth_socket_path = /var/run/dovecot/auth-master
    mail_plugins = $mail_plugins sieve
    postmaster_address = postmaster@SERVERHOSTNAME
    sendmail_path = /usr/sbin/sendmail
}

protocol lmtp {
    auth_socket_path = /var/run/dovecot/auth-master
    mail_plugins = $mail_plugins sieve
    postmaster_address = postmaster@SERVERHOSTNAME
    sendmail_path = /usr/sbin/sendmail
}

protocol sieve {
    managesieve_max_line_length = 65536
}


^^ SERVERHOSTNAME muss durch euren vollen Hostname ersetzt werden ^^

/etc/dovecot/conf.keyhelp.d/90-plugins.conf

Code: Select all

plugin {
    quota = maildir:User quota
    quota_limit = 10%%

    sieve_plugins = sieve_imapsieve sieve_extprograms
    sieve_before = /etc/dovecot/sieve/spam-global.sieve
    sieve = file:/var/mail/vhosts/%d/%n/sieve/scripts;active=/var/mail/vhosts/%d/%n/sieve/active.sieve
    sieve_storage = /var/mail/vhosts/%d/%n/sieve
    #
    # Wird von irgendwo in den Spam-Ordner verschoben oder der Status im Spam-Ordner geändert dann ...
    #
    imapsieve_mailbox1_name = Junk
    imapsieve_mailbox1_causes = COPY
    imapsieve_mailbox1_before = file:/etc/dovecot/sieve/learn-spam.sieve
    #
    # Wird vom Spam-Ordner irgendwo anders hin verschoben dann ...
    #
    imapsieve_mailbox2_name = *
    imapsieve_mailbox2_from = Junk
    imapsieve_mailbox2_causes = COPY
    imapsieve_mailbox2_before = file:/etc/dovecot/sieve/learn-ham.sieve

    sieve_pipe_bin_dir = /usr/bin
    sieve_global_extensions = +vnd.dovecot.pipe
}

Im Ordner "/etc/dovecot" einen weiteren Ordner mit dem Namen "sieve" erstellen.

Jetzt werden unter "/etc/dovecot/sieve" 3 Dateien erstellt, spam-global.sieve, learn-spam.sieve und learn-ham.sieve.

/etc/dovecot/sieve/learn-ham.sieve

Code: Select all

require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];

if environment :matches "imap.mailbox" "*" {
    set "mailbox" "${1}";
}

if string "${mailbox}" "Trash" {
    stop;
}

pipe :copy "rspamc" ["learn_ham"];

/etc/dovecot/sieve/learn-spam.sieve

Code: Select all

require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamc" ["learn_spam"];

/etc/dovecot/sieve/spam-global.sieve

Code: Select all

require "fileinto";

if header :contains "X-Spam-Flag" "YES" {
    fileinto "Junk";
}

if header :is "X-Spam" "Yes" {
    fileinto "Junk";
}

Hinweis:
Alle Daten und Ordner gehören dem User "vmail" und der Gruppe "dovecot".
Die Rechte der Daten ist 640 und des Ordners sieve ist 750.

Die Anpassungen in Rspamd

Unter "/etc/rspamd/local.d" die Datei "milter_headers.conf" erstellen.

/etc/rspamd/local.d/milter_headers.conf

Code: Select all

use = ["x-spamd-bar", "x-spam-level", "authentication-results"];
authenticated_headers = ["authentication-results"];

Unter "/etc/rspamd/override.d" die Datei "classifier-bayes.conf" erstellen.

/etc/rspamd/override.d/classifier-bayes.conf

Code: Select all

backend = "redis";
autolearn = true;

Danach die Dienste Rspamd und DoveCot neustarten.

Alles was jetzt in den Junkordner wandert wird als Spam gelernt.
Alles was aus dem Junkordner rausgezogen wird, egal wohin, lernt das System als kein Junk.
Mails die aus Junk in den Papierkorb wandern lösen kein "lernen" aus.

Das war es auch schon.
Es wird eine weile dauern bis das System genug "gelernt" hat, um zuverlässig zu sortieren.

Nachtrag

Bereits im Junkordner vorhandene Mails werden nicht berücksichtigt, da das System erst bei "Bewegung" einer Mail greift.
Um bereits im Junkordner vorhandene Mails einzulernen, kann folgender Befehl genutzt werden:

Code: Select all

find /var/mail/vhosts/*/*/.Junk/cur -type f -exec /usr/bin/rspamc learn_spam {} \;

*** Nachtrag 2 ***

Wie ich bemerkt habe, gibt es ein kleines Rechteproblem.

Grund ist die "ProtectSystem=full" Angabe in "/etc/systemd/system/multi-user.target.wants/dovecot.service".

Die ein oder andere Flachzange würde wohl jetzt das "ProtectSystem" abschalten bzw. minimieren, Selbstmord auf Raten. ;)

Richtig ist hier eine "Ausnahme" im Bereich "Service" mit dem betroffenen Pfad zu setzen.

Das ganze sieht wie nachfolgend aus:

Code: Select all

Environment="ReadWritePaths=/etc/dovecot/sieve/"
Dies gehört in die "/etc/systemd/system/multi-user.target.wants/dovecot.service" Datei, welche am Schluss etwa so aussehn sollte:

Code: Select all

# This file is part of Dovecot
#
# DO NOT CUSTOMIZE THIS FILE, INSTEAD
# create the file:
#	`/etc/systemd/system/dovecot.service.d/service.conf'.
# or copy this as
#	`/etc/systemd/system/dovecot.service` and edit then
# and put your changes there

[Unit]
Description=Dovecot IMAP/POP3 email server
Documentation=man:dovecot(1)
Documentation=https://doc.dovecot.org/
After=local-fs.target network-online.target

[Service]
Type=notify
Environment="ReadWritePaths=/etc/dovecot/sieve/"
ExecStart=/usr/sbin/dovecot -F
ExecReload=/usr/bin/doveadm reload
ExecStop=/usr/bin/doveadm stop
PrivateTmp=true
NonBlocking=yes
ProtectSystem=full
ProtectHome=no
PrivateDevices=true

# You can add environment variables with e.g.:
#Environment='CORE_OUTOFMEM=1'
# If you have trouble with `Too many open files', increase
LimitNOFILE=65535
# If you want to allow the Dovecot services to produce core dumps, use:
#LimitCORE=infinity

[Install]
WantedBy=multi-user.target
Jetzt nur noch dem Sysdaemon die Änderung mitteilen und Dove neu starten.

Code: Select all

systemctl daemon-reload
systemctl restart dovecot
Fertig.

Re: Rspamd - Automatisches lernen

Posted: Fri 27. Oct 2023, 06:28
by comsystem
Vielen Dank!

Re: Rspamd - Automatisches lernen

Posted: Fri 27. Oct 2023, 08:38
by technotravel
Super - danach habe ich schon gesucht!

Wäre ja gut, wenn das bei Install bzw Upgrade schon so eingerichtet würde :D

Re: Rspamd - Automatisches lernen

Posted: Fri 27. Oct 2023, 10:12
by Alexander
OlliTheDarkness wrote: Fri 27. Oct 2023, 04:08 Beim suchen der Autolearn Funktion im Panel, stellte ich fest, keine da. :lol:

Wieso, weshalb warum, keine Ahnung.
viewtopic.php?t=12691

Re: Rspamd - Automatisches lernen

Posted: Fri 27. Oct 2023, 15:25
by ShortSnow
Hi,

wäre nicht eine eine Lösung aus beiden Wegen von OlliTheDarkness und Alexander der beste Weg?

Alexanders Weg: Spam anlernen per Cron. Ist da nichts drinn, weil der User per Webmail keinen Filter gesetzt hat der automatisch nach Spam verschiebt (pop3 oder nicht gewollt) passiert auch kein anlernen von Mails bei "false Positive". Dann brauchts auch keine globalen Filter die nach Junk verschieben, was für pop3-Konten ein Problem werden könnte.

OlliTheDarkness Weg für das lernen von Ham. Sofortiges lernen, sobald ein Nutzer etwas aus dem Junk Ordner verschiebt aufgrund der Aktion.

Vielleicht ist die Idee auch Blödsinn, aber ich mach mir keine Sorgen, das ich das nicht gleich von OlliTheDarkness unverblümt mit der Pfanne vor den Schädel... :lol:

Re: Rspamd - Automatisches lernen

Posted: Fri 27. Oct 2023, 15:48
by OlliTheDarkness
ShortSnow wrote: Fri 27. Oct 2023, 15:25 Hi,

wäre nicht eine eine Lösung aus beiden Wegen von OlliTheDarkness und Alexander der beste Weg?

Alexanders Weg: Spam anlernen per Cron. Ist da nichts drinn, weil der User per Webmail keinen Filter gesetzt hat der automatisch nach Spam verschiebt (pop3 oder nicht gewollt) passiert auch kein anlernen von Mails bei "false Positive". Dann brauchts auch keine globalen Filter die nach Junk verschieben, was für pop3-Konten ein Problem werden könnte.

OlliTheDarkness Weg für das lernen von Ham. Sofortiges lernen, sobald ein Nutzer etwas aus dem Junk Ordner verschiebt aufgrund der Aktion.

Vielleicht ist die Idee auch Blödsinn, aber ich mach mir keine Sorgen, das ich das nicht gleich von OlliTheDarkness unverblümt mit der Pfanne vor den Schädel... :lol:
Jetzt fang du auch noch an :D
Ich bin voll der liebe Mensch , lieb nett und knuffig xD

Re: Rspamd - Automatisches lernen

Posted: Sun 29. Oct 2023, 14:14
by racmo
Eine direkte Integration der Autolearn-Funktion wäre in der Tat die optimale Lösung. Das bloße Lernen von Spam-Mails im Spam-Ordner erscheint mir jedoch nicht ausreichend.

Es ist ebenso wichtig, dass RspamD auch lernt, wenn legitime Mails fälschlicherweise als Spam markiert und anschließend in den Posteingang verschoben werden. Ein lernendes System muss beide Seiten der Medaille berücksichtigen, um effektiv zu sein. Ohne diese Rückmeldung ist das System, nur halb so effektiv.

Von KeyHelp war ich bisher immer gewohnt, dass Funktionen immer vollständig umgesetzt waren.

Re: Rspamd - Automatisches lernen

Posted: Sun 29. Oct 2023, 15:19
by Jolinar
racmo wrote: Sun 29. Oct 2023, 14:14 Eine direkte Integration der Autolearn-Funktion wäre in der Tat die optimale Lösung.
Wurde doch jetzt schon an mehreren Stellen darauf hingewiesen, daß das mit dem nächsten Update erledigt wird...

racmo wrote: Sun 29. Oct 2023, 14:14 Von KeyHelp war ich bisher immer gewohnt, dass Funktionen immer vollständig umgesetzt waren.
Wo genau ist jetzt dein Problem? :?

Re: Rspamd - Automatisches lernen

Posted: Sun 29. Oct 2023, 19:19
by racmo
Wenn ich es im entsprechenden Thread richtig verstehe wurde nur darauf hingewiesen dass, das anlernen über den Spam Ordner mit dem entsprechenden Cron Job eingebaut wird. Der andere Weg wenn eine E-Mail in „Posteingang“ verschoben wird, wahrscheinlich (vielleicht) aber nicht bzw. steht nicht fest.

Ich würde die Variante von diesem
Thread von OlliTheDarkness bevorzugen und das wollte ich mitteilen ;)

Re: Rspamd - Automatisches lernen

Posted: Tue 31. Oct 2023, 16:29
by mhagge
Auf meinen Systemen war es leicht anders, warum auch immer

Und zwar im Nachtrag 2 von Olli

Anstelle von

Code: Select all

Environment="ReadWritePaths=/etc/dovecot/sieve/" 
musste es bei mir direkt

Code: Select all

ReadWritePaths=/etc/dovecot/sieve/
lauten. Mit der ersten Variante konnten die compilierten Sieve-Filter nicht geschrieben werden (ich nehme an, das war auch Dein Rechteproblem, Olli?), erst mit der korrigierten Variante ging es bei mir.

Ich hab auch direkt /lib/systemd/system/dovecot.service bearbeitet, /etc/systemd/system/multi-user.target.wants/dovecot.service ist hier nur ein Symlink darauf.

Re: Rspamd - Automatisches lernen

Posted: Tue 31. Oct 2023, 18:21
by technotravel
Vielen Dank für diese Anleitung Olli :mrgreen:

Bei mir funktionierten die Sievefilter nachher bei einigen Mailboxen nicht mehr. Ursache: der Standardfilter "Standard.sieve" musste nun nicht mehr in /././sieve/ zu finden sein, sondern in /././sieve/scripts/

Seltsamerweise wurde aber nicht für alle Mailboxen ein Unterordner "scripts" erzeugt. Vielleicht nur, wenn es einen Spam-Vorfall gibt?

Re: Rspamd - Automatisches lernen

Posted: Wed 1. Nov 2023, 11:23
by space2place
Danke Dir Olli.. :)

Re: Rspamd - Automatisches lernen

Posted: Thu 2. Nov 2023, 16:22
by bori123
Hi,

danke für die tolle Anleitung. Hatte in der dovecot.conf zum testen noch debug auf yes und alles hat funktioniert. Habe das dann wieder geändert, dovecot neu gestartet und bekomme jetzt (wenn ich debug wieder auf yes stelle) folgenden Fehler

Code: Select all

Debug: open(/proc/self/io) failed: Permission denied
Keine Ahnung warum und was nicht stimmt? Es hat ja funktioniert...

Code: Select all

drwxr-x--- 2 vmail dovecot 4096 20. Okt 14:30 conf.d
drwxr-x--- 2 vmail dovecot 4096  2. Nov 15:20 conf.keyhelp.d
-rw-r----- 1 vmail dovecot  686  2. Nov 16:15 dovecot.conf
-rw-r----- 1 vmail dovecot 1507 14. Jun 2022  dovecot-dict-auth.conf.ext
-rw-r----- 1 vmail dovecot  522 14. Jun 2022  dovecot-dict-sql.conf.ext
-rw-r--r-- 1 vmail dovecot 1248 28. Okt 21:46 dovecot-sni.conf
-rw-r----- 1 vmail dovecot  622 20. Okt 14:30 dovecot-sql.conf
-rw-r----- 1 vmail dovecot 5824 14. Jun 2022  dovecot-sql.conf.ext
drwx------ 2 vmail dovecot 4096 20. Okt 14:30 private
drwxr-x--- 2 vmail dovecot 4096  2. Nov 15:25 sieve

Code: Select all

-rw-r----- 1 vmail dovecot 235  2. Nov 15:11 learn-ham.sieve
-rw-r----- 1 vmail dovecot 409  2. Nov 15:24 learn-ham.svbin
-rw-r----- 1 vmail dovecot  87  2. Nov 15:11 learn-spam.sieve
-rw-r----- 1 vmail dovecot 272  2. Nov 15:25 learn-spam.svbin
-rw-r----- 1 vmail dovecot 141  2. Nov 15:12 spam-global.sieve
-rw-r----- 1 vmail dovecot 314  2. Nov 15:25 spam-global.svbin
Die Berechtigungen sollten doch an sich so passen, oder?

Hat zufällig jemand eine Idee?
Viele Grüße
Alex

Re: Rspamd - Automatisches lernen

Posted: Thu 2. Nov 2023, 16:41
by bori123
bori123 wrote: Thu 2. Nov 2023, 16:22 Hi,

danke für die tolle Anleitung. Hatte in der dovecot.conf zum testen noch debug auf yes und alles hat funktioniert. Habe das dann wieder geändert, dovecot neu gestartet und bekomme jetzt (wenn ich debug wieder auf yes stelle) folgenden Fehler

Code: Select all

Debug: open(/proc/self/io) failed: Permission denied
Keine Ahnung warum und was nicht stimmt? Es hat ja funktioniert...

Code: Select all

drwxr-x--- 2 vmail dovecot 4096 20. Okt 14:30 conf.d
drwxr-x--- 2 vmail dovecot 4096  2. Nov 15:20 conf.keyhelp.d
-rw-r----- 1 vmail dovecot  686  2. Nov 16:15 dovecot.conf
-rw-r----- 1 vmail dovecot 1507 14. Jun 2022  dovecot-dict-auth.conf.ext
-rw-r----- 1 vmail dovecot  522 14. Jun 2022  dovecot-dict-sql.conf.ext
-rw-r--r-- 1 vmail dovecot 1248 28. Okt 21:46 dovecot-sni.conf
-rw-r----- 1 vmail dovecot  622 20. Okt 14:30 dovecot-sql.conf
-rw-r----- 1 vmail dovecot 5824 14. Jun 2022  dovecot-sql.conf.ext
drwx------ 2 vmail dovecot 4096 20. Okt 14:30 private
drwxr-x--- 2 vmail dovecot 4096  2. Nov 15:25 sieve

Code: Select all

-rw-r----- 1 vmail dovecot 235  2. Nov 15:11 learn-ham.sieve
-rw-r----- 1 vmail dovecot 409  2. Nov 15:24 learn-ham.svbin
-rw-r----- 1 vmail dovecot  87  2. Nov 15:11 learn-spam.sieve
-rw-r----- 1 vmail dovecot 272  2. Nov 15:25 learn-spam.svbin
-rw-r----- 1 vmail dovecot 141  2. Nov 15:12 spam-global.sieve
-rw-r----- 1 vmail dovecot 314  2. Nov 15:25 spam-global.svbin
Die Berechtigungen sollten doch an sich so passen, oder?

Hat zufällig jemand eine Idee?
Viele Grüße
Alex
Hallo zusammen,

Fehler gefunden... :oops:
Wenn man nachträglich über Keyhelp => Konfiguration => Email Server noch irgendeine Änderung vornimmt überschreibt er die abgeänderten Dateien /etc/dovecot/conf.keyhelp.d/20-protocols.conf und /etc/dovecot/conf.keyhelp.d/90-plugins.conf wieder und die gemachten Änderungen sind futsch...

Hätte mach drauf kommen können... Also falls mal jemand auch darüber stolpert, das zur Info ;)

Viele Grüße
Alex

Re: Rspamd - Automatisches lernen

Posted: Sun 5. Nov 2023, 18:54
by Peter
Hallo,

wie lässt sich testen ob diese Logik funktioniert? Ich habe die Funktionalität entsprechend der Anleitung hinterlegt und die Dienste laufen auch wieder. Aber ich bin mir nicht sicher ob das erlernen funktioniert. Im Dashboard hätte ich eigentlich erwartet das in der Bayesian statistics im Abschnitt User die Anzahl höher geht. Das ist aber nicht der Fall wenn ich eine Mail manuell von Junk zum Posteingang verschiebe oder umgekehrt.

Im Debug Log sehe ich folgendes:

Code: Select all

2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Mailbox Junk: Mailbox opened
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Mailbox Junk: UID 3: Mail expunged
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Mailbox Junk: UID 3: Expunge requested
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: imapsieve: Static mailbox rule [2]: mailbox=`*' from=`Junk' causes=(COPY) => before=`file:/etc/dovecot/sieve/learn-ham.sieve' after=(none)
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: imapsieve: Static mailbox rule [1]: mailbox=`Junk' from=`*' causes=(COPY) => before=`file:/etc/dovecot/sieve/learn-spam.sieve' after=(none)
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: sieve: Sieve Extprograms plugin for Pigeonhole version 0.5.19 (4eae2f79) loaded
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: sieve: Sieve imapsieve plugin for Pigeonhole version 0.5.19 (4eae2f79) loaded
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: sieve: include: sieve_global is not set; it is currently not possible to include `:global' scripts.
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: sieve: Pigeonhole version 0.5.19 (4eae2f79) initializing
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: duplicate db: Initialize
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: imapsieve: mailbox Junk: FLAG event (changed flags: \Deleted)
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Mailbox Junk: Mailbox opened
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: quota: quota_over_flag check: quota_over_script unset - skipping
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: maildir++: root=/var/mail/vhosts/domain.de/admin, index=, indexpvt=, control=, inbox=/var/mail/vhosts/domain.de/admin, alt=
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Namespace inbox: type=private, prefix=, sep=, inbox=yes, hidden=no, list=yes, subscriptions=yes location=maildir:/var/mail/vhosts/domain.de/admin
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: open(/proc/self/io) failed: Permission denied
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Quota grace: root=User quota bytes=1073741824 (10%)
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Quota rule: root=User quota mailbox=* bytes=10737418240 messages=0
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Quota root: name=User quota backend=maildir args=
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Effective uid=5000, gid=5000, home=/var/mail/vhosts/domain.de/admin
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Added userdb setting: plugin/quota_rule=*:bytes=10737418240
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Module loaded: /usr/lib/dovecot/modules/lib95_imap_sieve_plugin.so
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Module loaded: /usr/lib/dovecot/modules/lib11_imap_quota_plugin.so
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Module loaded: /usr/lib/dovecot/modules/lib10_quota_plugin.so
2023-11-05 17:55:58	dovecot	imap(admin@domain.de)<231952>: Debug: Loading modules from directory: /usr/lib/dovecot/modules