Rspamd kurz und gut: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
= Schulung: Mailserver-Erweiterung (Postfix, Rspamd, Dovecot & Sieve) =
+
= Rspamd + ClamAV Integration (Postfix) =
  
== Zielsetzung ==
+
== Ziel ==
* Aufbau eines transparenten Mailflows
+
* Integration eines Spam- und Virenfilters in eine bestehende Mailserver-Umgebung.
* Spam-Erkennung mit Rspamd
+
* Am Ende können Spam (GTUBE), Viren (EICAR) und SPF-Bewertungen demonstriert werden.
* Zustellung via Dovecot LMTP
 
* Automatische Sortierung in Junk via Sieve
 
  
== Architektur ==
+
== Schritt 1: Aufräumen (Tabula Rasa) ==
* Postfix nimmt Mail an
+
* Alte Rspamd- und ClamAV-Komponenten werden entfernt, um Konflikte zu vermeiden.
* Übergabe an Rspamd (Milter)
+
* Dadurch wird sichergestellt, dass keine alten Konfigurationen das Verhalten beeinflussen.
* 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 ==
+
systemctl stop rspamd clamav-daemon 2>/dev/null || true
* In diesem Schritt werden alle notwendigen Komponenten für Spamfilter, Cache und serverseitige Filterregeln installiert.
+
service rspamd stop 2>/dev/null || true
* Redis dient als schneller Speicher für Rspamd, während Dovecot-Sieve die spätere Mailverarbeitung ermöglicht.
+
service clamav-daemon stop 2>/dev/null || true
  apt update
+
apt -y purge rspamd clamav clamav-daemon || true
  apt install -y rspamd redis-server dovecot-sieve dovecot-managesieved
+
apt -y autoremove
 +
apt -y autoclean
 +
rm -rf /etc/rspamd
 +
rm -rf /var/lib/rspamd
 +
rm -rf /var/log/rspamd
  
== Schritt: Rspamd Vorbereitung (Passwort & UI) ==
+
== Schritt 2: Installation ==
* Für die Administration wird das Webinterface von Rspamd aktiviert und mit einem Passwort geschützt.
+
* Die benötigten Pakete für Spam- und Virenfilter werden installiert.
* Der erzeugte Hash wird in die Konfiguration übernommen und ermöglicht später den Zugriff über den Browser.
+
* Rspamd übernimmt die Analyse, ClamAV die Virenerkennung.
  rspamadm pw -p xinux123
 
  
Datei: /etc/rspamd/local.d/worker-controller.inc
+
apt update
<pre>
+
apt -y install rspamd clamav clamav-daemon
password = "$6$HASH_EINFUEGEN";
 
bind_socket = "0.0.0.0:11334";
 
</pre>
 
  
Datei: /etc/rspamd/local.d/redis.conf
+
== Schritt 3: Virensignaturen aktualisieren ==
<pre>
+
* ClamAV benötigt aktuelle Signaturen, um zuverlässig Viren zu erkennen.
servers = "127.0.0.1";
+
* Der Befehl lädt die neuesten Definitionen herunter.
</pre>
 
  
Datei: /etc/rspamd/local.d/milter_headers.conf
+
freshclam || true
<pre>
 
extended_spam_headers = true;
 
use = ["x-spam-status", "x-spam-score", "x-spam"];
 
</pre>
 
  
Datei: /etc/rspamd/local.d/classifier-bayes.conf
+
== Schritt 4: Grundkonfiguration ==
<pre>
+
* Das Verzeichnis für lokale Rspamd-Konfigurationen wird angelegt.
backend = "redis";
+
* Hier werden alle eigenen Anpassungen gespeichert.
servers = "127.0.0.1";
 
</pre>
 
  
== Schritt: Postfix - Milter und LMTP ==
+
mkdir -p /etc/rspamd/local.d
* 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
 
<pre>
 
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 5: ClamAV Integration ==
</pre>
+
* Rspamd wird so konfiguriert, dass eingehende Mails an ClamAV übergeben werden.
 +
* Wird ein Virus erkannt, wird die Mail sofort abgelehnt.
  
== Schritt: Dovecot - LMTP Socket ==
+
cat <<EOF > /etc/rspamd/local.d/antivirus.conf
* Dovecot stellt einen lokalen Socket bereit, über den Postfix die Mails zustellen kann.
+
<pre>
* Die Berechtigungen werden so gesetzt, dass Postfix Zugriff erhält, ohne die Sicherheit zu gefährden.
+
clamav {
Datei: /etc/dovecot/conf.d/10-master.conf
+
  action = "reject";
<pre>
+
  symbol = "CLAM_VIRUS";
service lmtp {
+
  type = "clamav";
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
+
  servers = "127.0.0.1:3310";
    mode = 0600
+
}
    user = postfix
+
</pre>
    group = postfix
+
EOF
  }
 
}
 
