Rspamd kurz und gut: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(12 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Mailserver: Postfix + Rspamd + Dovecot + Sieve (vollständiger Mailflow) =
+
= Rspamd + ClamAV Integration (Postfix) =
  
 
== Ziel ==
 
== Ziel ==
* Aufbau eines vollständigen Mailfilters mit Spam- und Virenerkennung
+
* Integration eines Spam- und Virenfilters in eine bestehende Mailserver-Umgebung.
* Automatische Sortierung von Spam in den Junk-Ordner
+
* Am Ende können Spam (GTUBE), Viren (EICAR) und SPF-Bewertungen demonstriert werden.
* Sauberer Mailflow ohne versteckte Fehlerquellen
 
  
== Architektur ==
+
== Schritt 1: Aufräumen (Tabula Rasa) ==
* Postfix nimmt E-Mails per SMTP an
+
* Alte Rspamd- und ClamAV-Komponenten werden entfernt, um Konflikte zu vermeiden.
* Rspamd analysiert die Mail (Spam/Virus)
+
* Dadurch wird sichergestellt, dass keine alten Konfigurationen das Verhalten beeinflussen.
* Dovecot übernimmt die Zustellung per LMTP
 
* Sieve sortiert Spam anhand der Header in den Junk-Ordner
 
  
== Voraussetzung ==
+
systemctl stop rspamd clamav-daemon 2>/dev/null || true
* Postfix und Dovecot sind installiert und funktionsfähig
+
service rspamd stop 2>/dev/null || true
* Grundlegende Mailzustellung läuft bereits
+
service clamav-daemon stop 2>/dev/null || true
 +
apt -y purge rspamd clamav clamav-daemon || true
 +
apt -y autoremove
 +
apt -y autoclean
 +
rm -rf /etc/rspamd
 +
rm -rf /var/lib/rspamd
 +
rm -rf /var/log/rspamd
  
== Sieve-Unterstützung installieren ==
+
== Schritt 2: Installation ==
* Sieve erweitert Dovecot um serverseitige Filterregeln, die beim Zustellen ausgeführt werden.
+
* Die benötigten Pakete für Spam- und Virenfilter werden installiert.
* Ohne Sieve ist keine automatische Sortierung von Spam möglich.
+
* Rspamd übernimmt die Analyse, ClamAV die Virenerkennung.
  apt install dovecot-sieve dovecot-managesieved
+
 
 +
apt update
 +
apt -y install rspamd clamav clamav-daemon
 +
 
 +
== Schritt 3: Virensignaturen aktualisieren ==
 +
* ClamAV benötigt aktuelle Signaturen, um zuverlässig Viren zu erkennen.
 +
* Der Befehl lädt die neuesten Definitionen herunter.
 +
 
 +
freshclam || true
 +
 
 +
== Schritt 4: Grundkonfiguration ==
 +
* Das Verzeichnis für lokale Rspamd-Konfigurationen wird angelegt.
 +
* Hier werden alle eigenen Anpassungen gespeichert.
 +
 
 +
mkdir -p /etc/rspamd/local.d
 +
 
 +
== Schritt 5: ClamAV Integration ==
 +
* Rspamd wird so konfiguriert, dass eingehende Mails an ClamAV übergeben werden.
 +
* Wird ein Virus erkannt, wird die Mail sofort abgelehnt.
 +
 
 +
cat <<EOF > /etc/rspamd/local.d/antivirus.conf
 +
<pre>
 +
clamav {
 +
  action = "reject";
 +
  symbol = "CLAM_VIRUS";
 +
  type = "clamav";
 +
  servers = "127.0.0.1:3310";
 +
}
 +
</pre>
 +
EOF
 +
 
 +
== Schritt 6: Aktionen ==
 +
* Die Schwellwerte bestimmen, ab wann eine Mail abgelehnt oder markiert wird.
 +
* Für Schulungen sind die Werte bewusst niedrig gewählt.
 +
 
 +
cat <<EOF > /etc/rspamd/local.d/actions.conf
 +
<pre>
 +
reject = 5;
 +
add_header = 3;
 +
greylist = 4;
 +
</pre>
 +
EOF
 +
 
 +
== Schritt 7: Webinterface ==
 +
* Das Webinterface ermöglicht die Analyse der Mailbewertung.
 +
* Ein festes Passwort erlaubt den Zugriff.
 +
 
 +
cat <<'EOF' > /etc/rspamd/local.d/worker-controller.inc
 +
<pre>
 +
password = "$2$kKqzF3cH9x7L9u1w0ZJ8R.Hp9m2l8pG6yVv8eR6m3yY1p2Q3w4e5G";
 +
enable_password = "$2$kKqzF3cH9x7L9u1w0ZJ8R.Hp9m2l8pG6yVv8eR6m3yY1p2Q3w4e5G";
 +
bind_socket = "0.0.0.0:11334";
 +
</pre>
 +
EOF
 +
 
 +
== Schritt 8: Postfix anbinden ==
 +
* Postfix wird so konfiguriert, dass jede Mail durch Rspamd geprüft wird.
 +
* Dies erfolgt über das Milter-Interface.
 +
 
 +
postconf -e "milter_protocol = 6"
 +
postconf -e "milter_default_action = accept"
 +
postconf -e "smtpd_milters = inet:127.0.0.1:11332"
 +
postconf -e "non_smtpd_milters = inet:127.0.0.1:11332"
 +
 
 +
== Schritt 9: Dienste starten ==
 +
* Die Dienste werden gestartet oder neu geladen.
 +
* Fallbacks sorgen dafür, dass das Script auch ohne systemd funktioniert.
 +
 
 +
systemctl restart clamav-daemon 2>/dev/null || clamd &
 +
systemctl restart rspamd 2>/dev/null || rspamd -d
 +
systemctl restart postfix 2>/dev/null || service postfix restart
 +
 
 +
== Ergebnis ==
 +
* Rspamd filtert Spam und bewertet Mails anhand verschiedener Kriterien.
 +
* ClamAV blockiert schädliche Anhänge zuverlässig.
 +
 
 +
== Webinterface ==
 +
* Zugriff über den Browser zur Analyse der Mails.
 +
 
 +
http://SERVER-IP:11334
 +
 
 +
* Passwort: xinux123
 +
 
 +
 
 +
 
 +
= Rspamd / ClamAV Tests =
 +
 
 +
== Ziel ==
 +
* Überprüfung der Mail-Filterung
 +
* Nachweis von Spam-Erkennung (GTUBE)
 +
* Nachweis von Virus-Erkennung (ClamAV / EICAR)
 +
* Sichtbarkeit von SPF-Bewertung
 +
 
 +
== Vorbereitung ==
 +
* Zielbenutzer: thomas@it213.int
 +
* Mailserver lokal erreichbar (127.0.0.1)
 +
* swaks installiert
 +
 
 +
== Test Spam (GTUBE) ==
 +
===Test===
 +
* Der GTUBE-String ist ein standardisierter Test für Spamfilter und wird immer erkannt
 +
* Die Mail muss durch Rspamd blockiert oder als Spam markiert werden
 +
 
 +
swaks --to thomas@it213.int --server 127.0.0.1 --data "Subject: spam test XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"
 +
 
 +
=== Prüfung ===
 +
* Live-Logs beobachten um zu sehen ob Rspamd eingreift
 +
 
 +
  journalctl -f -u rspamd -u postfix -u clamav-daemon
 +
 
 +
=== Erwartung ===
 +
* Rspamd erkennt den GTUBE-String
 +
* Postfix lehnt die Mail über den Milter ab
 +
* Die Mail wird nicht zugestellt
 +
* In den Logs erscheint:
 +
 
 +
milter-reject: END-OF-MESSAGE
 +
Gtube pattern
 +
 
 +
=== Ergebnis ===
 +
* Mail wird abgelehnt
 +
* Beispiel Log:
  
== Rspamd als Milter in Postfix einbinden ==
 
* Postfix übergibt eingehende Mails an Rspamd zur Analyse.
 
* Rspamd fügt Header hinzu, die später für die Sortierung verwendet werden.
 
Datei: /etc/postfix/main.cf
 
 
<pre>
 
<pre>
smtpd_milters = inet:localhost:11332
+
Mar 20 14:14:06 mail.it213.int postfix/cleanup[30205]: 04BC8C0995: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 5.7.1 Gtube pattern; from=<root@mail.it213.int> to=<thomas@it213.int> proto=ESMTP helo=<mail.it213.int>
non_smtpd_milters = $smtpd_milters
+
Mar 20 14:14:06 mail.it213.int postfix/cleanup[30205]: 04BC8C0995: removed (canceled)
milter_default_action = accept
+
Mar 20 14:18:59 mail.it213.int postfix/cleanup[30218]: CDDD8C0995: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 5.7.1 Gtube pattern; from=<root@mail.it213.int> to=<thomas@it213.int> proto=ESMTP helo=<mail.it213.int>
milter_protocol = 6
+
Mar 20 14:18:59 mail.it213.int postfix/cleanup[30218]: CDDD8C0995: removed (canceled)
 
</pre>
 
</pre>
  
== LMTP Zustellung aktivieren (entscheidend) ==
+
=== Interpretation ===
* Postfix übergibt die Mail an Dovecot statt sie selbst zuzustellen.
+
* Rspamd läuft korrekt
* Nur bei LMTP-Zustellung wird Sieve beim Mail-Eingang ausgeführt.
+
* Milter-Anbindung funktioniert
Datei: /etc/postfix/main.cf
+
* Spam wird aktiv geblockt
<pre>
+
* System verhält sich wie erwartet
virtual_transport = lmtp:unix:private/dovecot-lmtp
+
 
</pre>
+
== Test Virus (EICAR) ==
 +
=== Test ===
 +
* Die EICAR-Testsignatur simuliert einen Virus und wird von ClamAV erkannt
 +
* Die Mail darf nicht zugestellt werden
 +
 
 +
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.txt
 +
 
 +
swaks --to thomas@it213.int --server mail.it213.int --attach eicar.txt
 +
 
 +
=== Prüfung ===
 +
* Live-Logs beobachten um zu sehen ob ClamAV/Rspamd eingreift
 +
 
 +
journalctl -f -u rspamd -u postfix -u clamav-daemon
 +
 
 +
=== Erwartung ===
 +
* ClamAV erkennt die EICAR-Signatur
 +
* Rspamd setzt das Symbol CLAM_VIRUS
 +
* Postfix lehnt die Mail über den Milter ab
 +
* Die Mail wird nicht zugestellt
 +
* In den Logs erscheint:
 +
 
 +
CLAM_VIRUS
 +
milter-reject
  
== LMTP Socket in Dovecot aktivieren ==
+
=== Ergebnis ===
* Dovecot stellt einen lokalen Socket bereit, über den Postfix Mails übergeben kann.
+
* (abhängig vom aktuellen Zustand des Systems)
* Ohne diesen Socket funktioniert die Übergabe von Postfix an Dovecot nicht.
+
* Wenn korrekt konfiguriert:
Datei: /etc/dovecot/conf.d/10-master.conf
 
<pre>
 
service lmtp {
 
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
 
    mode = 0600
 
    user = postfix
 
    group = postfix
 
  }
 
}
 
