Zum Inhalt springen

Dovecot/Imapsieve

Aus Foxwiki

Dovecot/Imapsieve Dovecot imap_sieve erweitern


Beschreibung

Verschieben von Nachricht
Konfiguration für Dovecot 2.4

Konfiguration

ISPConfig-Template

Custom-Konfiguration

  • Bleib bei späteren Reconfigure-/Update-Vorgängen erhalten
/usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master
protocol imap {
  mail_plugins {
    imap_sieve = yes
  }
}

sieve_plugins {
  sieve_imapsieve = yes
  sieve_extprograms = yes
}

sieve_global_extensions {
  vnd.dovecot.pipe = yes
  vnd.dovecot.environment = yes
}

sieve_pipe_bin_dir = /etc/dovecot/sieve

mailbox Junk {
  sieve_script report-spam {
    type = before
    cause = copy
    path = /etc/dovecot/sieve/report-spam.sieve
  }
}

imapsieve_from Junk {
  sieve_script report-ham {
    type = before
    cause = copy
    path = /etc/dovecot/sieve/report-ham.sieve
  }
}

Die ISPConfig-Custom-Konfiguration wird in die aktive Dovecot-Konfiguration übernommen

cp /usr/local/ispconfig/server/conf-custom/install/dovecot_custom.conf.master /etc/dovecot/conf.d/99-ispconfig-custom-config.conf
Create sieve scripts folder
mkdir -p /etc/dovecot/sieve
/etc/dovecot/sieve/report-spam.sieve
  • Die Nachricht wird per Pipe an rspamd-learn-spam.sh übergeben
require ["vnd.dovecot.pipe", "copy", "imapsieve"];
pipe :copy "rspamd-learn-spam.sh";
/etc/dovecot/sieve/report-ham.sieve

Dieses Sieve-Skript wird ausgeführt, wenn eine Nachricht aus Junk in einen anderen IMAP-Ordner kopiert wird

  • Kopien nach Trash, Deleted Messages oder erneut nach Junk werden ignoriert
  • Alle anderen Kopien werden per Pipe an rspamd-learn-ham.sh übergeben
require ["vnd.dovecot.pipe", "copy", "imapsieve", "environment", "variables"];

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

if string "${mailbox}" ["Trash", "Deleted Messages", "Junk"] {
  stop;
}

pipe :copy "rspamd-learn-ham.sh";
/etc/dovecot/sieve/rspamd-learn-spam.sh

Das Pipe-Skript übergibt die Nachricht an Rspamd und trainiert sie als Spam

#!/bin/sh
exec /usr/bin/rspamc -h 10.0.0.8:11334 learn_spam
/etc/dovecot/sieve/rspamd-learn-ham.sh

Das Pipe-Skript übergibt die Nachricht an Rspamd und trainiert sie als Ham

#!/bin/sh
exec /usr/bin/rspamc -h 10.0.0.8:11334 learn_ham

Die Pipe-Skripte müssen für Dovecot ausführbar sein

chmod 0755 /etc/dovecot/sieve/rspamd-learn-spam.sh /etc/dovecot/sieve/rspamd-learn-ham.sh
chmod +x /etc/dovecot/sieve/rspamd-learn-spam.sh /etc/dovecot/sieve/rspamd-learn-ham.sh

Die Sieve-Skripte werden kompiliert, damit Dovecot sie direkt verwenden kann

sievec /etc/dovecot/sieve/report-spam.sieve
sievec /etc/dovecot/sieve/report-ham.sieve

Abschließend wird die Dovecot-Konfiguration geprüft und der Dienst neu geladen

dovecot -n
systemctl reload dovecot

Ordnernamen

  • Der Ordnername Junk muss dem tatsächlichen IMAP-Ordnernamen entsprechen
    • Mögliche abweichende Namen sind z. B. Spam
  • Bei abweichendem Ordnernamen müssen beide Dovecot-Blöcke angepasst werden
    • Zusätzlich muss die Ausschlussliste im Ham-Skript angepasst werden
Beispiel mit Spam
mailbox Spam {
  sieve_script report-spam {
    type = before
    cause = copy
    path = /etc/dovecot/sieve/report-spam.sieve
  }
}

