Rspamd kurz und gut: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
= Mailserver: Postfix + Rspamd + Dovecot + Sieve (vollständiger Mailflow) =
+
= Schulung: Mailserver-Erweiterung (Postfix, Rspamd, Dovecot & Sieve) =
  
== Ziel ==
+
== Zielsetzung ==
* Aufbau eines vollständigen Mailfilters mit Spam- und Virenerkennung
+
* Aufbau eines transparenten Mailflows
* Automatische Sortierung von Spam in den Junk-Ordner
+
* Spam-Erkennung mit Rspamd
* Sauberer Mailflow ohne versteckte Fehlerquellen
+
* Zustellung via Dovecot LMTP
 +
* Automatische Sortierung in Junk via Sieve
  
 
== Architektur ==
 
== Architektur ==
* Postfix nimmt E-Mails per SMTP an
+
* Postfix nimmt Mail an
* Rspamd analysiert die Mail (Spam/Virus)
+
* Übergabe an Rspamd (Milter)
* Dovecot übernimmt die Zustellung per LMTP
+
* Rspamd bewertet Spam-Score und setzt Header
* Sieve sortiert Spam anhand der Header in den Junk-Ordner
+
* Postfix übergibt an Dovecot (LMTP)
 +
* Dovecot führt Sieve-Regeln aus
 +
* Spam wird in Junk einsortiert
  
== Voraussetzung ==
+
== Schritt: Paketinstallation ==
* Postfix und Dovecot sind installiert und funktionsfähig
+
* In diesem Schritt werden alle notwendigen Komponenten für Spamfilter, Cache und serverseitige Filterregeln installiert.
* Grundlegende Mailzustellung läuft bereits
+
* Redis dient als schneller Speicher für Rspamd, während Dovecot-Sieve die spätere Mailverarbeitung ermöglicht.
 +
  apt update
 +
  apt install -y rspamd redis-server dovecot-sieve dovecot-managesieved
  
== Sieve-Unterstützung installieren ==
+
== Schritt: Rspamd Vorbereitung (Passwort & UI) ==
* Sieve erweitert Dovecot um serverseitige Filterregeln, die beim Zustellen ausgeführt werden.
+
* Für die Administration wird das Webinterface von Rspamd aktiviert und mit einem Passwort geschützt.
* Ohne Sieve ist keine automatische Sortierung von Spam möglich.
+
* Der erzeugte Hash wird in die Konfiguration übernommen und ermöglicht später den Zugriff über den Browser.
apt install dovecot-sieve dovecot-managesieved
+
  rspamadm pw -p xinux123
  
== Rspamd als Milter in Postfix einbinden ==
+
Datei: /etc/rspamd/local.d/worker-controller.inc
* Postfix übergibt eingehende Mails an Rspamd zur Analyse.
+
<pre>
* Rspamd fügt Header hinzu, die später für die Sortierung verwendet werden.
+
password = "$6$HASH_EINFUEGEN";
 +
bind_socket = "0.0.0.0:11334";
 +
</pre>
 +
 
 +
Datei: /etc/rspamd/local.d/redis.conf
 +
<pre>
 +
servers = "127.0.0.1";
 +
</pre>
 +
 
 +
Datei: /etc/rspamd/local.d/milter_headers.conf
 +
<pre>
 +
extended_spam_headers = true;
 +
use = ["x-spam-status", "x-spam-score", "x-spam"];
 +
</pre>
 +
 
 +
Datei: /etc/rspamd/local.d/classifier-bayes.conf
 +
<pre>
 +
backend = "redis";
 +
servers = "127.0.0.1";
 +
</pre>
 +
 
 +
== Schritt: Postfix - Milter und LMTP ==
 +
* Postfix wird so konfiguriert, dass jede eingehende Mail zur Bewertung an Rspamd weitergereicht wird.
 +
* Nach der Analyse erfolgt die Zustellung nicht lokal, sondern über das LMTP-Protokoll an Dovecot.
 
Datei: /etc/postfix/main.cf
 
Datei: /etc/postfix/main.cf
 
<pre>
 
<pre>
 
smtpd_milters = inet:localhost:11332
 
smtpd_milters = inet:localhost:11332
 
non_smtpd_milters = $smtpd_milters
 
non_smtpd_milters = $smtpd_milters
 +
milter_protocol = 6
 
milter_default_action = accept
 
milter_default_action = accept
milter_protocol = 6
 
</pre>
 
  
== LMTP Zustellung aktivieren (entscheidend) ==
 
* Postfix übergibt die Mail an Dovecot statt sie selbst zuzustellen.
 
* Nur bei LMTP-Zustellung wird Sieve beim Mail-Eingang ausgeführt.
 