</pre>
 
  
== Sieve in Dovecot aktivieren ==
 
* Das Sieve-Plugin wird für die lokale Zustellung aktiviert.
 
* Dadurch werden Filterregeln direkt beim Eingang der Mail angewendet.
 
Datei: /etc/dovecot/conf.d/20-lmtp.conf
 
 
<pre>
 
<pre>
protocol lmtp {
+
milter-reject: END-OF-MESSAGE ... CLAM_VIRUS
  mail_plugins = $mail_plugins sieve
 
}
 
 
</pre>
 
</pre>
  
== Sieve Plugin konfigurieren ==
+
=== Interpretation ===
* Definiert den Speicherort der Sieve-Regeln pro Benutzer.
+
* ClamAV ist korrekt an Rspamd angebunden
* Die aktive Regel wird automatisch bei jeder Mail ausgeführt.
+
* Virenerkennung funktioniert
Datei: /etc/dovecot/conf.d/90-sieve.conf
+
* Infizierte Mails werden aktiv geblockt
<pre>
+
* System verhält sich wie erwartet
plugin {
 
  sieve = file:~/sieve;active=~/.dovecot.sieve
 
}
 
</pre>
 
  
== Sieve Regel für Spam-Sortierung erstellen ==
+
== Test 3: SPF ==
* Die Regel prüft die von Rspamd gesetzten Header.
+
* Es wird eine Mail mit gefälschtem Absender erzeugt.
* Erkannter Spam wird automatisch in den Junk-Ordner verschoben.
+
* SPF wird durch Rspamd bewertet und beeinflusst den Score.
Datei: /home/USER/.dovecot.sieve
 