</pre>
 
  
== Schritt: Dovecot - Sieve aktivieren ==
+
== Schritt 6: Aktionen ==
* Das Sieve-Plugin wird im LMTP-Kontext aktiviert, damit eingehende Mails direkt verarbeitet werden können.
+
* Die Schwellwerte bestimmen, ab wann eine Mail abgelehnt oder markiert wird.
* Dadurch lassen sich serverseitige Filterregeln anwenden, bevor der Benutzer die Mail sieht.
+
* Für Schulungen sind die Werte bewusst niedrig gewählt.
Datei: /etc/dovecot/conf.d/20-lmtp.conf
 
<pre>
 
protocol lmtp {
 
  mail_plugins = $mail_plugins sieve
 
}
 
</pre>
 
  
== Schritt: Junk-Mailbox sicherstellen ==
+
cat <<EOF > /etc/rspamd/local.d/actions.conf
* Damit Spam korrekt einsortiert werden kann, muss der Junk-Ordner existieren oder automatisch erstellt werden.
+
<pre>
* Die special_use-Markierung sorgt dafür, dass Mailclients den Ordner korrekt als Spam-Ordner erkennen.
+
reject = 5;
Datei: /etc/dovecot/conf.d/15-mailboxes.conf
+
add_header = 3;
<pre>
+
greylist = 4;
namespace inbox {
+
</pre>
  mailbox Junk {
+
EOF
    auto = create
 
    special_use = \Junk
 
  }
 
}
 
</pre>
 
  
== Schritt: Globale Sieve-Regel ==
+
== Schritt 7: Webinterface ==
* Es wird eine globale Filterregel definiert, die für alle Benutzer gilt und sofort aktiv ist.
+
* Das Webinterface ermöglicht die Analyse der Mailbewertung.
* Die Regel prüft auf Spam-Header und verschiebt entsprechende Mails automatisch in den Junk-Ordner.
+
* Ein festes Passwort erlaubt den Zugriff.
  mkdir -p /var/lib/dovecot/sieve/
 
  
Datei: /var/lib/dovecot/sieve/default.sieve
+
cat <<'EOF' > /etc/rspamd/local.d/worker-controller.inc
<pre>
+
<pre>
require ["fileinto"];
+
password = "$2$kKqzF3cH9x7L9u1w0ZJ8R.Hp9m2l8pG6yVv8eR6m3yY1p2Q3w4e5G";
 +
enable_password = "$2$kKqzF3cH9x7L9u1w0ZJ8R.Hp9m2l8pG6yVv8eR6m3yY1p2Q3w4e5G";
 +
bind_socket = "0.0.0.0:11334";
 +
</pre>
 +
EOF
  
if header :contains "X-Spam" "Yes" {
+
== Schritt 8: Postfix anbinden ==
  fileinto "Junk";
+
* Postfix wird so konfiguriert, dass jede Mail durch Rspamd geprüft wird.
  stop;
+
* Dies erfolgt über das Milter-Interface.
}
 
</pre>
 
  
Datei: /etc/dovecot/conf.d/90-sieve.conf
+
postconf -e "milter_protocol = 6"
<pre>
+
postconf -e "milter_default_action = accept"
plugin {
+
postconf -e "smtpd_milters = inet:127.0.0.1:11332"
  sieve_before = /var/lib/dovecot/sieve/default.sieve
+
postconf -e "non_smtpd_milters = inet:127.0.0.1:11332"
}
 
</pre>
 
  
== Schritt: Kompilieren und Rechte ==
+
== Schritt 9: Dienste starten ==
* Die Sieve-Regel wird in ein binäres Format kompiliert, damit sie effizient verarbeitet werden kann.
+
* Die Dienste werden gestartet oder neu geladen.
* Anschließend werden die Berechtigungen gesetzt, damit Dovecot Zugriff auf die Dateien hat.
+
* Fallbacks sorgen dafür, dass das Script auch ohne systemd funktioniert.
  sievec /var/lib/dovecot/sieve/default.sieve
 
  chown -R dovecot:dovecot /var/lib/dovecot/sieve/
 
  
== Schritt: Dienste starten ==
+
systemctl restart clamav-daemon 2>/dev/null || clamd &
* Alle beteiligten Dienste werden neu gestartet, damit die Konfiguration aktiv wird.
+
systemctl restart rspamd 2>/dev/null || rspamd -d
* Die Reihenfolge stellt sicher, dass Abhängigkeiten korrekt initialisiert sind.
+
systemctl restart postfix 2>/dev/null || service postfix restart
  systemctl restart redis-server rspamd dovecot postfix
 
  
