Rspamd Neu: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== Installation von Rspamd, Postfix und Dovecot ==
+
== Architektur und E-Mail-Datenfluss ==
  
Um ein funktionsfähiges Anti-Spam-System aufzubauen, müssen die Pakete für den Filter, den Virenscanner und die Sieve-Erweiterung installiert werden.
+
Der E-Mail-Eingang folgt einer festen Kette technischer Instanzen:
  
=== Paketinstallation ===
+
* Postfix (MTA): Empfängt die Nachricht und reicht sie über die Milter-Schnittstelle an Rspamd weiter.
 +
* Rspamd (Filter): Bewertet die Nachricht anhand von Heuristiken und fragt den Virenscanner ab.
 +
* ClamAV (Scanner): Prüft Anhänge auf Schadcode und meldet das Ergebnis an Rspamd zurück.
 +
* Dovecot (LDA/LMTP): Übernimmt die Nachricht von Postfix. Das Sieve-Modul verschiebt Spam anhand der Rspamd-Header automatisch in den Junk-Ordner.
 +
 
 +
 
 +
 
 +
== Manuelle Paketeinrichtung und Grundkonfiguration ==
 +
 
 +
=== Systemweite Paketinstallation ===
 +
 
 +
Die Installation der benötigten Dienste erfolgt unter Debian oder Ubuntu:
  
Die Installation erfolgt unter Debian/Ubuntu über die Standard-Repositorys:
 
 
* apt update
 
* apt update
* apt install rspamd clamav-daemon dovecot-sieve dovecot-managesieved
+
* apt install -y rspamd clamav-daemon dovecot-sieve dovecot-managesieved postfix
 +
 
 +
=== Vorbereitung des Rspamd Web-Interface ===
 +
 
 +
Da Rspamd Passwörter verschlüsselt speichert, muss vor der Konfiguration ein Hash erzeugt werden:
 +
 
 +
* rspamadm pw -p DEIN_WUNSCH_PASSWORT
 +
 
 +
Der resultierende Hash (beginnend mit $2$) wird in die Controller-Konfiguration übertragen:
  
=== Rspamd: Modul-Konfiguration ===
+
Datei: /etc/rspamd/local.d/worker-controller.inc
 +
<pre>
 +
bind_socket = "0.0.0.0:11334"; # Zugriff aus dem Netzwerk erlauben
 +
password = "DEIN_ERZEUGTER_HASH";
 +
enable_password = "DEIN_ERZEUGTER_HASH";
 +
</pre>
  
Die Steuerung erfolgt über Dateien im Verzeichnis /etc/rspamd/local.d/.
+
=== Virenscanner-Anbindung ===
  
==== Virenscanner-Anbindung (ClamAV) ====
 
 
Datei: /etc/rspamd/local.d/antivirus.conf
 
Datei: /etc/rspamd/local.d/antivirus.conf
 
<pre>
 
<pre>
 
