Rspamd Einrichten: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
Zeile 1: Zeile 1:
=Rspamd und ClamAV installieren=
+
=Rspamd und ClamAV installieren=
==Debian/Ubuntu==
+
==Debian/Ubuntu==
 
   apt install rspamd clamav-daemon clamav-freshclam redis-server postfix swaks
 
   apt install rspamd clamav-daemon clamav-freshclam redis-server postfix swaks
  
==RHEL/CentOS==
+
==RHEL/CentOS==
 
   dnf install rspamd clamav clamav-update redis postfix swaks
 
   dnf install rspamd clamav clamav-update redis postfix swaks
 
Rspamd übernimmt die Spam-Analyse und ClamAV den Virenscan. Redis wird für Caching und Bayes-Filter benötigt und ist essenziell für den produktiven Betrieb.
 
  
 
=Enablen und Starten der Dienste=
 
=Enablen und Starten der Dienste=
Zeile 12: Zeile 10:
 
   systemctl enable clamav-daemon --now
 
   systemctl enable clamav-daemon --now
 
   systemctl enable redis-server --now
 
   systemctl enable redis-server --now
 
Die Dienste werden dauerhaft aktiviert und direkt gestartet. Ohne laufende Dienste findet weder Spam- noch Virenprüfung statt.
 
  
 
=== Redis-Anbindung (Das Gedächtnis von Rspamd) ===
 
=== Redis-Anbindung (Das Gedächtnis von Rspamd) ===
Rspamd nutzt Redis zur Speicherung von Scan-Ergebnissen und zum Lernen von Spam. Dadurch werden wiederkehrende Inhalte schneller verarbeitet und die Erkennung verbessert sich.
+
Damit Rspamd Scanergebnisse zwischenspeichern und statistische Analysen (Bayes) durchführen kann, ist eine Datenbank-Anbindung zwingend erforderlich. Ohne Redis arbeiten viele Module (wie Antivirus oder Greylisting) nur eingeschränkt oder gar nicht.
  
 
==== Installation und Aktivierung ====
 
==== Installation und Aktivierung ====
 +
Zuerst muss der Redis-Server auf dem System installiert und gestartet sein.
 +
 
   apt install redis-server
 
   apt install redis-server
 
   systemctl enable --now redis-server
 
   systemctl enable --now redis-server
  
Redis läuft als zentraler Key-Value-Store im Hintergrund. Er ist Voraussetzung für Bayes, Greylisting und Caching.
+
==== Konfiguration in Rspamd ====
 +
Rspamd benötigt einen zentralen Ort, an dem die Server-Adresse von Redis definiert ist. Dies geschieht üblicherweise in einer lokalen Konfigurationsdatei.
  
==== Konfiguration in Rspamd ====
 
 
Datei: /etc/rspamd/local.d/redis.conf
 
Datei: /etc/rspamd/local.d/redis.conf
  
 
<pre>
 
<pre>
 +
# Definition des lokalen Redis-Servers
 
servers = "127.0.0.1:6379";
 
servers = "127.0.0.1:6379";
 
</pre>
 
</pre>
  
Hier wird Rspamd mitgeteilt, wo Redis erreichbar ist. Ohne diese Angabe arbeiten mehrere Module nur eingeschränkt.
+
==== Prüfung der Anbindung ====
 +
Ob Rspamd erfolgreich mit Redis kommuniziert, lässt sich über das Admin-Tool prüfen:
  
==== Prüfung der Anbindung ====
 
 
   rspamadm control stat
 
   rspamadm control stat
  
In der Ausgabe sollte Redis als „online“ erscheinen. Ist das nicht der Fall, funktioniert das Caching nicht korrekt.
+
In der Ausgabe sollte unter "Nodes" der Status des Redis-Servers als "online" oder "active" erscheinen.
  
 
==== Warum das für ClamAV wichtig ist ====
 