<pre>
 
require ["fileinto", "mailbox"];
 
  
if header :contains "X-Spam-Flag" "YES" {
+
swaks --to thomas@it213.int --server 127.0.0.1 \
  fileinto "Junk";
+
--from fake@gmail.com
  stop;
 
}
 
</pre>
 
  
== Sieve kompilieren ==
+
* Erwartung: SPF_FAIL erscheint in den Logs oder im Rspamd Webinterface und erhöht den Spam-Score.
* Die Regel wird in ein optimiertes Format übersetzt.
 
* Die korrekten Dateirechte sind notwendig, damit Dovecot die Regel verwenden kann.
 
* sievec /home/USER/.dovecot.sieve
 
* chown USER:USER /home/USER/.dovecot.sieve*
 
  
== Dienste neu starten ==
+
== Live-Beobachtung ==
* Alle beteiligten Dienste müssen neu gestartet werden, damit Änderungen aktiv werden.
+
* Die Verarbeitung der Mails kann live verfolgt werden.
* Ohne Neustart bleiben Konfigurationsänderungen wirkungslos.
 
* systemctl restart dovecot
 
* systemctl restart postfix
 
* systemctl restart rspamd
 
  
== Funktionstest ==
+
journalctl -f
* Eine Testmail wird erzeugt, um den kompletten Mailflow zu prüfen.
 