clamav {
 
clamav {
 
   scan_mime_parts = true;
 
   scan_mime_parts = true;
  scan_text_mime = true;
 
  scan_image_mime = true;
 
 
   symbol = "CLAM_VIRUS";
 
   symbol = "CLAM_VIRUS";
 
   type = "clamav";
 
   type = "clamav";
Zeile 26: Zeile 46:
 
</pre>
 
</pre>
  
==== Statistischer Filter (Bayes) ====
+
== Systemübergreifende Integration ==
Datei: /etc/rspamd/local.d/classifier-bayes.conf
 
<pre>
 
enabled = true;
 
autolearn = true;
 
backend = "sqlite3";
 
</pre>
 
 
 
Datei: /etc/rspamd/local.d/statistic.conf
 
<pre>
 
backend = "sqlite3";
 
</pre>
 
 
 
==== Web-Interface Zugriff ====
 
Datei: /etc/rspamd/local.d/worker-controller.inc
 
<pre>
 
bind_socket = "127.0.0.1:11334";
 
password = "$2$abcdef..."; # Erstellt via: rspamadm pw
 
</pre>
 
  
=== Postfix: Milter-Integration ===
+
=== Milter-Anbindung in Postfix ===
  
Damit Postfix jede Mail an Rspamd zur Prüfung übergibt, wird die Milter-Schnittstelle konfiguriert.
+
Der Benutzer 'postfix' benötigt Zugriff auf die Rspamd-Schnittstelle:
  
==== Berechtigungen ====
 
Der User postfix muss in die Gruppe rspamd aufgenommen werden, um auf den Socket zugreifen zu können:
 
 
* usermod -aG rspamd postfix
 
* usermod -aG rspamd postfix
  
==== Postfix Hauptkonfiguration ====
+
Die Integration erfolgt in der Hauptkonfiguration:
 +
 
 
Datei: /etc/postfix/main.cf
 
Datei: /etc/postfix/main.cf
 
<pre>
 
<pre>
# Milter-Einstellungen für Rspamd
 
 
smtpd_milters = unix:/var/lib/rspamd/rspamd.sock
 
smtpd_milters = unix:/var/lib/rspamd/rspamd.sock
 
non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock
 
non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock
 +
milter_protocol = 6
 
milter_default_action = accept
 
milter_default_action = accept
milter_protocol = 6
 
 
</pre>
 
</pre>
  
Dienste aktualisieren:
+
=== Automatische Postfach-Sortierung via Dovecot Sieve ===
* systemctl restart rspamd
 
* systemctl restart postfix
 
 
 
=== Dovecot: Sieve-Sortierung (Spam-to-Junk) ===
 
  
Hier wird festgelegt, dass Mails mit Spam-Markierung automatisch in den Junk-Ordner verschoben werden.
+
Aktivierung des Sieve-Plugins für die Zustellung:
  
==== LMTP-Plugin Aktivierung ====
 
 
Datei: /etc/dovecot/conf.d/20-lmtp.conf
 
Datei: /etc/dovecot/conf.d/20-lmtp.conf
 
<pre>
 
<pre>
Zeile 80: Zeile 75:
 
</pre>
 
</pre>
  
==== Sieve-Regel (Global) ====
+
Erstellung der globalen Sortierregel:
 +
 
 
Datei: /var/lib/dovecot/sieve/default.sieve
 
Datei: /var/lib/dovecot/sieve/default.sieve
 
<pre>
 
<pre>
 
require ["fileinto"];
 
require ["fileinto"];
 
 
if header :contains "X-Spam" "Yes" {
 
if header :contains "X-Spam" "Yes" {
 
   fileinto "Junk";
 
   fileinto "Junk";
Zeile 91: Zeile 86:
 
</pre>
 
</pre>
  
Regel aktivieren und Dovecot neu starten:
 
 
* sievec /var/lib/dovecot/sieve/default.sieve
 
* sievec /var/lib/dovecot/sieve/default.sieve
* systemctl restart dovecot
 
 
=== Validierung und Tests ===
 
 
==== EICAR-Virus Test ====
 
Sendet eine Test-Mail mit dem Standard-Virenstring:
 
* echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | mail -s "Virus-Test" user@example.com
 
  
==== Log-Überwachung ====
+
== Automatisierung mittels Setup-Skript ==
Prüfung der Rspamd-Entscheidungen (Score, Symbole, Action):
 
* tail -f /var/log/rspamd/rspamd.log
 
  
== Fazit ==
+
Das folgende Skript (setup_mail.sh) führt die oben genannten Schritte konsistent aus. Es nutzt getopt für die Passwortübergabe.
Durch die Installation der Pakete und die anschließende Verknüpfung über Milter (Postfix) und Sieve (Dovecot) ist das System in der Lage, Mails automatisiert zu filtern und zu sortieren.
 
  
== Script ==
 
 
<pre>
 
<pre>
 
#!/bin/bash
 
#!/bin/bash
 +
# Aufruf: ./setup_mail.sh -p <Passwort>
 +
 +
while getopts "p:" opt; do
 +
  case $opt in
 +
    p) USER_PASS=$OPTARG ;;
 +
    *) echo "Nutzung: $0 -p <passwort>"; exit 1 ;;
 +
  esac
 +
done
  
# Rspamd, Postfix, Dovecot Setup Skript
+
if [ -z "$USER_PASS" ]; then
# Zur Verwendung in der Schularbeit (Debian/Ubuntu)
+
    echo "Fehler: Passwort mit -p angeben!"
 +
    exit 1
 +
fi
  
# 1. Installation der Pakete
+
# Pakete installieren
apt update
+
apt update && apt install -y rspamd clamav-daemon dovecot-sieve dovecot-managesieved postfix
apt install -y rspamd clamav-daemon dovecot-sieve dovecot-managesieved postfix
 
  
# 2. Rspamd Konfiguration (local.d)
+
# Hash generieren
 +
RSPAMD_HASH=$(rspamadm pw -p "$USER_PASS")
 
mkdir -p /etc/rspamd/local.d/
 
mkdir -p /etc/rspamd/local.d/
  
# Virenscanner (ClamAV)
+
# Netzwerk-Bindung priorisieren (options.inc erzwingt 0.0.0.0)
 +
echo 'bind_socket = "0.0.0.0:11334";' > /etc/rspamd/local.d/options.inc
 +
 
 +
cat <<EOF > /etc/rspamd/local.d/worker-controller.inc
 +
bind_socket = "0.0.0.0:11334";
 +
password = "$RSPAMD_HASH";
 +
enable_password = "$RSPAMD_HASH";
 +
EOF
 +
 
 
cat <<EOF > /etc/rspamd/local.d/antivirus.conf
 
cat <<EOF > /etc/rspamd/local.d/antivirus.conf
 
clamav {
 
clamav {
 
   scan_mime_parts = true;
 
   scan_mime_parts = true;
  scan_text_mime = true;
 
  scan_image_mime = true;
 
 
   symbol = "CLAM_VIRUS";
 
   symbol = "CLAM_VIRUS";
 
   type = "clamav";
 
   type = "clamav";
Zeile 134: Zeile 133:
 
EOF
 
EOF
  
# Bayes Filter
+
# Postfix Milter
cat <<EOF > /etc/rspamd/local.d/classifier-bayes.conf
 
enabled = true;
 
autolearn = true;
 
backend = "sqlite3";
 
EOF
 
 
 
cat <<EOF > /etc/rspamd/local.d/statistic.conf
 
backend = "sqlite3";
 
EOF
 
 
 
# Web-Interface (Passwort ist standardmäßig 'qwertz' - bitte ändern!)
 
cat <<EOF > /etc/rspamd/local.d/worker-controller.inc
 
bind_socket = "127.0.0.1:11334";
 
password = "\$2\$6ms8p6u96u6m6j9z9z9z9z9z9z9z9z9z";
 
EOF
 
 
 
# 3. Postfix Integration
 
 
usermod -aG rspamd postfix
 
usermod -aG rspamd postfix
 
 
postconf -e "smtpd_milters = unix:/var/lib/rspamd/rspamd.sock"
 
postconf -e "smtpd_milters = unix:/var/lib/rspamd/rspamd.sock"
 
postconf -e "non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock"
 
postconf -e "non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock"
Zeile 159: Zeile 140:
 
postconf -e "milter_protocol = 6"
 
postconf -e "milter_protocol = 6"
  
# 4. Dovecot Sieve Konfiguration
+
# Dovecot Sieve
# LMTP Plugin aktivieren (einfaches Append, falls Datei existiert)
 
 
sed -i 's/mail_plugins = \$mail_plugins/mail_plugins = \$mail_plugins sieve/g' /etc/dovecot/conf.d/20-lmtp.conf
 
sed -i 's/mail_plugins = \$mail_plugins/mail_plugins = \$mail_plugins sieve/g' /etc/dovecot/conf.d/20-lmtp.conf
 +
mkdir -p /var/lib/dovecot/sieve/
 +
echo 'require ["fileinto"]; if header :contains "X-Spam" "Yes" { fileinto "Junk"; stop; }' > /var/lib/dovecot/sieve/default.sieve
 +
sievec /var/lib/dovecot/sieve/default.sieve
 +
chown -R vmail:vmail /var/lib/dovecot/sieve/ 2>/dev/null || chown -R dovecot:dovecot /var/lib/dovecot/sieve/
 +
 +
# Dienste neu starten
 +
systemctl restart clamav-daemon rspamd postfix dovecot
 +
 +
echo "Setup abgeschlossen. Web-UI: http://$(hostname -I | awk '{print $1}'):11334"
 +
</pre>
 +
 +
== Ergebnisanalyse und Funktionstest ==
 +
 +
=== Überprüfung der Filterentscheidungen ===
 +
 +
Die Analyse erfolgt live über das Systemd-Journal. Dies zeigt Scores und aktive Symbole:
 +
 +
* journalctl -u rspamd -f | grep -E "symbol|action"
 +
 +
=== Validierung mittels GTUBE-Testmail ===
 +
 +
Senden des standardisierten Spam-Test-Strings zur Prüfung der Sieve-Regel (Verschiebung nach Junk):
  
# Globales Sieve Verzeichnis erstellen
+
* echo "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-SPAM-TEST-EMAIL*C.34X" | mail -s "Spam-Test" nutzer@beispiel.de
mkdir -p /var/lib/dovecot/sieve/
 
  
cat <<EOF > /var/lib/dovecot/sieve/default.sieve
+
=== Diagnose über das Web-Interface ===
require ["fileinto"];
 
if header :contains "X-Spam" "Yes" {
 
  fileinto "Junk";
 
  stop;
 
}
 
EOF
 
  
# Sieve kompilieren und Rechte setzen
+
# Aufruf von http://<Server-IP>:11334 im Browser.
sievec /var/lib/dovecot/sieve/default.sieve
+
# Anmeldung mit dem vergebenen Passwort.
chown -R vmail:vmail /var/lib/dovecot/sieve/
+
# Einsicht in die Historie (History), um Scores und aktive Symbole (z.B. GTUBE, BAYES_SPAM) zu evaluieren.
  
# 5. Dienste Neustart
+
== Fazit ==
systemctl restart clamav-daemon
 
systemctl restart rspamd
 
systemctl restart postfix
 
systemctl restart dovecot
 
  
echo "Setup abgeschlossen. Rspamd Web-UI erreichbar unter http://localhost:11334"
+
;Transparenz: Rspamd ermöglicht durch das Scoring-System eine präzise Nachvollziehbarkeit von Filterentscheidungen.
</pre>
+
;Effizienz: Die Integration als Milter verhindert die Annahme unerwünschter Nachrichten bereits während des SMTP-Dialogs.
 +
;Benutzerkomfort: Durch die Kopplung mit Sieve wird die Postfachpflege für den Endanwender automatisiert.

Aktuelle Version vom 18. März 2026, 18:11 Uhr

Architektur und E-Mail-Datenfluss

Der E-Mail-Eingang folgt einer festen Kette technischer Instanzen:

  • Postfix (MTA): Empfängt die Nachricht und reicht sie über die Milter-Schnittstelle an Rspamd weiter.
  • Rspamd (Filter): Bewertet die Nachricht anhand von Heuristiken und fragt den Virenscanner ab.
  • ClamAV (Scanner): Prüft Anhänge auf Schadcode und meldet das Ergebnis an Rspamd zurück.
  • Dovecot (LDA/LMTP): Übernimmt die Nachricht von Postfix. Das Sieve-Modul verschiebt Spam anhand der Rspamd-Header automatisch in den Junk-Ordner.


Manuelle Paketeinrichtung und Grundkonfiguration

Systemweite Paketinstallation

Die Installation der benötigten Dienste erfolgt unter Debian oder Ubuntu:

  • apt update
  • apt install -y rspamd clamav-daemon dovecot-sieve dovecot-managesieved postfix

Vorbereitung des Rspamd Web-Interface

Da Rspamd Passwörter verschlüsselt speichert, muss vor der Konfiguration ein Hash erzeugt werden:

  • rspamadm pw -p DEIN_WUNSCH_PASSWORT

Der resultierende Hash (beginnend mit $2$) wird in die Controller-Konfiguration übertragen:

Datei: /etc/rspamd/local.d/worker-controller.inc

bind_socket = "0.0.0.0:11334"; # Zugriff aus dem Netzwerk erlauben
password = "DEIN_ERZEUGTER_HASH";
enable_password = "DEIN_ERZEUGTER_HASH";

Virenscanner-Anbindung

Datei: /etc/rspamd/local.d/antivirus.conf

clamav {
  scan_mime_parts = true;
  symbol = "CLAM_VIRUS";
  type = "clamav";
  servers = "/run/clamav/clamd.ctl";
}

Systemübergreifende Integration

Milter-Anbindung in Postfix

Der Benutzer 'postfix' benötigt Zugriff auf die Rspamd-Schnittstelle:

  • usermod -aG rspamd postfix

Die Integration erfolgt in der Hauptkonfiguration:

Datei: /etc/postfix/main.cf

smtpd_milters = unix:/var/lib/rspamd/rspamd.sock
non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock
milter_protocol = 6
milter_default_action = accept

Automatische Postfach-Sortierung via Dovecot Sieve

Aktivierung des Sieve-Plugins für die Zustellung:

Datei: /etc/dovecot/conf.d/20-lmtp.conf

protocol lmtp {
  mail_plugins = $mail_plugins sieve
}

Erstellung der globalen Sortierregel:

Datei: /var/lib/dovecot/sieve/default.sieve

require ["fileinto"];
if header :contains "X-Spam" "Yes" {
  fileinto "Junk";
  stop;
}
  • sievec /var/lib/dovecot/sieve/default.sieve

Automatisierung mittels Setup-Skript

Das folgende Skript (setup_mail.sh) führt die oben genannten Schritte konsistent aus. Es nutzt getopt für die Passwortübergabe.

#!/bin/bash
# Aufruf: ./setup_mail.sh -p <Passwort>

while getopts "p:" opt; do
  case $opt in
    p) USER_PASS=$OPTARG ;;
    *) echo "Nutzung: $0 -p <passwort>"; exit 1 ;;
  esac
done

if [ -z "$USER_PASS" ]; then
    echo "Fehler: Passwort mit -p angeben!"
    exit 1
fi

# Pakete installieren
apt update && apt install -y rspamd clamav-daemon dovecot-sieve dovecot-managesieved postfix

# Hash generieren
RSPAMD_HASH=$(rspamadm pw -p "$USER_PASS")
mkdir -p /etc/rspamd/local.d/

# Netzwerk-Bindung priorisieren (options.inc erzwingt 0.0.0.0)
echo 'bind_socket = "0.0.0.0:11334";' > /etc/rspamd/local.d/options.inc

cat <<EOF > /etc/rspamd/local.d/worker-controller.inc
bind_socket = "0.0.0.0:11334";
password = "$RSPAMD_HASH";
enable_password = "$RSPAMD_HASH";
EOF

cat <<EOF > /etc/rspamd/local.d/antivirus.conf
clamav {
  scan_mime_parts = true;
  symbol = "CLAM_VIRUS";
  type = "clamav";
  servers = "/run/clamav/clamd.ctl";
}
EOF

# Postfix Milter
usermod -aG rspamd postfix
postconf -e "smtpd_milters = unix:/var/lib/rspamd/rspamd.sock"
postconf -e "non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock"
postconf -e "milter_default_action = accept"
postconf -e "milter_protocol = 6"

# Dovecot Sieve
sed -i 's/mail_plugins = \$mail_plugins/mail_plugins = \$mail_plugins sieve/g' /etc/dovecot/conf.d/20-lmtp.conf
mkdir -p /var/lib/dovecot/sieve/
echo 'require ["fileinto"]; if header :contains "X-Spam" "Yes" { fileinto "Junk"; stop; }' > /var/lib/dovecot/sieve/default.sieve
sievec /var/lib/dovecot/sieve/default.sieve
chown -R vmail:vmail /var/lib/dovecot/sieve/ 2>/dev/null || chown -R dovecot:dovecot /var/lib/dovecot/sieve/

# Dienste neu starten
systemctl restart clamav-daemon rspamd postfix dovecot

echo "Setup abgeschlossen. Web-UI: http://$(hostname -I | awk '{print $1}'):11334"

Ergebnisanalyse und Funktionstest

Überprüfung der Filterentscheidungen

Die Analyse erfolgt live über das Systemd-Journal. Dies zeigt Scores und aktive Symbole:

  • journalctl -u rspamd -f | grep -E "symbol|action"

Validierung mittels GTUBE-Testmail

Senden des standardisierten Spam-Test-Strings zur Prüfung der Sieve-Regel (Verschiebung nach Junk):

  • echo "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-SPAM-TEST-EMAIL*C.34X" | mail -s "Spam-Test" nutzer@beispiel.de

Diagnose über das Web-Interface

  1. Aufruf von http://<Server-IP>:11334 im Browser.
  2. Anmeldung mit dem vergebenen Passwort.
  3. Einsicht in die Historie (History), um Scores und aktive Symbole (z.B. GTUBE, BAYES_SPAM) zu evaluieren.

Fazit

Transparenz
Rspamd ermöglicht durch das Scoring-System eine präzise Nachvollziehbarkeit von Filterentscheidungen.
Effizienz
Die Integration als Milter verhindert die Annahme unerwünschter Nachrichten bereits während des SMTP-Dialogs.
Benutzerkomfort
Durch die Kopplung mit Sieve wird die Postfachpflege für den Endanwender automatisiert.