==== Warum das für ClamAV wichtig ist ====
Rspamd speichert Ergebnisse von Virenscans zwischen. Dadurch werden identische Anhänge nicht mehrfach geprüft, was die CPU deutlich entlastet.
+
Virenscanner-Ergebnisse sind CPU-intensiv. Rspamd speichert das Ergebnis eines Scans (z.B. "Diese Datei mit Hash XY ist ein Virus") für eine gewisse Zeit in Redis. Wenn dieselbe Mail erneut reinkommt, muss ClamAV nicht noch einmal rechnen – Rspamd holt die Antwort direkt aus dem Redis-Cache.
 +
 
 +
  systemctl start redis-server
 +
  systemctl enable redis-server.service
  
=Zustand prüfen=
+
=Läuft alles=
 
   systemctl status rspamd
 
   systemctl status rspamd
 
   systemctl status clamav-daemon
 
   systemctl status clamav-daemon
 
   systemctl status redis-server
 
   systemctl status redis-server
  
Hier wird überprüft, ob alle Dienste laufen. Fehler in diesem Schritt führen später zu schwer nachvollziehbaren Problemen.
+
=Dienste und Ports von Rspamd=
 
+
==Rspamd Proxy==
=Rspamd Dienste und Ports=
+
*Der Rspamd Proxy dient als Eingangsfilter für E-Mails und leitet sie an die entsprechenden Worker weiter, um die Last zu verteilen.
==Rspamd Proxy==
+
<pre>
Der Proxy nimmt Mails entgegen und verteilt sie intern an Worker. Er ist die zentrale Schnittstelle für eingehende Verbindungen.
+
Port: 11332/tcp (Standardport für Proxy-Dienste) 
<pre>
+
</pre>
Port: 11332/tcp
 
</pre>
 
  
==Rspamd Worker==
+
==Rspamd Worker==
Der Worker führt die eigentliche Analyse durch. Hier werden Regeln, Bayes und externe Dienste verarbeitet.
+
*Der Rspamd Worker führt die eigentliche Spam-Analyse durch und verarbeitet eingehende Nachrichten anhand von Regeln, Statistiken und externen Diensten.
<pre>
+
<pre>
Port: 11333/tcp
+
Port: 11333/tcp (Standardport für Worker-Dienste) 
</pre>
+
</pre>
  
==Rspamd Controller==
+
==Rspamd Controller==
Der Controller stellt das Webinterface und die API bereit. Darüber erfolgt Administration und Monitoring.
+
*Der Rspamd Controller stellt eine API für Konfiguration, Statistiken und manuelles Training des Filters zur Verfügung.
<pre>
+
<pre>
Port: 11334/tcp
+
Port: 11334/tcp (Standardport für den Controller) 
 
</pre>
 
</pre>
  
 
=Passwort für den Rspamd Controller und Port nach außen öffnen=
 
=Passwort für den Rspamd Controller und Port nach außen öffnen=
 +
;Passwort erzeugen
 
   rspamadm pw
 
   rspamadm pw
  
 +
Enter passphrase:
 +
$2$mqbbp8yb4fz8febgpxk7rb4db9p5njwg$xior3gxjbuc76bhsq4rapq7x98cssrm9qkr49kwapgdsahmpzjny
 +
 +
;In der Worker Datei eintragen
 +
;Port an allen Interfaces lauschen lassen
 
   cat /etc/rspamd/override.d/worker-controller.inc
 
   cat /etc/rspamd/override.d/worker-controller.inc
 
+
 
 
<pre>
 
<pre>
password = "HASH";
+
password = "$2$mqbbp8yb4fz8febgpxk7rb4db9p5njwg$xior3gxjbuc76bhsq4rapq7x98cssrm9qkr49kwapgdsahmpzjny";
 
bind_socket ="*:11334";
 
bind_socket ="*:11334";
 
</pre>
 
</pre>
 
Das Passwort wird als Hash gespeichert und schützt das Webinterface. Durch „*:11334“ ist der Zugriff auch von außen möglich.
 
  
 
=Restart=
 
=Restart=
 
   systemctl restart rspamd
 
   systemctl restart rspamd
 
Nach Konfigurationsänderungen muss Rspamd neu gestartet werden. Andernfalls werden Änderungen nicht übernommen.
 
  
 
=Zugriff auf das Webinterface=
 
