Rspamd Neu: Unterschied zwischen den Versionen
| Zeile 1: | Zeile 1: | ||
| − | == | + | == 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 update | ||
* apt install -y rspamd clamav-daemon dovecot-sieve dovecot-managesieved postfix | * apt install -y rspamd clamav-daemon dovecot-sieve dovecot-managesieved postfix | ||
| − | === Rspamd: | + | === 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 | ||
| + | <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 === | ||
| − | |||
Datei: /etc/rspamd/local.d/antivirus.conf | Datei: /etc/rspamd/local.d/antivirus.conf | ||
<pre> | <pre> | ||
| Zeile 19: | Zeile 46: | ||
</pre> | </pre> | ||
| − | ==== | + | == Systemübergreifende Integration == |
| − | + | ||
| − | + | === Milter-Anbindung in Postfix === | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | + | Der Benutzer 'postfix' benötigt Zugriff auf die Rspamd-Schnittstelle: | |
| − | |||
* usermod -aG rspamd postfix | * usermod -aG rspamd postfix | ||
| + | |||
| + | Die Integration erfolgt in der Hauptkonfiguration: | ||
| + | |||
Datei: /etc/postfix/main.cf | Datei: /etc/postfix/main.cf | ||
<pre> | <pre> | ||
| Zeile 36: | Zeile 61: | ||
non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock | non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock | ||
milter_protocol = 6 | milter_protocol = 6 | ||
| + | milter_default_action = accept | ||
</pre> | </pre> | ||
| − | === | + | === Automatische Postfach-Sortierung via Dovecot Sieve === |
| + | |||
| + | Aktivierung des Sieve-Plugins für die Zustellung: | ||
| + | |||
Datei: /etc/dovecot/conf.d/20-lmtp.conf | Datei: /etc/dovecot/conf.d/20-lmtp.conf | ||
<pre> | <pre> | ||
| Zeile 46: | Zeile 75: | ||
</pre> | </pre> | ||
| − | + | Erstellung der globalen Sortierregel: | |
| + | |||
| + | Datei: /var/lib/dovecot/sieve/default.sieve | ||
<pre> | <pre> | ||
| − | + | require ["fileinto"]; | |
| − | + | if header :contains "X-Spam" "Yes" { | |
| − | + | fileinto "Junk"; | |
| − | + | stop; | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
} | } | ||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
</pre> | </pre> | ||
| − | + | * 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. | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
<pre> | <pre> | ||
#!/bin/bash | #!/bin/bash | ||
| + | # Aufruf: ./setup_mail.sh -p <Passwort> | ||
| − | |||
while getopts "p:" opt; do | while getopts "p:" opt; do | ||
case $opt in | case $opt in | ||
| Zeile 127: | Zeile 108: | ||
fi | fi | ||
| − | # | + | # 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 | ||
| − | # | + | # Hash generieren |
RSPAMD_HASH=$(rspamadm pw -p "$USER_PASS") | 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 | cat <<EOF > /etc/rspamd/local.d/worker-controller.inc | ||
bind_socket = "0.0.0.0:11334"; | bind_socket = "0.0.0.0:11334"; | ||
| Zeile 144: | Zeile 124: | ||
EOF | EOF | ||
| − | |||
| − | |||
| − | |||
| − | |||
cat <<EOF > /etc/rspamd/local.d/antivirus.conf | cat <<EOF > /etc/rspamd/local.d/antivirus.conf | ||
clamav { | clamav { | ||
| Zeile 157: | Zeile 133: | ||
EOF | EOF | ||
| − | # | + | # 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 164: | Zeile 140: | ||
postconf -e "milter_protocol = 6" | 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 | 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/ | ||
| − | + | 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" { | ||
| − | |||
| − | |||
| − | } | ||
| − | |||
| − | |||
sievec /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/ | 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 | + | systemctl restart clamav-daemon rspamd postfix dovecot |
| − | |||
| − | |||
| − | |||
| − | + | echo "Setup abgeschlossen. Web-UI: http://$(hostname -I | awk '{print $1}'):11334" | |
| − | |||
| − | |||
| − | |||
| − | |||
| − | echo "Setup abgeschlossen. | ||
| − | |||
</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" | * 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
- 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.