* Ziel ist, dass Spam automatisch im Junk-Ordner landet.
 
* GTUBE Testmail senden
 
* Prüfen, ob die Mail im Junk-Ordner landet
 
* tail -f /var/log/mail.log
 
  
== Fazit ==
+
* Erwartung:
* Rspamd filtert Inhalte, Dovecot übernimmt die Zustellung via LMTP.
+
* Spam: "Gtube pattern" oder "milter-reject"
* Sieve sorgt für die automatische Sortierung basierend auf den Milter-Ergebnissen.
+
* Virus: "CLAM_VIRUS"
* Das Setup ist modular, sicher und entspricht modernen Standards.
+
* SPF: "SPF_FAIL"

Aktuelle Version vom 20. März 2026, 13:40 Uhr

Rspamd + ClamAV Integration (Postfix)

Ziel

  • Integration eines Spam- und Virenfilters in eine bestehende Mailserver-Umgebung.
  • Am Ende können Spam (GTUBE), Viren (EICAR) und SPF-Bewertungen demonstriert werden.

Schritt 1: Aufräumen (Tabula Rasa)

  • Alte Rspamd- und ClamAV-Komponenten werden entfernt, um Konflikte zu vermeiden.
  • Dadurch wird sichergestellt, dass keine alten Konfigurationen das Verhalten beeinflussen.