Datei: /etc/postfix/main.cf
 
<pre>
 
 
virtual_transport = lmtp:unix:private/dovecot-lmtp
 
virtual_transport = lmtp:unix:private/dovecot-lmtp
 
</pre>
 
</pre>
  
== LMTP Socket in Dovecot aktivieren ==
+
== Schritt: Dovecot - LMTP Socket ==
* Dovecot stellt einen lokalen Socket bereit, über den Postfix Mails übergeben kann.
+
* Dovecot stellt einen lokalen Socket bereit, über den Postfix die Mails zustellen kann.
* Ohne diesen Socket funktioniert die Übergabe von Postfix an Dovecot nicht.
+
* Die Berechtigungen werden so gesetzt, dass Postfix Zugriff erhält, ohne die Sicherheit zu gefährden.
 
Datei: /etc/dovecot/conf.d/10-master.conf
 
Datei: /etc/dovecot/conf.d/10-master.conf
 
<pre>
 
<pre>
Zeile 54: Zeile 76:
 
</pre>
 
</pre>
  
== Sieve in Dovecot aktivieren ==
+
== Schritt: Dovecot - Sieve aktivieren ==
* Das Sieve-Plugin wird für die lokale Zustellung aktiviert.
+
* Das Sieve-Plugin wird im LMTP-Kontext aktiviert, damit eingehende Mails direkt verarbeitet werden können.
* Dadurch werden Filterregeln direkt beim Eingang der Mail angewendet.
+
* Dadurch lassen sich serverseitige Filterregeln anwenden, bevor der Benutzer die Mail sieht.
 
Datei: /etc/dovecot/conf.d/20-lmtp.conf
 
Datei: /etc/dovecot/conf.d/20-lmtp.conf
 
<pre>
 
<pre>
Zeile 64: Zeile 86:
 
</pre>
 
</pre>
  
== Sieve Plugin konfigurieren ==
+
== Schritt: Junk-Mailbox sicherstellen ==
* Definiert den Speicherort der Sieve-Regeln pro Benutzer.
+
* Damit Spam korrekt einsortiert werden kann, muss der Junk-Ordner existieren oder automatisch erstellt werden.
* Die aktive Regel wird automatisch bei jeder Mail ausgeführt.
+
* Die special_use-Markierung sorgt dafür, dass Mailclients den Ordner korrekt als Spam-Ordner erkennen.
Datei: /etc/dovecot/conf.d/90-sieve.conf
+
Datei: /etc/dovecot/conf.d/15-mailboxes.conf
 
<pre>
 
<pre>
plugin {
+
namespace inbox {
   sieve = file:~/sieve;active=~/.dovecot.sieve
+
   mailbox Junk {
 +
    auto = create
 +
    special_use = \Junk
 +
  }
 
}
 
}
 
</pre>
 
</pre>
  
== Sieve Regel für Spam-Sortierung erstellen ==
+
== Schritt: Globale Sieve-Regel ==
* Die Regel prüft die von Rspamd gesetzten Header.
+
* Es wird eine globale Filterregel definiert, die für alle Benutzer gilt und sofort aktiv ist.
* Erkannter Spam wird automatisch in den Junk-Ordner verschoben.
+
* Die Regel prüft auf Spam-Header und verschiebt entsprechende Mails automatisch in den Junk-Ordner.
Datei: /home/USER/.dovecot.sieve
+
  mkdir -p /var/lib/dovecot/sieve/
 +
 
 +
Datei: /var/lib/dovecot/sieve/default.sieve
 
<pre>
 
<pre>
require ["fileinto", "mailbox"];
+
require ["fileinto"];
  
