Rspamd Neu: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(2 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
  
=== Rspamd: Modul-Konfiguration ===
+
=== Vorbereitung des Rspamd Web-Interface ===
  
Die Steuerung erfolgt über Dateien im Verzeichnis /etc/rspamd/local.d/.
+
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
 +
<pre>
 +
bind_socket = "0.0.0.0:11334"; # Zugriff aus dem Netzwerk erlauben
 +
password = "DEIN_ERZEUGTER_HASH";
 +
enable_password = "DEIN_ERZEUGTER_HASH";
 +
</pre>
 +
 
 +
=== 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 ====
+
=== Milter-Anbindung in Postfix ===
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 ===
+
Der Benutzer 'postfix' benötigt Zugriff auf die Rspamd-Schnittstelle:
  
Damit Postfix jede Mail an Rspamd zur Prüfung übergibt, wird die Milter-Schnittstelle konfiguriert.
+
* usermod -aG rspamd postfix
  
==== Berechtigungen ====
+
Die Integration erfolgt in der Hauptkonfiguration:
Der User postfix muss in die Gruppe rspamd aufgenommen werden, um auf den Socket zugreifen zu können:
 
* usermod -aG rspamd postfix
 
  
==== Postfix 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) ===
+
Aktivierung des Sieve-Plugins für die Zustellung:
  
Hier wird festgelegt, dass Mails mit Spam-Markierung automatisch in den Junk-Ordner verschoben werden.
 
 
==== 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>
  
# --- Parameter-Handling ---
 
 
while getopts "p:" opt; do
 
while getopts "p:" opt; do
 
   case $opt in
 
   case $opt in
Zeile 125: Zeile 108:
 
fi
 
fi
  
# --- 1. Installation ---
+
# 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 erzwingen ---
+
# Hash generieren
 
RSPAMD_HASH=$(rspamadm pw -p "$USER_PASS")
 
RSPAMD_HASH=$(rspamadm pw -p "$USER_PASS")
 +
mkdir -p /etc/rspamd/local.d/
  
# Alte Controller-Konfigurationen aufräumen, um Overrides zu verhindern
+
# Netzwerk-Bindung priorisieren (options.inc erzwingt 0.0.0.0)
rm -f /etc/rspamd/local.d/worker-controller.inc
+
echo 'bind_socket = "0.0.0.0:11334";' > /etc/rspamd/local.d/options.inc
  
# Web-Interface (Controller) global auf 0.0.0.0 setzen
 
 
cat <<EOF > /etc/rspamd/local.d/worker-controller.inc
 
cat <<EOF > /etc/rspamd/local.d/worker-controller.inc
 
bind_socket = "0.0.0.0:11334";
 
bind_socket = "0.0.0.0:11334";
Zeile 142: Zeile 124:
 
EOF
 
EOF
  
# Globaler Bind-Override in den Optionen (Zweite Absicherung)
 
echo 'bind_socket = "0.0.0.0";' > /etc/rspamd/local.d/options.inc
 
 
# Virenscanner (ClamAV)
 
 
cat <<EOF > /etc/rspamd/local.d/antivirus.conf
 
cat <<EOF > /etc/rspamd/local.d/antivirus.conf
 
clamav {
 
clamav {
Zeile 155: Zeile 133:
 
EOF
 
EOF
  
# --- 3. Postfix Integration ---
+
# Postfix Milter
 
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"
Zeile 162: Zeile 140:
 
postconf -e "milter_protocol = 6"
 
postconf -e "milter_protocol = 6"
  
# --- 4. Dovecot Sieve ---
+
# Dovecot Sieve
# Sieve Plugin aktivieren
 
 
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/
 
mkdir -p /var/lib/dovecot/sieve/
cat <<EOF > /var/lib/dovecot/sieve/default.sieve
+
echo 'require ["fileinto"]; if header :contains "X-Spam" "Yes" { fileinto "Junk"; stop; }' > /var/lib/dovecot/sieve/default.sieve
require ["fileinto"];
 
if header :contains "X-Spam" "Yes" {
 
  fileinto "Junk";
 
  stop;
 
}
 
EOF
 
 
 
 
sievec /var/lib/dovecot/sieve/default.sieve
 
sievec /var/lib/dovecot/sieve/default.sieve
# Rechte setzen (versuche vmail, sonst dovecot)
 
 
chown -R vmail:vmail /var/lib/dovecot/sieve/ 2>/dev/null || chown -R dovecot:dovecot /var/lib/dovecot/sieve/
 
chown -R vmail:vmail /var/lib/dovecot/sieve/ 2>/dev/null || chown -R dovecot:dovecot /var/lib/dovecot/sieve/
  
# --- 5. Neustart ---
+
# Dienste neu starten
systemctl restart clamav-daemon
+
systemctl restart clamav-daemon rspamd postfix dovecot
systemctl restart rspamd
 
systemctl restart postfix
 
systemctl restart dovecot
 
  
# --- 6. Finaler Check ---
+
echo "Setup abgeschlossen. Web-UI: http://$(hostname -I | awk '{print $1}'):11334"
echo "-------------------------------------------------------"
 
echo "Netzwerk-Check (Port 11334):"
 
ss -tulpn | grep 11334
 
echo "-------------------------------------------------------"
 
echo "Setup abgeschlossen."
 
echo "URL: http://$(hostname -I | awk '{print $1}'):11334"
 
 
</pre>
 
</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):
 +
 +
* 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 ===
 +
 +
# Aufruf von http://<Server-IP>:11334 im Browser.
 +
# Anmeldung mit dem vergebenen Passwort.
 +
# 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.

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.