systemctl stop rspamd clamav-daemon 2>/dev/null || true
service rspamd stop 2>/dev/null || true
service clamav-daemon stop 2>/dev/null || true
apt -y purge rspamd clamav clamav-daemon || true
apt -y autoremove
apt -y autoclean
rm -rf /etc/rspamd
rm -rf /var/lib/rspamd
rm -rf /var/log/rspamd

Schritt 2: Installation

  • Die benötigten Pakete für Spam- und Virenfilter werden installiert.
  • Rspamd übernimmt die Analyse, ClamAV die Virenerkennung.
apt update
apt -y install rspamd clamav clamav-daemon

Schritt 3: Virensignaturen aktualisieren

  • ClamAV benötigt aktuelle Signaturen, um zuverlässig Viren zu erkennen.
  • Der Befehl lädt die neuesten Definitionen herunter.
freshclam || true

Schritt 4: Grundkonfiguration

  • Das Verzeichnis für lokale Rspamd-Konfigurationen wird angelegt.
  • Hier werden alle eigenen Anpassungen gespeichert.
mkdir -p /etc/rspamd/local.d

Schritt 5: ClamAV Integration

  • Rspamd wird so konfiguriert, dass eingehende Mails an ClamAV übergeben werden.
  • Wird ein Virus erkannt, wird die Mail sofort abgelehnt.
cat <<EOF > /etc/rspamd/local.d/antivirus.conf
 clamav {
   action = "reject";
   symbol = "CLAM_VIRUS";
   type = "clamav";
   servers = "127.0.0.1:3310";
 }
 
EOF

Schritt 6: Aktionen

  • Die Schwellwerte bestimmen, ab wann eine Mail abgelehnt oder markiert wird.
  • Für Schulungen sind die Werte bewusst niedrig gewählt.
cat <<EOF > /etc/rspamd/local.d/actions.conf
 reject = 5;
 add_header = 3;
 greylist = 4;
 
EOF

Schritt 7: Webinterface

  • Das Webinterface ermöglicht die Analyse der Mailbewertung.
  • Ein festes Passwort erlaubt den Zugriff.
cat <<'EOF' > /etc/rspamd/local.d/worker-controller.inc
 password = "$2$kKqzF3cH9x7L9u1w0ZJ8R.Hp9m2l8pG6yVv8eR6m3yY1p2Q3w4e5G";
 enable_password = "$2$kKqzF3cH9x7L9u1w0ZJ8R.Hp9m2l8pG6yVv8eR6m3yY1p2Q3w4e5G";
 bind_socket = "0.0.0.0:11334";
 
EOF

Schritt 8: Postfix anbinden

  • Postfix wird so konfiguriert, dass jede Mail durch Rspamd geprüft wird.
  • Dies erfolgt über das Milter-Interface.
postconf -e "milter_protocol = 6"
postconf -e "milter_default_action = accept"
postconf -e "smtpd_milters = inet:127.0.0.1:11332"
postconf -e "non_smtpd_milters = inet:127.0.0.1:11332"

Schritt 9: Dienste starten

  • Die Dienste werden gestartet oder neu geladen.
  • Fallbacks sorgen dafür, dass das Script auch ohne systemd funktioniert.
systemctl restart clamav-daemon 2>/dev/null || clamd &
systemctl restart rspamd 2>/dev/null || rspamd -d
systemctl restart postfix 2>/dev/null || service postfix restart

Ergebnis

  • Rspamd filtert Spam und bewertet Mails anhand verschiedener Kriterien.
  • ClamAV blockiert schädliche Anhänge zuverlässig.

Webinterface

  • Zugriff über den Browser zur Analyse der Mails.
http://SERVER-IP:11334
  • Passwort: xinux123


Rspamd / ClamAV Tests

