Rspamd Neu: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „== Installation und Konfiguration von Rspamd mit Postfix und Dovecot == Dieses Tutorial beschreibt die Integration von Rspamd als Milter in Postfix, die Anbin…“
 
Keine Bearbeitungszusammenfassung
 
(7 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
== Installation und Konfiguration von Rspamd mit Postfix und Dovecot ==
== Architektur und E-Mail-Datenfluss ==


Dieses Tutorial beschreibt die Integration von Rspamd als Milter in Postfix, die Anbindung an ClamAV zur Virenerkennung sowie die automatische Spam-Sortierung in Dovecot mittels Sieve.
Der E-Mail-Eingang folgt einer festen Kette technischer Instanzen:


=== Voraussetzungen ===
* 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.


* Installiertes Postfix und Dovecot (LMTP-Setup)
* Installiertes ClamAV (clamav-daemon)
* Betriebssystem: Debian / Ubuntu (Pfade können bei RHEL/CentOS variieren)


=== 1. Rspamd Grundlagen-Konfiguration ===


Konfigurationsverzeichnis:
== Manuelle Paketeinrichtung und Grundkonfiguration ==
* /etc/rspamd/local.d/


==== Virenscanner (ClamAV) einbinden ====
=== 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
<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
Zeile 20: Zeile 40:
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 28: Zeile 46:
</pre>
</pre>


==== Bayes-Filter (Spam-Lernen) aktivieren ====
== 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 (Controller) konfigurieren ====
=== Milter-Anbindung in Postfix ===


Datei: /etc/rspamd/local.d/worker-controller.inc
Der Benutzer 'postfix' benötigt Zugriff auf die Rspamd-Schnittstelle:
<pre>
bind_socket = "127.0.0.1:11334";
password = "$2$abcdef..."; # Generiert mit: rspamadm pw
</pre>


=== 2. Postfix Integration ===
Damit Postfix mit Rspamd kommunizieren kann, wird Rspamd als Milter (Mail Filter) eingebunden.
==== Berechtigungen setzen ====
Der Postfix-Benutzer muss Zugriff auf den Rspamd-Socket haben.
* 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>
# Rspamd Milter Konfiguration
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 neu starten:
=== Automatische Postfach-Sortierung via Dovecot Sieve ===
* systemctl restart rspamd
* systemctl restart postfix
 
=== 3. Dovecot Integration (Spam-Sortierung) ===
 
Damit Mails mit dem Header "X-Spam: Yes" automatisch im Ordner "Junk" landen, wird das Sieve-Plugin genutzt.


==== Dovecot LMTP mit Sieve erweitern ====
Aktivierung des Sieve-Plugins für die Zustellung:


Datei: /etc/dovecot/conf.d/20-lmtp.conf
Datei: /etc/dovecot/conf.d/20-lmtp.conf
Zeile 87: Zeile 75:
</pre>
</pre>


==== Globale Sieve-Regel erstellen ====
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 99: Zeile 86:
</pre>
</pre>


Sieve-Regel kompilieren:
* sievec /var/lib/dovecot/sieve/default.sieve
* sievec /var/lib/dovecot/sieve/default.sieve


Dienst neu starten:
== Automatisierung mittels Setup-Skript ==
* systemctl restart dovecot
 
Das folgende Skript (setup_mail.sh) führt die oben genannten Schritte konsistent aus. Es nutzt getopt für die Passwortübergabe.
 
<pre>
#!/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"


=== 4. Testen und Validierung ===
# 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/


==== Test mit EICAR (Virus) ====
# Dienste neu starten
systemctl restart clamav-daemon rspamd postfix dovecot


Simulation einer infizierten Mail (Inhalt ist ein Test-String):
echo "Setup abgeschlossen. Web-UI: http://$(hostname -I | awk '{print $1}'):11334"
* echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | mail -s "Virus Test" user@example.com
</pre>


==== Logs prüfen ====
== Ergebnisanalyse und Funktionstest ==


In Echtzeit mitverfolgen, wie Rspamd die Mail bewertet:
=== Überprüfung der Filterentscheidungen ===
* tail -f /var/log/rspamd/rspamd.log
* journalctl -u postfix -f


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


Falls eine Spam-Mail durchschlüpft, kann der Filter manuell trainiert werden:
* journalctl -u rspamd -f | grep -E "symbol|action"
* rspamc learn_spam < /pfad/zu/spam.eml
 
* rspamc learn_ham < /pfad/zu/gute-mail.eml
=== 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 ==
== Fazit ==
Durch die Kombination von Postfix (MTA), Rspamd (Filter/Milter), ClamAV (Scanner) und Dovecot Sieve (Sortierung) ist das Mail-System vollautomatisiert gegen Spam und Viren geschützt.
 
;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.