Rspamd Neu: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 193: Zeile 193:
 
echo "URL: http://$(hostname -I | awk '{print $1}'):11334"
 
echo "URL: http://$(hostname -I | awk '{print $1}'):11334"
 
</pre>
 
</pre>
 +
 +
== Analyse der Filter-Logik: Warum ist das Spam? ==
 +
 +
Ein modernes Filtersystem wie Rspamd ist keine Blackbox. Der Lerneffekt tritt ein, wenn Schüler verstehen, wie sich ein Score aus vielen kleinen Indizien zusammensetzt.
 +
 +
=== Die Anatomie einer Ablehnung (Reject) ===
 +
 +
Wenn eine Mail abgelehnt wird, reicht es nicht zu wissen, DASS sie weg ist. Wir müssen wissen, WELCHE Regel den Ausschlag gab.
 +
 +
==== Live-Analyse im Terminal ====
 +
 +
Mit dem folgenden Befehl filtern wir nur die Zeile heraus, die das Urteil (Action) und die Gründe (Symbols) enthält:
 +
 +
* journalctl -u rspamd -f | grep -E "symbol|action"
 +
 +
==== Beispiel einer Log-Zeile ====
 +
<pre>
 +
(default: F (reject): [15.50 / 15.00] [GTUBE(0.00), R_SPF_FAIL(1.00), BAYES_SPAM(5.10), ...])
 +
</pre>
 +
 +
=== Der Aha-Effekt: Das Punktesystem (Scoring) ===
 +
 +
In der Schulung muss vermittelt werden, dass Rspamd wie ein Punktrichter arbeitet.
 +
 +
;Threshold (Schwellenwert): In diesem Beispiel liegt er bei 15.00 Punkten.
 +
;Symbole: Jedes Kürzel in den Klammern ist ein Beweismittel.
 +
;Gewichtung: Ein 'R_SPF_FAIL' gibt vielleicht nur 1 Punkt (Verdacht), aber 'BAYES_SPAM' gibt 5 Punkte (starkes Indiz).
 +
 +
==== Übung: Die Detektiv-Arbeit ====
 +
Lasse die Schüler eine Mail manipulieren, um zu sehen, wie sich der Score verändert:
 +
# Sende eine saubere Mail -> Score 0.
 +
# Sende die Mail von einer gefälschten Absender-Adresse -> Score steigt (SPF-Fail).
 +
# Füge "Click here for free money" hinzu -> Score steigt weiter (Bayes/Heuristik).
 +
# '''Ergebnis:''' Die Schüler sehen live, wie die Mail langsam über die 15-Punkte-Grenze "wandert".
 +
 +
=== Visualisierung im Web-Interface ===
 +
 +
Das Web-Interface ist das beste Werkzeug, um die Theorie der Symbole zu festigen.
 +
 +
# Reiter '''History''' aufrufen.
 +
# Auf eine Zeile klicken.
 +
# '''Aha-Moment:''' Jedes Symbol wird im Klartext erklärt (z.B. "SPF: domain has no SPF record").
 +
 +
== Fazit für die Schulungsunterlage ==
 +
;Spam-Schutz ist Wahrscheinlichkeitsrechnung: Es gibt selten den einen Grund, sondern die Summe der Indizien entscheidet.
 +
;Transparenz: Ein guter Administrator schaut nicht nur, ob die Mail ankam, sondern warum sie welchen Score erhalten hat.
 +
;Anpassbarkeit: Über die Datei /etc/rspamd/local.d/scores.conf können wir Symbole, die in unserer Schule zu streng sind, abmildern.

Version vom 18. März 2026, 18:04 Uhr

Installation von Rspamd, Postfix und Dovecot

Um ein funktionsfähiges Anti-Spam-System aufzubauen, müssen die Pakete für den Filter, den Virenscanner und die Sieve-Erweiterung installiert werden.

Paketinstallation

Die Installation erfolgt unter Debian/Ubuntu über die Standard-Repositorys:

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

Rspamd: Modul-Konfiguration

Die Steuerung erfolgt über Dateien im Verzeichnis /etc/rspamd/local.d/.

Virenscanner-Anbindung (ClamAV)

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

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

Statistischer Filter (Bayes)

Datei: /etc/rspamd/local.d/classifier-bayes.conf

enabled = true;
autolearn = true;
backend = "sqlite3";

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

backend = "sqlite3";

Web-Interface Zugriff

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

bind_socket = "127.0.0.1:11334";
password = "$2$abcdef..."; # Erstellt via: rspamadm pw

Postfix: Milter-Integration

Damit Postfix jede Mail an Rspamd zur Prüfung übergibt, wird die Milter-Schnittstelle konfiguriert.

Berechtigungen

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

# Milter-Einstellungen für Rspamd
smtpd_milters = unix:/var/lib/rspamd/rspamd.sock
non_smtpd_milters = unix:/var/lib/rspamd/rspamd.sock
milter_default_action = accept
milter_protocol = 6

