Rspamd kurz und gut: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
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)