Rspamd Neu: Unterschied zwischen den Versionen
(→Script) |
|||
| (4 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt) | |||
| Zeile 1: | Zeile 1: | ||
| − | == | + | == Architektur und E-Mail-Datenfluss == |
| − | + | 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: | ||
| − | |||
* 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: | ||
| − | + | 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> | ||
clamav { | clamav { | ||
scan_mime_parts = true; | scan_mime_parts = true; | ||
| − | |||
| − | |||
symbol = "CLAM_VIRUS"; | symbol = "CLAM_VIRUS"; | ||
type = "clamav"; | type = "clamav"; | ||
| Zeile 26: | 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> | ||
| − | |||
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 | ||
| − | |||
</pre> | </pre> | ||
| − | + | === Automatische Postfach-Sortierung via Dovecot Sieve === | |
| − | |||
| − | |||
| − | |||
| − | === Dovecot | ||
| − | + | 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 80: | Zeile 75: | ||
</pre> | </pre> | ||
| − | + | 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> | ||
| − | |||
* sievec /var/lib/dovecot/sieve/default.sieve | * 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 | |
| − | + | # Aufruf: ./setup_mail.sh -p <Passwort> | |
| − | |||
| − | # | ||
while getopts "p:" opt; do | while getopts "p:" opt; do | ||
case $opt in | case $opt in | ||
p) USER_PASS=$OPTARG ;; | p) USER_PASS=$OPTARG ;; | ||
| − | *) echo " | + | *) echo "Nutzung: $0 -p <passwort>"; exit 1 ;; |
esac | esac | ||
done | done | ||
if [ -z "$USER_PASS" ]; then | if [ -z "$USER_PASS" ]; then | ||
| − | echo "Fehler: | + | echo "Fehler: Passwort mit -p angeben!" |
| − | |||
exit 1 | exit 1 | ||
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 | |
| − | + | 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 { | ||
| Zeile 149: | 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" | ||
postconf -e "non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock" | postconf -e "non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock" | ||
| Zeile 166: | 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:// | + | echo "Setup abgeschlossen. Web-UI: 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
- 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.