Dienste aktualisieren:

  • 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.

LMTP-Plugin Aktivierung

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

protocol lmtp {
  mail_plugins = $mail_plugins sieve
}

Sieve-Regel (Global)

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

require ["fileinto"];

if header :contains "X-Spam" "Yes" {
  fileinto "Junk";
  stop;
}

Regel aktivieren und Dovecot neu starten:

  • 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

Prüfung der Rspamd-Entscheidungen (Score, Symbole, Action):

  • tail -f /var/log/rspamd/rspamd.log

Fazit

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

#!/bin/bash

# --- Parameter-Handling ---
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

# --- 1. Installation ---
apt update
apt install -y rspamd clamav-daemon dovecot-sieve dovecot-managesieved postfix

# --- 2. Rspamd Konfiguration erzwingen ---
RSPAMD_HASH=$(rspamadm pw -p "$USER_PASS")

# Alte Controller-Konfigurationen aufräumen, um Overrides zu verhindern
rm -f /etc/rspamd/local.d/worker-controller.inc

# Web-Interface (Controller) global auf 0.0.0.0 setzen
cat <<EOF > /etc/rspamd/local.d/worker-controller.inc
bind_socket = "0.0.0.0:11334";
password = "$RSPAMD_HASH";
enable_password = "$RSPAMD_HASH";
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
clamav {
  scan_mime_parts = true;
  symbol = "CLAM_VIRUS";
  type = "clamav";
  servers = "/run/clamav/clamd.ctl";
}
EOF

# --- 3. Postfix Integration ---
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. 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

mkdir -p /var/lib/dovecot/sieve/
cat <<EOF > /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
# 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/

# --- 5. Neustart ---
systemctl restart clamav-daemon
systemctl restart rspamd
systemctl restart postfix
systemctl restart dovecot

# --- 6. Finaler Check ---
echo "-------------------------------------------------------"
echo "Netzwerk-Check (Port 11334):"
ss -tulpn | grep 11334
echo "-------------------------------------------------------"
echo "Setup abgeschlossen."
echo "URL: http://$(hostname -I | awk '{print $1}'):11334"

Analyse der Filter-Logik: Warum ist das Spam?

Ein modernes Filtersystem wie Rspamd ist keine Blackbox. Der Lerneffekt tritt ein, wenn Schüler verstehen, wie sich ein Score aus vielen kleinen Indizien zusammensetzt.

Die Anatomie einer Ablehnung (Reject)

Wenn eine Mail abgelehnt wird, reicht es nicht zu wissen, DASS sie weg ist. Wir müssen wissen, WELCHE Regel den Ausschlag gab.

Live-Analyse im Terminal

Mit dem folgenden Befehl filtern wir nur die Zeile heraus, die das Urteil (Action) und die Gründe (Symbols) enthält:

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

Beispiel einer Log-Zeile

 (default: F (reject): [15.50 / 15.00] [GTUBE(0.00), R_SPF_FAIL(1.00), BAYES_SPAM(5.10), ...])

Der Aha-Effekt: Das Punktesystem (Scoring)

In der Schulung muss vermittelt werden, dass Rspamd wie ein Punktrichter arbeitet.

Threshold (Schwellenwert)
In diesem Beispiel liegt er bei 15.00 Punkten.
Symbole
Jedes Kürzel in den Klammern ist ein Beweismittel.
Gewichtung
Ein 'R_SPF_FAIL' gibt vielleicht nur 1 Punkt (Verdacht), aber 'BAYES_SPAM' gibt 5 Punkte (starkes Indiz).

Übung: Die Detektiv-Arbeit

Lasse die Schüler eine Mail manipulieren, um zu sehen, wie sich der Score verändert:

  1. Sende eine saubere Mail -> Score 0.
  2. Sende die Mail von einer gefälschten Absender-Adresse -> Score steigt (SPF-Fail).
  3. Füge "Click here for free money" hinzu -> Score steigt weiter (Bayes/Heuristik).
  4. Ergebnis: Die Schüler sehen live, wie die Mail langsam über die 15-Punkte-Grenze "wandert".

Visualisierung im Web-Interface

Das Web-Interface ist das beste Werkzeug, um die Theorie der Symbole zu festigen.

  1. Reiter History aufrufen.
  2. Auf eine Zeile klicken.
  3. Aha-Moment: Jedes Symbol wird im Klartext erklärt (z.B. "SPF: domain has no SPF record").

Fazit für die Schulungsunterlage

Spam-Schutz ist Wahrscheinlichkeitsrechnung
Es gibt selten den einen Grund, sondern die Summe der Indizien entscheidet.
Transparenz
Ein guter Administrator schaut nicht nur, ob die Mail ankam, sondern warum sie welchen Score erhalten hat.
Anpassbarkeit
Über die Datei /etc/rspamd/local.d/scores.conf können wir Symbole, die in unserer Schule zu streng sind, abmildern.