if header :contains "X-Spam-Flag" "YES" {
+
if header :contains "X-Spam" "Yes" {
 
   fileinto "Junk";
 
   fileinto "Junk";
 
   stop;
 
   stop;
Zeile 87: Zeile 114:
 
</pre>
 
</pre>
  
== Sieve kompilieren ==
+
Datei: /etc/dovecot/conf.d/90-sieve.conf
* Die Regel wird in ein optimiertes Format übersetzt.
+
<pre>
* Die korrekten Dateirechte sind notwendig, damit Dovecot die Regel verwenden kann.
+
plugin {
sievec /home/USER/.dovecot.sieve
+
  sieve_before = /var/lib/dovecot/sieve/default.sieve
chown USER:USER /home/USER/.dovecot.sieve*
+
}
 +
</pre>
 +
 
 +
== Schritt: Kompilieren und Rechte ==
 +
* Die Sieve-Regel wird in ein binäres Format kompiliert, damit sie effizient verarbeitet werden kann.
 +
* Anschließend werden die Berechtigungen gesetzt, damit Dovecot Zugriff auf die Dateien hat.
 +
  sievec /var/lib/dovecot/sieve/default.sieve
 +
  chown -R dovecot:dovecot /var/lib/dovecot/sieve/
 +
 
 +
== Schritt: Dienste starten ==
 +
* Alle beteiligten Dienste werden neu gestartet, damit die Konfiguration aktiv wird.
 +
* Die Reihenfolge stellt sicher, dass Abhängigkeiten korrekt initialisiert sind.
 +
  systemctl restart redis-server rspamd dovecot postfix
 +
 
 +
== Demonstration ==
 +
* Zunächst wird eine normale Mail gesendet, um den unveränderten Mailfluss zu zeigen.
 +
* Anschließend wird eine Test-Spam-Mail verwendet, um die Filterung sichtbar zu machen.
 +
* Mail ohne Spam senden → landet in INBOX
 +
* Mail mit GTUBE senden
 +
 
 +
GTUBE-String:
 +
<pre>
 +
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
 +
</pre>
 +
 
 +
== Analyse ==
 +
* Die Logs zeigen den kompletten Verarbeitungsweg der Mail durch alle Komponenten.
 +
* So lässt sich nachvollziehen, an welcher Stelle die Entscheidung für Spam getroffen wird.
 +
  journalctl -f
  
== Dienste neu starten ==
+
* Erwartete Logs:
* Alle beteiligten Dienste müssen neu gestartet werden, damit Änderungen aktiv werden.
+
* Rspamd: symbol: GTUBE (1000.00)
* Ohne Neustart bleiben Konfigurationsänderungen wirkungslos.
+
* Dovecot: lmtp(...): Saved
systemctl restart dovecot
+
* Sieve: stored mail into mailbox 'Junk'
systemctl restart postfix
 
systemctl restart rspamd
 
  
== Funktionstest ==
+
== Optional: Manuelles Training ==
* Eine Testmail wird erzeugt, um den kompletten Mailflow zu prüfen.
+
* Rspamd kann durch gezieltes Lernen weiter verbessert werden.
* Ziel ist, dass Spam automatisch im Junk-Ordner landet.
+
* Dabei werden Mails explizit als Spam oder Ham klassifiziert und im Bayes-Filter gespeichert.
* GTUBE Testmail senden
+
  rspamc learn_spam < mail.eml
* Prüfen, ob die Mail im Junk-Ordner landet
+
  rspamc learn_ham < mail.eml
tail -f /var/log/mail.log
 
  
 
== Fazit ==
 
== Fazit ==
* Rspamd filtert Inhalte, Dovecot übernimmt die Zustellung via LMTP.
+
* Zentrale Spam-Erkennung mit Rspamd
* Sieve sorgt für die automatische Sortierung basierend auf den Milter-Ergebnissen.
+
* Automatische Einsortierung durch Sieve
* Das Setup ist modular, sicher und entspricht modernen Standards.
+
* Keine Benutzerinteraktion notwendig
 +
* Live-Auswertung im Web-UI (Port 11334)

Version vom 20. März 2026, 10:21 Uhr

Schulung: Mailserver-Erweiterung (Postfix, Rspamd, Dovecot & Sieve)

Zielsetzung

  • Aufbau eines transparenten Mailflows
  • Spam-Erkennung mit Rspamd
  • Zustellung via Dovecot LMTP
  • Automatische Sortierung in Junk via Sieve

Architektur

  • Postfix nimmt Mail an
  • Übergabe an Rspamd (Milter)
  • Rspamd bewertet Spam-Score und setzt Header
  • Postfix übergibt an Dovecot (LMTP)
  • Dovecot führt Sieve-Regeln aus
  • Spam wird in Junk einsortiert

Schritt: Paketinstallation

  • In diesem Schritt werden alle notwendigen Komponenten für Spamfilter, Cache und serverseitige Filterregeln installiert.
  • Redis dient als schneller Speicher für Rspamd, während Dovecot-Sieve die spätere Mailverarbeitung ermöglicht.
 apt update
 apt install -y rspamd redis-server dovecot-sieve dovecot-managesieved

Schritt: Rspamd Vorbereitung (Passwort & UI)

  • Für die Administration wird das Webinterface von Rspamd aktiviert und mit einem Passwort geschützt.
  • Der erzeugte Hash wird in die Konfiguration übernommen und ermöglicht später den Zugriff über den Browser.
 rspamadm pw -p xinux123

Datei: /etc/rspamd/local.d/worker-controller.inc

password = "$6$HASH_EINFUEGEN";
bind_socket = "0.0.0.0:11334";

Datei: /etc/rspamd/local.d/redis.conf

servers = "127.0.0.1";

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

extended_spam_headers = true;
use = ["x-spam-status", "x-spam-score", "x-spam"];

Datei: /etc/rspamd/local.d/classifier-bayes.conf

backend = "redis";
servers = "127.0.0.1";

Schritt: Postfix - Milter und LMTP

  • Postfix wird so konfiguriert, dass jede eingehende Mail zur Bewertung an Rspamd weitergereicht wird.
  • Nach der Analyse erfolgt die Zustellung nicht lokal, sondern über das LMTP-Protokoll an Dovecot.

Datei: /etc/postfix/main.cf

smtpd_milters = inet:localhost:11332
non_smtpd_milters = $smtpd_milters
milter_protocol = 6
milter_default_action = accept

virtual_transport = lmtp:unix:private/dovecot-lmtp

Schritt: Dovecot - LMTP Socket

  • Dovecot stellt einen lokalen Socket bereit, über den Postfix die Mails zustellen kann.
  • Die Berechtigungen werden so gesetzt, dass Postfix Zugriff erhält, ohne die Sicherheit zu gefährden.

Datei: /etc/dovecot/conf.d/10-master.conf

service lmtp {
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
    mode = 0600
    user = postfix
    group = postfix
  }
}

Schritt: Dovecot - Sieve aktivieren

  • Das Sieve-Plugin wird im LMTP-Kontext aktiviert, damit eingehende Mails direkt verarbeitet werden können.
  • Dadurch lassen sich serverseitige Filterregeln anwenden, bevor der Benutzer die Mail sieht.

Datei: /etc/dovecot/conf.d/20-lmtp.conf

protocol lmtp {
  mail_plugins = $mail_plugins sieve
}

Schritt: Junk-Mailbox sicherstellen

  • Damit Spam korrekt einsortiert werden kann, muss der Junk-Ordner existieren oder automatisch erstellt werden.
  • Die special_use-Markierung sorgt dafür, dass Mailclients den Ordner korrekt als Spam-Ordner erkennen.

Datei: /etc/dovecot/conf.d/15-mailboxes.conf

namespace inbox {
  mailbox Junk {
    auto = create
    special_use = \Junk
  }
}

Schritt: Globale Sieve-Regel

  • Es wird eine globale Filterregel definiert, die für alle Benutzer gilt und sofort aktiv ist.
  • Die Regel prüft auf Spam-Header und verschiebt entsprechende Mails automatisch in den Junk-Ordner.
 mkdir -p /var/lib/dovecot/sieve/

Datei: /var/lib/dovecot/sieve/default.sieve

require ["fileinto"];

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

Datei: /etc/dovecot/conf.d/90-sieve.conf

plugin {
  sieve_before = /var/lib/dovecot/sieve/default.sieve
}

Schritt: Kompilieren und Rechte

  • Die Sieve-Regel wird in ein binäres Format kompiliert, damit sie effizient verarbeitet werden kann.
  • Anschließend werden die Berechtigungen gesetzt, damit Dovecot Zugriff auf die Dateien hat.
 sievec /var/lib/dovecot/sieve/default.sieve
 chown -R dovecot:dovecot /var/lib/dovecot/sieve/

Schritt: Dienste starten

  • Alle beteiligten Dienste werden neu gestartet, damit die Konfiguration aktiv wird.
  • Die Reihenfolge stellt sicher, dass Abhängigkeiten korrekt initialisiert sind.
 systemctl restart redis-server rspamd dovecot postfix

Demonstration

  • Zunächst wird eine normale Mail gesendet, um den unveränderten Mailfluss zu zeigen.
  • Anschließend wird eine Test-Spam-Mail verwendet, um die Filterung sichtbar zu machen.
  • Mail ohne Spam senden → landet in INBOX
  • Mail mit GTUBE senden

GTUBE-String:

XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X

Analyse

  • Die Logs zeigen den kompletten Verarbeitungsweg der Mail durch alle Komponenten.
  • So lässt sich nachvollziehen, an welcher Stelle die Entscheidung für Spam getroffen wird.
 journalctl -f
  • Erwartete Logs:
  • Rspamd: symbol: GTUBE (1000.00)
  • Dovecot: lmtp(...): Saved
  • Sieve: stored mail into mailbox 'Junk'

Optional: Manuelles Training

  • Rspamd kann durch gezieltes Lernen weiter verbessert werden.
  • Dabei werden Mails explizit als Spam oder Ham klassifiziert und im Bayes-Filter gespeichert.
 rspamc learn_spam < mail.eml
 rspamc learn_ham < mail.eml

Fazit

  • Zentrale Spam-Erkennung mit Rspamd
  • Automatische Einsortierung durch Sieve
  • Keine Benutzerinteraktion notwendig
  • Live-Auswertung im Web-UI (Port 11334)