Rspamd kurz und gut
Version vom 20. März 2026, 10:21 Uhr von Thomas.will (Diskussion | Beiträge)
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)