imapsieve_from Spam {
  sieve_script report-ham {
    type = before
    cause = copy
    path = /etc/dovecot/sieve/report-ham.sieve
  }
}

Sicherheit

  • Die Pipe-Skripte werden durch Dovecot ausgeführt und müssen daher kontrolliert verwaltet werden
    • /etc/dovecot/sieve darf nicht durch Mailbenutzer beschreibbar sein
  • Der Rspamd-Controller sollte nur aus vertrauenswürdigen Netzen erreichbar sein
  • Bei Verwendung eines Passworts sollte dieses nicht in allgemein lesbaren Dateien abgelegt werden
Rspamd-Controller mit enable_password
  • password schützt lesende Controller-Kommandos
    • Wird nur password gesetzt, kann dieses Passwort auch für privilegierte Kommandos verwendet werden
  • enable_password schützt privilegierte Kommandos, z. B. Learning und Konfigurationsänderungen
    • Wird zusätzlich enable_password gesetzt, sollte für IMAPSieve-Learning nur dieses Passwort verwendet werden
Passwort-Hash erzeugen
  • Der Hash wird auf dem Rspamd-Host erzeugt
  • Der Parameter -p sollte nicht verwendet werden, da das Passwort sonst in der Shell-History oder Prozessliste sichtbar werden kann
rspamadm pw -q
/etc/rspamd/local.d/worker-controller.inc
  • Der erzeugte Hash wird als enable_password eingetragen
    • Optional kann zusätzlich ein separates password für lesende Zugriffe gesetzt werden
  • Der Controller sollte nur auf einer internen Adresse oder localhost gebunden werden
bind_socket = "10.2.2.8:11334";

password = "$2$READONLY_PASSWORD_HASH";
enable_password = "$2$ENABLE_PASSWORD_HASH";

secure_ip = ["127.0.0.1", "::1"];
Rspamd-Konfiguration prüfen
rspamadm configtest
systemctl restart rspamd
Passwortdatei für rspamc
  • Die Passwortdatei wird auf dem Dovecot-Host angelegt
    • Die Datei enthält den Klartext des enable_password
  • rspamc kann das Passwort über -P direkt aus dieser Datei lesen
    • Dadurch erscheint das Passwort nicht als Kommandozeilenargument in der Prozessliste
printf '%s\n' 'ENABLE_PASSWORD_KLARTEXT' > /etc/dovecot/sieve/rspamd-controller.pass
chmod 0640 /etc/dovecot/sieve/rspamd-controller.pass
chown root:vmail /etc/dovecot/sieve/rspamd-controller.pass
/etc/dovecot/sieve/rspamd-learn-spam.sh
#!/bin/sh
exec /usr/bin/rspamc -h 10.0.0.8:11334 -P /etc/dovecot/sieve/rspamd-controller.pass learn_spam
/etc/dovecot/sieve/rspamd-learn-ham.sh
#!/bin/sh
exec /usr/bin/rspamc -h 10.0.0.8:11334 -P /etc/dovecot/sieve/rspamd-controller.pass learn_ham
Berechtigungen erneut prüfen
chown -R root:root /etc/dovecot/sieve
chown root:vmail /etc/dovecot/sieve/rspamd-controller.pass
chmod 0755 /etc/dovecot/sieve
chmod 0640 /etc/dovecot/sieve/rspamd-controller.pass
Zugriff testen
rspamc -h 10.0.0.8:11334 -P /etc/dovecot/sieve/rspamd-controller.pass stat

Test

Konfiguration prüfen
  • Die geladene Dovecot-Konfiguration muss die IMAPSieve- und Extprograms-Optionen enthalten
doveconf -n | grep -E 'imap_sieve|sieve_imapsieve|sieve_extprograms|sieve_pipe_bin_dir'
Rspamd-Verbindung prüfen
  • Der Dovecot-Host muss den Rspamd-Controller erreichen können
rspamc -h <published_ip>:11334 stat
Logs beobachten
  • Während des Tests sollten Dovecot- und Rspamd-Logs beobachtet werden
