Rspamd kurz und gut

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

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)