== Demonstration ==
+
== Ergebnis ==
* Zunächst wird eine normale Mail gesendet, um den unveränderten Mailfluss zu zeigen.
+
* Rspamd filtert Spam und bewertet Mails anhand verschiedener Kriterien.
* Anschließend wird eine Test-Spam-Mail verwendet, um die Filterung sichtbar zu machen.
+
* ClamAV blockiert schädliche Anhänge zuverlässig.
* Mail ohne Spam senden → landet in INBOX
 
* Mail mit GTUBE senden
 
  
GTUBE-String:
+
== Webinterface ==
<pre>
+
* Zugriff über den Browser zur Analyse der Mails.
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
 
</pre>
 
  
== Analyse ==
+
http://SERVER-IP:11334
* 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:
+
* Passwort: xinux123
* 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
+
= Rspamd / ClamAV Tests =
* Automatische Einsortierung durch Sieve
+
 
* Keine Benutzerinteraktion notwendig
+
== Ziel ==
* Live-Auswertung im Web-UI (Port 11334)
+
* Überprüfung der Mail-Filterung
 +
* Nachweis von Spam-Erkennung (GTUBE)
 +
* Nachweis von Virus-Erkennung (ClamAV / EICAR)
 +
* Sichtbarkeit von SPF-Bewertung
 +
 
 +
== Vorbereitung ==
 +
* Zielbenutzer: thomas@it213.int
 +
* Mailserver lokal erreichbar (127.0.0.1)
 +
* swaks installiert
 +
 
 +
== Test 1: Spam (GTUBE) ==
 +
* Der GTUBE-String ist ein standardisierter Test für Spamfilter und wird immer erkannt.
 +
* Die Mail muss durch Rspamd blockiert oder als Spam markiert werden.
 +
 
 +
swaks --to thomas@it213.int --server 127.0.0.1 \
 +
--data "Subject: spam test
 +
 
 +
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"
 +
 
 +
* Erwartung: Rspamd erkennt Spam und lehnt die Mail ab (milter-reject) oder setzt Spam-Header.
 +
 
 +
== Test 2: Virus (EICAR) ==
 +
* Die EICAR-Testsignatur simuliert einen Virus und wird von ClamAV erkannt.
 +
* Die Mail darf nicht zugestellt werden.
 +
 
 +
swaks --to thomas@it213.int --server 127.0.0.1 \
 +