=Zugriff auf das Webinterface=
http://IP-Mailserver:11334
+
*http://IP-Mailserver:11334
 
+
[[Datei:Rspamd-1.png]]
Das Webinterface zeigt Statistiken, Logs und ermöglicht manuelles Training. Es ist das wichtigste Werkzeug für Betrieb und Analyse.
 
  
=Milters=
+
=Milters=
Milters sind Filter, die direkt in den Mailfluss von Postfix eingreifen. Sie ermöglichen Entscheidungen in Echtzeit während der SMTP-Kommunikation.
+
*Milters sind Mail-Filter, die über das Milter-Protokoll mit MTA-Software wie Postfix oder Sendmail kommunizieren.
 +
*Sie ermöglichen die Verarbeitung und Filterung von E-Mails in Echtzeit, bevor sie zugestellt werden. 
 +
*Milter werden häufig für Spam-Filterung, Virenscans und Inhaltsüberprüfungen eingesetzt.
  
 
=Einbinden in Postfix=
 
=Einbinden in Postfix=
Zeile 96: Zeile 99:
 
   postconf -e "non_smtpd_milters=inet:127.0.0.1:11332"
 
   postconf -e "non_smtpd_milters=inet:127.0.0.1:11332"
 
   postfix reload
 
   postfix reload
 
Rspamd wird hier als Milter eingebunden. Dadurch wird jede eingehende Mail automatisch geprüft.
 
  
 
=Gtube Testmail=
 
=Gtube Testmail=
   swaks --to root@localhost --server 127.0.0.1 --data "Subject: GTUBE XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"
+
   swaks --to root@localhost --server 127.0.0.1 --data "Subject: spam test XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"
  
GTUBE ist ein standardisierter Spam-Test. Wird die Mail erkannt, funktioniert die Spam-Erkennung korrekt.
+
=Resultat=
 +
[[Datei:Rspamd-2.png]]
  
 
=Die Logs=
 
=Die Logs=
 
   journalctl -u postfix | grep cleanup
 
   journalctl -u postfix | grep cleanup
  
Hier sieht man, ob Postfix Mails ablehnt oder annimmt. Besonders wichtig ist die Rückmeldung vom Milter (Rspamd).
+
Mar 18 19:21:22 mail.it113.int postfix/cleanup[7407]: 88BDDE0792: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 5.7.1 Gtube pattern; from=<root@mail.it113.int> to=<martha@mail.it113.int>
 +
Mar 18 19:21:22 mail.it113.int postfix/cleanup[7407]: 88BDDE0792: to=<martha@mail.it113.int>, orig_to=<martha>, relay=none, delay=0.19, delays=0.19/0/0/0, dsn=5.7.1, status=bounced (Gtube pattern)
 +
Mar 18 19:21:22 mail.it113.int postfix/cleanup[7410]: B3D24E07C2: message-id=<20250318182122.B3D24E07C2@mail.it113.int>
 +
 
 +
=Restart=
 +
*systemctl restart rspamd
 +
 
 +
=RBL-Integration in Rspamd und Postfix (Proof of Concept)= 
 +
==Rspamd mit lokaler RBL== 
 +
 
 +
===Configuration===
 +
  vi /etc/rspamd/local.d/multimap.conf
 +
 
 +
<pre>
 +
blacklist_ip {
 +
    type = "ip";
 +
    map = "/etc/rspamd/local.d/local_rbl.txt";
 +
    symbol = "LOCAL_RBL_HIT";
 +
    action = "reject";
 +
    description = "Lokale RBL-Hit";
 +
}
 +
</pre>
 +
 
 +
===Blackliste===
 +
  echo 10.88.113.21 > /etc/rspamd/local.d/local_rbl.txt
 +
 
 +
===Rspamd neustarten=== 
 +
  systemctl restart rspamd
 +
 
 +
===Tests===
 +
;postiv
 +
  echo hallo welt | rspamc -i 10.88.113.22
 +
 
 +
<pre>
 +
Results for file: stdin (0 seconds)
 +
[Metric: default]
 +
Action: add header
 +
</pre>
 +
 
 +