Ziel

  • Überprüfung der Mail-Filterung
  • Nachweis von Spam-Erkennung (GTUBE)
  • Nachweis von Virus-Erkennung (ClamAV / EICAR)
  • Sichtbarkeit von SPF-Bewertung

Vorbereitung

  • Zielbenutzer: thomas@it213.int
  • Mailserver lokal erreichbar (127.0.0.1)
  • swaks installiert

Test Spam (GTUBE)

Test

  • Der GTUBE-String ist ein standardisierter Test für Spamfilter und wird immer erkannt
  • Die Mail muss durch Rspamd blockiert oder als Spam markiert werden
swaks --to thomas@it213.int --server 127.0.0.1 --data "Subject: spam test XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"

Prüfung

  • Live-Logs beobachten um zu sehen ob Rspamd eingreift
journalctl -f -u rspamd -u postfix -u clamav-daemon

Erwartung

  • Rspamd erkennt den GTUBE-String
  • Postfix lehnt die Mail über den Milter ab
  • Die Mail wird nicht zugestellt
  • In den Logs erscheint:
milter-reject: END-OF-MESSAGE
Gtube pattern

Ergebnis

  • Mail wird abgelehnt
  • Beispiel Log:
Mar 20 14:14:06 mail.it213.int postfix/cleanup[30205]: 04BC8C0995: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 5.7.1 Gtube pattern; from=<root@mail.it213.int> to=<thomas@it213.int> proto=ESMTP helo=<mail.it213.int>
Mar 20 14:14:06 mail.it213.int postfix/cleanup[30205]: 04BC8C0995: removed (canceled)
Mar 20 14:18:59 mail.it213.int postfix/cleanup[30218]: CDDD8C0995: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 5.7.1 Gtube pattern; from=<root@mail.it213.int> to=<thomas@it213.int> proto=ESMTP helo=<mail.it213.int>
Mar 20 14:18:59 mail.it213.int postfix/cleanup[30218]: CDDD8C0995: removed (canceled)

Interpretation

  • Rspamd läuft korrekt
  • Milter-Anbindung funktioniert
  • Spam wird aktiv geblockt
  • System verhält sich wie erwartet

Test Virus (EICAR)

Test

  • Die EICAR-Testsignatur simuliert einen Virus und wird von ClamAV erkannt
  • Die Mail darf nicht zugestellt werden
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.txt
swaks --to thomas@it213.int --server mail.it213.int --attach eicar.txt

Prüfung

  • Live-Logs beobachten um zu sehen ob ClamAV/Rspamd eingreift
journalctl -f -u rspamd -u postfix -u clamav-daemon

Erwartung

  • ClamAV erkennt die EICAR-Signatur
  • Rspamd setzt das Symbol CLAM_VIRUS
  • Postfix lehnt die Mail über den Milter ab
  • Die Mail wird nicht zugestellt
  • In den Logs erscheint:
CLAM_VIRUS
milter-reject

Ergebnis

  • (abhängig vom aktuellen Zustand des Systems)
  • Wenn korrekt konfiguriert:
milter-reject: END-OF-MESSAGE ... CLAM_VIRUS

Interpretation

  • ClamAV ist korrekt an Rspamd angebunden
  • Virenerkennung funktioniert
  • Infizierte Mails werden aktiv geblockt
  • System verhält sich wie erwartet

Test 3: SPF

  • Es wird eine Mail mit gefälschtem Absender erzeugt.
  • SPF wird durch Rspamd bewertet und beeinflusst den Score.

swaks --to thomas@it213.int --server 127.0.0.1 \ --from fake@gmail.com

  • Erwartung: SPF_FAIL erscheint in den Logs oder im Rspamd Webinterface und erhöht den Spam-Score.

Live-Beobachtung

  • Die Verarbeitung der Mails kann live verfolgt werden.

journalctl -f

  • Erwartung:
  • Spam: "Gtube pattern" oder "milter-reject"
  • Virus: "CLAM_VIRUS"
  • SPF: "SPF_FAIL"