--attach <(echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*')
 +
 
 +
* Erwartung: ClamAV erkennt die Signatur und die Mail wird rejected.
 +
 
 +
== Test 3: SPF ==
 +
* Es wird eine Mail mit gefälschtem Absender erzeugt.
 +
* SPF wird durch Rspamd bewertet und beeinflusst den Score.
 +
 
 +
swaks --to thomas@it213.int --server 127.0.0.1 \
 +
--from fake@gmail.com
 +
 
 +
* Erwartung: SPF_FAIL erscheint in den Logs oder im Rspamd Webinterface und erhöht den Spam-Score.
 +
 
 +
== Live-Beobachtung ==
 +
* Die Verarbeitung der Mails kann live verfolgt werden.
 +
 
 +
journalctl -f
 +
 
 +
* Erwartung:
 +
* Spam: "Gtube pattern" oder "milter-reject"
 +
* Virus: "CLAM_VIRUS"
 +
* SPF: "SPF_FAIL"

Version vom 20. März 2026, 13:08 Uhr

Rspamd + ClamAV Integration (Postfix)

Ziel

  • Integration eines Spam- und Virenfilters in eine bestehende Mailserver-Umgebung.
  • Am Ende können Spam (GTUBE), Viren (EICAR) und SPF-Bewertungen demonstriert werden.

Schritt 1: Aufräumen (Tabula Rasa)

  • Alte Rspamd- und ClamAV-Komponenten werden entfernt, um Konflikte zu vermeiden.
  • Dadurch wird sichergestellt, dass keine alten Konfigurationen das Verhalten beeinflussen.
systemctl stop rspamd clamav-daemon 2>/dev/null || true
service rspamd stop 2>/dev/null || true
service clamav-daemon stop 2>/dev/null || true
apt -y purge rspamd clamav clamav-daemon || true
apt -y autoremove
apt -y autoclean
rm -rf /etc/rspamd
rm -rf /var/lib/rspamd
rm -rf /var/log/rspamd

Schritt 2: Installation

  • Die benötigten Pakete für Spam- und Virenfilter werden installiert.
  • Rspamd übernimmt die Analyse, ClamAV die Virenerkennung.
apt update
apt -y install rspamd clamav clamav-daemon

Schritt 3: Virensignaturen aktualisieren

  • ClamAV benötigt aktuelle Signaturen, um zuverlässig Viren zu erkennen.
  • Der Befehl lädt die neuesten Definitionen herunter.
freshclam || true

Schritt 4: Grundkonfiguration

  • Das Verzeichnis für lokale Rspamd-Konfigurationen wird angelegt.
  • Hier werden alle eigenen Anpassungen gespeichert.
mkdir -p /etc/rspamd/local.d

Schritt 5: ClamAV Integration

  • Rspamd wird so konfiguriert, dass eingehende Mails an ClamAV übergeben werden.
  • Wird ein Virus erkannt, wird die Mail sofort abgelehnt.
cat <<EOF > /etc/rspamd/local.d/antivirus.conf
 clamav {
   action = "reject";
   symbol = "CLAM_VIRUS";
   type = "clamav";
   servers = "127.0.0.1:3310";
 }
 
EOF

Schritt 6: Aktionen

  • Die Schwellwerte bestimmen, ab wann eine Mail abgelehnt oder markiert wird.
  • Für Schulungen sind die Werte bewusst niedrig gewählt.
cat <<EOF > /etc/rspamd/local.d/actions.conf
 reject = 5;
 add_header = 3;
 greylist = 4;
 
EOF

Schritt 7: Webinterface

  • Das Webinterface ermöglicht die Analyse der Mailbewertung.
  • Ein festes Passwort erlaubt den Zugriff.
cat <<'EOF' > /etc/rspamd/local.d/worker-controller.inc
 password = "$2$kKqzF3cH9x7L9u1w0ZJ8R.Hp9m2l8pG6yVv8eR6m3yY1p2Q3w4e5G";
 enable_password = "$2$kKqzF3cH9x7L9u1w0ZJ8R.Hp9m2l8pG6yVv8eR6m3yY1p2Q3w4e5G";
 bind_socket = "0.0.0.0:11334";
 
EOF

Schritt 8: Postfix anbinden

  • Postfix wird so konfiguriert, dass jede Mail durch Rspamd geprüft wird.
  • Dies erfolgt über das Milter-Interface.
postconf -e "milter_protocol = 6"
postconf -e "milter_default_action = accept"
postconf -e "smtpd_milters = inet:127.0.0.1:11332"
postconf -e "non_smtpd_milters = inet:127.0.0.1:11332"

Schritt 9: Dienste starten

  • Die Dienste werden gestartet oder neu geladen.
  • Fallbacks sorgen dafür, dass das Script auch ohne systemd funktioniert.
systemctl restart clamav-daemon 2>/dev/null || clamd &
systemctl restart rspamd 2>/dev/null || rspamd -d
systemctl restart postfix 2>/dev/null || service postfix restart

Ergebnis

  • Rspamd filtert Spam und bewertet Mails anhand verschiedener Kriterien.
  • ClamAV blockiert schädliche Anhänge zuverlässig.

Webinterface

  • Zugriff über den Browser zur Analyse der Mails.
http://SERVER-IP:11334
  • Passwort: xinux123


Rspamd / ClamAV Tests

Ziel

  • Überprüfung der Mail-Filterung
  • Nachweis von Spam-Erkennung (GTUBE)
  • Nachweis von Virus-Erkennung (ClamAV / EICAR)
  • Sichtbarkeit von SPF-Bewertung

Vorbereitung

  • Zielbenutzer: thomas@it213.int
  • Mailserver lokal erreichbar (127.0.0.1)
  • swaks installiert

Test 1: Spam (GTUBE)

  • Der GTUBE-String ist ein standardisierter Test für Spamfilter und wird immer erkannt.
  • Die Mail muss durch Rspamd blockiert oder als Spam markiert werden.

swaks --to thomas@it213.int --server 127.0.0.1 \ --data "Subject: spam test

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

  • Erwartung: Rspamd erkennt Spam und lehnt die Mail ab (milter-reject) oder setzt Spam-Header.

Test 2: Virus (EICAR)

  • Die EICAR-Testsignatur simuliert einen Virus und wird von ClamAV erkannt.
  • Die Mail darf nicht zugestellt werden.

swaks --to thomas@it213.int --server 127.0.0.1 \ --attach <(echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*')

  • Erwartung: ClamAV erkennt die Signatur und die Mail wird rejected.

Test 3: SPF

  • Es wird eine Mail mit gefälschtem Absender erzeugt.
  • SPF wird durch Rspamd bewertet und beeinflusst den Score.

swaks --to thomas@it213.int --server 127.0.0.1 \ --from fake@gmail.com

  • Erwartung: SPF_FAIL erscheint in den Logs oder im Rspamd Webinterface und erhöht den Spam-Score.

Live-Beobachtung

  • Die Verarbeitung der Mails kann live verfolgt werden.

journalctl -f

  • Erwartung:
  • Spam: "Gtube pattern" oder "milter-reject"
  • Virus: "CLAM_VIRUS"
  • SPF: "SPF_FAIL"