;negativ
 +
  echo hallo welt | rspamc -i 10.88.113.21
 +
 
 +
<pre>
 +
Results for file: stdin (0 seconds)
 +
[Metric: default]
 +
Action: reject
 +
Symbol: LOCAL_RBL_HIT
 +
</pre>
  
 
=ClamAV-Integration in Rspamd (UNIX Socket)=
 
=ClamAV-Integration in Rspamd (UNIX Socket)=
Rspamd kommuniziert lokal über einen UNIX Socket mit ClamAV. Dies ist stabiler und benötigt keine offenen Netzwerkports.
+
Diese Dokumentation beschreibt die Anbindung von ClamAV über einen lokalen UNIX Socket an Rspamd. Dadurch entfällt die Nutzung eines TCP-Ports und die Kommunikation bleibt lokal und stabil.
  
==ClamAV Konfiguration==
+
== ClamAV Konfiguration ==
Datei: /etc/clamav/clamd.conf
+
 
 +
Datei: /etc/clamav/clamd.conf
  
 
<pre>
 
<pre>
 +
# TCP deaktiviert
 +
#TCPSocket 3310
 +
#TCPAddr 127.0.0.1
 +
 +
# UNIX Socket
 
LocalSocket /run/clamav/clamd.ctl
 
LocalSocket /run/clamav/clamd.ctl
 
LocalSocketMode 666
 
LocalSocketMode 666
 
</pre>
 
</pre>
  
Der Socket stellt die Verbindung zwischen Rspamd und ClamAV her. TCP wird bewusst nicht verwendet.
+
== Rspamd Konfiguration ==
  
==Rspamd Konfiguration==
+
Datei: /etc/rspamd/override.d/antivirus.conf
Datei: /etc/rspamd/override.d/antivirus.conf
 
  
 
<pre>
 
<pre>
Zeile 136: Zeile 190:
 
     scan_unauthenticated = true;
 
     scan_unauthenticated = true;
 
     stream = true;
 
     stream = true;
     action = "reject";
+
     score = 20.0;
 
}
 
}
 
</pre>
 
</pre>
  
Rspamd nutzt hier den Socket als Backend für Virenscans. Wird ein Virus erkannt, wird die Mail sofort abgelehnt.
+
== Validierung ==
 +
 
 +
=== Erstellung der Test-E-Mail ===
 +
Datei: /tmp/virus.eml
 +
 
 +
<pre>
 +
From: Test <test@it213.int>
 +
To: Root <root@it213.int>
 +
Subject: EICAR Test
 +
MIME-Version: 1.0
 +
Content-Type: multipart/mixed; boundary="Grenzlinie"
  
=Rspamd Schwellenwerte (Actions)=
+
--Grenzlinie
{| class="wikitable"
+
Content-Type: text/plain; charset="utf-8"
! Aktion !! Empfohlener Score !! Bedeutung
 
|-
 
| reject
 
| 15.0
 
| Die Mail wird hart abgelehnt
 
|-
 
| add_header
 
| 6.0
 
| Mail wird zugestellt mit Spam-Header
 
|-
 
| greylist
 
| 4.0
 
| temporäre Ablehnung
 
|-
 
| no action
 
| < 4.0
 
| Mail gilt als sauber
 
|}
 
  
Rspamd bewertet jede Mail anhand von Punkten. Die Schwellenwerte bestimmen, wie mit der Mail verfahren wird.
+
Antivirus Testmail.
  
=Kurzer Check der Funktionsweise=
+
--Grenzlinie
  rspamc < /pfad/zu/einer/test.eml
+
Content-Type: application/com-file; name="eicar.com"
 +
Content-Disposition: attachment; filename="eicar.com"
 +
Content-Transfer-Encoding: 7bit
  
Mit rspamc kann eine Mail lokal analysiert werden. Das Ergebnis zeigt alle Regeln und Bewertungen im Detail.
+
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
  
=Fehlerdiagnose und Administration=
+
--Grenzlinie--
Diese Zusammenfassung dient als Spickzettel für die tägliche Administration und Fehlerbehebung.
+
</pre>
 +
 
 +
