Rspamd kurz und gut: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
| Zeile 1: | Zeile 1: | ||
| − | = Mailserver | + | = Schulung: Mailserver-Erweiterung (Postfix, Rspamd, Dovecot & Sieve) = |
| − | == | + | == Zielsetzung == |
| − | * Aufbau eines | + | * Aufbau eines transparenten Mailflows |
| − | * Automatische Sortierung | + | * Spam-Erkennung mit Rspamd |
| − | + | * Zustellung via Dovecot LMTP | |
| + | * Automatische Sortierung in Junk via Sieve | ||
== Architektur == | == Architektur == | ||
| − | * Postfix nimmt | + | * Postfix nimmt Mail an |
| − | * Rspamd | + | * Übergabe an Rspamd (Milter) |
| − | * Dovecot | + | * Rspamd bewertet Spam-Score und setzt Header |
| − | * Sieve | + | * 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 |
| − | * Postfix | + | <pre> |
| − | * | + | 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 | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
virtual_transport = lmtp:unix:private/dovecot-lmtp | virtual_transport = lmtp:unix:private/dovecot-lmtp | ||
</pre> | </pre> | ||
| − | == LMTP Socket | + | == Schritt: Dovecot - LMTP Socket == |
| − | * Dovecot stellt einen lokalen Socket bereit, über den Postfix Mails | + | * 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 | Datei: /etc/dovecot/conf.d/10-master.conf | ||
<pre> | <pre> | ||
| Zeile 54: | Zeile 76: | ||
</pre> | </pre> | ||
| − | == Sieve | + | == Schritt: Dovecot - Sieve aktivieren == |
| − | * Das Sieve-Plugin wird | + | * Das Sieve-Plugin wird im LMTP-Kontext aktiviert, damit eingehende Mails direkt verarbeitet werden können. |
| − | * Dadurch | + | * 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> | ||
| − | == | + | == Schritt: Junk-Mailbox sicherstellen == |
| − | * | + | * Damit Spam korrekt einsortiert werden kann, muss der Junk-Ordner existieren oder automatisch erstellt werden. |
| − | * Die | + | * Die special_use-Markierung sorgt dafür, dass Mailclients den Ordner korrekt als Spam-Ordner erkennen. |
| − | Datei: /etc/dovecot/conf.d/ | + | Datei: /etc/dovecot/conf.d/15-mailboxes.conf |
<pre> | <pre> | ||
| − | + | namespace inbox { | |
| − | + | mailbox Junk { | |
| + | auto = create | ||
| + | special_use = \Junk | ||
| + | } | ||
} | } | ||
</pre> | </pre> | ||
| − | == Sieve Regel | + | == 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. |
| − | Datei: / | + | mkdir -p /var/lib/dovecot/sieve/ |
| + | |||
| + | Datei: /var/lib/dovecot/sieve/default.sieve | ||
<pre> | <pre> | ||
| − | require ["fileinto | + | require ["fileinto"]; |
| − | if header :contains "X-Spam | + | if header :contains "X-Spam" "Yes" { |
fileinto "Junk"; | fileinto "Junk"; | ||
stop; | stop; | ||
| Zeile 87: | Zeile 114: | ||
</pre> | </pre> | ||
| − | == | + | Datei: /etc/dovecot/conf.d/90-sieve.conf |
| − | * Die Regel wird in ein | + | <pre> |
| − | * | + | plugin { |
| − | + | sieve_before = /var/lib/dovecot/sieve/default.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 | ||
| − | + | * 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 == | == Fazit == | ||
| − | * Rspamd | + | * Zentrale Spam-Erkennung mit Rspamd |
| − | * Sieve | + | * Automatische Einsortierung durch Sieve |
| − | * | + | * 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)