journalctl -u dovecot -u rspamd -f
tail -f /var/log/roundcube/error.log /var/log/roundcube/error.log.1
Testfall Aktion Erwartung
Spam Nachricht nach Junk kopieren learn_spam wird ausgeführt
Ham Nachricht aus Junk nach INBOX kopieren learn_ham wird ausgeführt
Trash Nachricht aus Junk nach Trash kopieren Kein Ham-Learning
Wiederholung Dieselbe Nachricht erneut lernen Rspamd kann already learned melden

Fehleranalyse

Symptom Mögliche Ursache Prüfung
Kein Learning beim Verschieben IMAPSieve-Plugin nicht geladen doveconf -n prüfen
Kein Learning beim Verschieben nach Spam Ordnername stimmt nicht mit Junk überein IMAP-Ordnernamen prüfen
Permission denied Pipe-Skript nicht ausführbar oder falsche Rechte Rechte unter /etc/dovecot/sieve prüfen
rspamc: connection refused Rspamd-Controller nicht erreichbar Host, Port und Firewall prüfen. Socket in der Konfiguration prüfen
authentication failed Controller-Zugriff nicht erlaubt secure_ip oder enable_password prüfen
already learned Nachricht wurde bereits trainiert Kein Fehler, erneutes Lernen wurde übersprungen
contains less tokens than required Nachricht ist für Bayes-Learning zu kurz min_tokens prüfen
Bayes-Symbol erscheint nicht im Scan-Ergebnis Zu wenige gelernte Spam- oder Ham-Nachrichten min_learns prüfen

Bayes

Bayes Hinweise

Sehr kurze Nachrichten werden von Rspamd nicht für Bayes-Learning verwendet

  • Der Standardwert min_tokens = 11 bedeutet, dass mindestens 11 statistische Tokens vorhanden sein müssen

Bei zu kurzen Nachrichten erscheint im Log sinngemäß eine Meldung wie:

contains less tokens than required: 9 < 11

Bayes wirkt nicht unmittelbar nach den ersten gelernten Nachrichten

  • Der Standardwert min_learns = 200 bedeutet, dass für Spam und Ham jeweils genügend gelernte Nachrichten vorhanden sein müssen, bevor die Bayes-Klassifizierung aktiv in die Bewertung einfließt

Rspamd speichert dafür gelernte IDs bzw. Signaturen im Cache und kann dann eine Meldung wie already learned zurückgeben.

Parameter Standardwert Bedeutung
min_tokens 11 Mindestanzahl statistischer Tokens, damit eine Nachricht für Bayes verarbeitet wird
min_learns 200 Mindestanzahl gelernter Nachrichten pro Klasse, bevor Bayes für die Klassifizierung verwendet wird
cache_prefix learned_ids Prefix für gespeicherte IDs bereits gelernter Nachrichten
Variablen anzeigen

Die aktuell wirksamen Rspamd-Parameter können über rspamadm configdump geprüft werden

rspamadm configdump

Die Standardkonfiguration befindet sich in /etc/rspamd/statistic.conf

  • Diese Datei sollte nicht direkt angepasst werden, da sie zur Paketkonfiguration gehört
Eigene Werte setzen

Eigene Bayes-Parameter werden üblicherweise in /etc/rspamd/local.d/classifier-bayes.conf gesetzt

  • Die Datei ergänzt oder überschreibt die Standardwerte aus der Rspamd-Konfiguration
/etc/rspamd/local.d/classifier-bayes.conf
min_tokens = 11;
min_learns = 200;
cache_prefix = "learned_ids";

Nach der Änderung wird die Rspamd-Konfiguration geprüft

rspamadm configtest

Anschließend wird Rspamd neu gestartet, damit die geänderten Werte aktiv werden

systemctl restart rspamd

Installation

Aufruf

Optionen

Unix GNU Parameter Beschreibung

Parameter

Umgebungsvariablen

Exit-Status

Wert Beschreibung
0 Erfolg
>0 Fehler

Anwendung

Problembehebung

Konfiguration

Dateien

Datei Beschreibung


Anhang

Siehe auch



Dokumentation

Projekt