=== Testlauf ===
 +
  rspamc --ip 1.2.3.4 /tmp/virus.eml
 +
 
 +
Ein erfolgreicher Scan wird durch das Symbol CLAM_VIRUS bestätigt.
 +
 
 +
== Fehlerdiagnose und Administration ==
  
 
=== Protokolldateien überwachen ===
 
=== Protokolldateien überwachen ===
  tail -f /var/log/rspamd/rspamd.log | grep -E "antivirus|clamav"
+
* /var/log/rspamd/rspamd.log
 +
* /var/log/clamav/clamav.log
 +
* /var/log/clamav/freshclam.log
 +
* journalctl -u clamav-daemon -u rspamd
 +
 
 +
Live:
 +
<pre>
 +
tail -f /var/log/rspamd/rspamd.log | grep -E "antivirus|clamav"
 +
</pre>
 +
 
 +
=== Netzwerk-Ports und Sockets ===
 +
* Port 11333: Rspamd Worker
 +
* Port 11334: Rspamd Controller
 +
* Port 6379: Redis
 +
 
 +
<pre>
 +
ss -ltpn | grep -E "11333|11334|6379"
 +
</pre>
 +
 
 +
=== Redis Datenbank bereinigen ===
 +
<pre>
 +
redis-cli flushall
 +
</pre>
 +
 
 +
=== Manueller Virenscan ===
 +
<pre>
 +
clamdscan /tmp/virus.eml
 +
</pre>
  
Hier kann man live sehen, ob ClamAV angesprochen wird. Das ist der wichtigste Debug-Mechanismus.
+
=== Aktualisierung der Virendefinitionen ===
 +
<pre>
 +
systemctl status clamav-freshclam
 +
systemctl stop clamav-freshclam
 +
freshclam
 +
systemctl start clamav-freshclam
 +
</pre>
  
=== Kommunikation prüfen ===
+
=== Prüfung der Dienstkonfiguration ===
 +
<pre>
 +
rspamadm configtest
 +
</pre>
 +
 
 +
=== Rspamd kommuniziert mit ClamAV? ===
 +
 
 +
;Cache leeren
 
   redis-cli flushall
 
   redis-cli flushall
 
   systemctl restart rspamd
 
   systemctl restart rspamd
  
Redis wird geleert, um Cache-Effekte auszuschließen. So sieht man echte Scan-Ergebnisse.
+
;UNIX Socket Debug
 
 
=== UNIX Socket Debug ===
 
 
   apt install strace
 
   apt install strace
 
   strace -p $(pidof clamd) -e trace=network
 
   strace -p $(pidof clamd) -e trace=network
  
Mit strace kann man beobachten, ob ClamAV angesprochen wird. Das ist hilfreich bei Kommunikationsproblemen.
+
;TCP Debug (optional)
 
 
=== TCP Debug (optional) ===
 
 
   apt install tcpdump
 
   apt install tcpdump
 
   tcpdump -ni lo port 3310
 
   tcpdump -ni lo port 3310
 
Nur relevant, wenn TCP verwendet wird. Bei UNIX-Sockets ist dieser Schritt nicht notwendig.
 

Version vom 22. März 2026, 09:17 Uhr

Rspamd und ClamAV installieren

Debian/Ubuntu

 apt install rspamd clamav-daemon clamav-freshclam redis-server postfix swaks

RHEL/CentOS

 dnf install rspamd clamav clamav-update redis postfix swaks

Enablen und Starten der Dienste

 systemctl enable rspamd --now
 systemctl enable clamav-daemon --now
 systemctl enable redis-server --now

Redis-Anbindung (Das Gedächtnis von Rspamd)

Damit Rspamd Scanergebnisse zwischenspeichern und statistische Analysen (Bayes) durchführen kann, ist eine Datenbank-Anbindung zwingend erforderlich. Ohne Redis arbeiten viele Module (wie Antivirus oder Greylisting) nur eingeschränkt oder gar nicht.

Installation und Aktivierung

Zuerst muss der Redis-Server auf dem System installiert und gestartet sein.

 apt install redis-server
 systemctl enable --now redis-server

Konfiguration in Rspamd

Rspamd benötigt einen zentralen Ort, an dem die Server-Adresse von Redis definiert ist. Dies geschieht üblicherweise in einer lokalen Konfigurationsdatei.

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

# Definition des lokalen Redis-Servers
servers = "127.0.0.1:6379";

Prüfung der Anbindung

Ob Rspamd erfolgreich mit Redis kommuniziert, lässt sich über das Admin-Tool prüfen:

 rspamadm control stat

In der Ausgabe sollte unter "Nodes" der Status des Redis-Servers als "online" oder "active" erscheinen.

Warum das für ClamAV wichtig ist

Virenscanner-Ergebnisse sind CPU-intensiv. Rspamd speichert das Ergebnis eines Scans (z.B. "Diese Datei mit Hash XY ist ein Virus") für eine gewisse Zeit in Redis. Wenn dieselbe Mail erneut reinkommt, muss ClamAV nicht noch einmal rechnen – Rspamd holt die Antwort direkt aus dem Redis-Cache.

 systemctl start redis-server
 systemctl enable redis-server.service

Läuft alles

 systemctl status rspamd
 systemctl status clamav-daemon
 systemctl status redis-server

Dienste und Ports von Rspamd

Rspamd Proxy

  • Der Rspamd Proxy dient als Eingangsfilter für E-Mails und leitet sie an die entsprechenden Worker weiter, um die Last zu verteilen.
  
Port: 11332/tcp (Standardport für Proxy-Dienste)  

Rspamd Worker

  • Der Rspamd Worker führt die eigentliche Spam-Analyse durch und verarbeitet eingehende Nachrichten anhand von Regeln, Statistiken und externen Diensten.
  
Port: 11333/tcp (Standardport für Worker-Dienste)  

Rspamd Controller

  • Der Rspamd Controller stellt eine API für Konfiguration, Statistiken und manuelles Training des Filters zur Verfügung.
  
Port: 11334/tcp (Standardport für den Controller)  

Passwort für den Rspamd Controller und Port nach außen öffnen

Passwort erzeugen
 rspamadm pw
Enter passphrase: 
$2$mqbbp8yb4fz8febgpxk7rb4db9p5njwg$xior3gxjbuc76bhsq4rapq7x98cssrm9qkr49kwapgdsahmpzjny
In der Worker Datei eintragen
Port an allen Interfaces lauschen lassen
 cat /etc/rspamd/override.d/worker-controller.inc
 
password = "$2$mqbbp8yb4fz8febgpxk7rb4db9p5njwg$xior3gxjbuc76bhsq4rapq7x98cssrm9qkr49kwapgdsahmpzjny";
bind_socket ="*:11334";

Restart

 systemctl restart rspamd

Zugriff auf das Webinterface

Rspamd-1.png

Milters

  • Milters sind Mail-Filter, die über das Milter-Protokoll mit MTA-Software wie Postfix oder Sendmail kommunizieren.
  • Sie ermöglichen die Verarbeitung und Filterung von E-Mails in Echtzeit, bevor sie zugestellt werden.
  • Milter werden häufig für Spam-Filterung, Virenscans und Inhaltsüberprüfungen eingesetzt.

Einbinden in Postfix

 postconf -e "smtpd_milters=inet:127.0.0.1:11332"
 postconf -e "non_smtpd_milters=inet:127.0.0.1:11332"
 postfix reload

Gtube Testmail

 swaks --to root@localhost --server 127.0.0.1 --data "Subject: spam test XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"

Resultat

Rspamd-2.png

Die Logs

 journalctl -u postfix | grep cleanup
Mar 18 19:21:22 mail.it113.int postfix/cleanup[7407]: 88BDDE0792: milter-reject: END-OF-MESSAGE from localhost[127.0.0.1]: 5.7.1 Gtube pattern; from=<root@mail.it113.int> to=<martha@mail.it113.int>
Mar 18 19:21:22 mail.it113.int postfix/cleanup[7407]: 88BDDE0792: to=<martha@mail.it113.int>, orig_to=<martha>, relay=none, delay=0.19, delays=0.19/0/0/0, dsn=5.7.1, status=bounced (Gtube pattern)
Mar 18 19:21:22 mail.it113.int postfix/cleanup[7410]: B3D24E07C2: message-id=<20250318182122.B3D24E07C2@mail.it113.int>

Restart

  • systemctl restart rspamd

RBL-Integration in Rspamd und Postfix (Proof of Concept)

Rspamd mit lokaler RBL

Configuration

 vi /etc/rspamd/local.d/multimap.conf
blacklist_ip {
    type = "ip";
    map = "/etc/rspamd/local.d/local_rbl.txt";
    symbol = "LOCAL_RBL_HIT";
    action = "reject";
    description = "Lokale RBL-Hit";
}

Blackliste

 echo 10.88.113.21 > /etc/rspamd/local.d/local_rbl.txt 

Rspamd neustarten

 systemctl restart rspamd

Tests

postiv
 echo hallo welt | rspamc -i 10.88.113.22
Results for file: stdin (0 seconds)
[Metric: default]
Action: add header
negativ
 echo hallo welt | rspamc -i 10.88.113.21
Results for file: stdin (0 seconds)
[Metric: default]
Action: reject
Symbol: LOCAL_RBL_HIT

ClamAV-Integration in Rspamd (UNIX Socket)

Diese Dokumentation beschreibt die Anbindung von ClamAV über einen lokalen UNIX Socket an Rspamd. Dadurch entfällt die Nutzung eines TCP-Ports und die Kommunikation bleibt lokal und stabil.

ClamAV Konfiguration

Datei: /etc/clamav/clamd.conf

# TCP deaktiviert
#TCPSocket 3310
#TCPAddr 127.0.0.1

# UNIX Socket
LocalSocket /run/clamav/clamd.ctl
LocalSocketMode 666

Rspamd Konfiguration

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

enabled = true;
clamav {
    type = "clamav";
    symbol = "CLAM_VIRUS";
    servers = "/run/clamav/clamd.ctl";
    scan_text_mime = true;
    scan_mime_parts = true;
    min_size = 0;
    scan_unauthenticated = true;
    stream = true;
    score = 20.0;
}

Validierung

Erstellung der Test-E-Mail

Datei: /tmp/virus.eml

From: Test <test@it213.int>
To: Root <root@it213.int>
Subject: EICAR Test
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="Grenzlinie"

--Grenzlinie
Content-Type: text/plain; charset="utf-8"

Antivirus Testmail.

--Grenzlinie
Content-Type: application/com-file; name="eicar.com"
Content-Disposition: attachment; filename="eicar.com"
Content-Transfer-Encoding: 7bit

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

--Grenzlinie--

Testlauf

 rspamc --ip 1.2.3.4 /tmp/virus.eml

Ein erfolgreicher Scan wird durch das Symbol CLAM_VIRUS bestätigt.

Fehlerdiagnose und Administration

Protokolldateien überwachen

  • /var/log/rspamd/rspamd.log
  • /var/log/clamav/clamav.log
  • /var/log/clamav/freshclam.log
  • journalctl -u clamav-daemon -u rspamd

Live:

tail -f /var/log/rspamd/rspamd.log | grep -E "antivirus|clamav"

Netzwerk-Ports und Sockets

  • Port 11333: Rspamd Worker
  • Port 11334: Rspamd Controller
  • Port 6379: Redis
ss -ltpn | grep -E "11333|11334|6379"

Redis Datenbank bereinigen

redis-cli flushall

Manueller Virenscan

clamdscan /tmp/virus.eml

Aktualisierung der Virendefinitionen

systemctl status clamav-freshclam
systemctl stop clamav-freshclam
freshclam
systemctl start clamav-freshclam

Prüfung der Dienstkonfiguration

rspamadm configtest

Rspamd kommuniziert mit ClamAV?

Cache leeren
 redis-cli flushall
 systemctl restart rspamd
UNIX Socket Debug
 apt install strace
 strace -p $(pidof clamd) -e trace=network
TCP Debug (optional)
 apt install tcpdump
 tcpdump -ni lo port 3310