Rspamd Einrichten: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(18 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
=Rspamd und ClamAV installieren=   
 
=Rspamd und ClamAV installieren=   
 
==Debian/Ubuntu==   
 
==Debian/Ubuntu==   
apt install rspamd clamav-daemon clamav-freshclam redis
+
  apt install rspamd clamav-daemon clamav-freshclam redis-server swaks
  
 
==RHEL/CentOS==   
 
==RHEL/CentOS==   
dnf install rspamd clamav clamav-update redis
+
  dnf install rspamd clamav clamav-update redis swaks
=Enablen und Startend er Dienste=
+
 
systemctl enable rspamd --now
+
=Enablen und Starten der Dienste=
systemctl enable clamav-daemon --now
+
  systemctl enable rspamd --now
 +
  systemctl enable clamav-daemon --now
 +
  systemctl enable redis-server --now
  
 
=== Redis-Anbindung (Das Gedächtnis von Rspamd) ===
 
=== 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.
 
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 ====
 
==== 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.
 
Rspamd benötigt einen zentralen Ort, an dem die Server-Adresse von Redis definiert ist. Dies geschieht üblicherweise in einer lokalen Konfigurationsdatei.
  
Zeile 30: Zeile 23:
 
servers = "127.0.0.1:6379";
 
servers = "127.0.0.1:6379";
 
</pre>
 
</pre>
 
 
 
==== 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 ====
 
==== 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.
 
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 start redis-server
systemctl enable redis-server.service
+
  systemctl enable redis-server.service
  
 
=Läuft alles=
 
=Läuft alles=
systemctl status rspamd
+
  systemctl status rspamd
systemctl status clamav-daemon
+
  systemctl status clamav-daemon
systemctl status redis
+
  systemctl status redis-server
  
 
=Dienste und Ports von Rspamd=   
 
=Dienste und Ports von Rspamd=   
Zeile 59: Zeile 41:
 
Port: 11332/tcp (Standardport für Proxy-Dienste)   
 
Port: 11332/tcp (Standardport für Proxy-Dienste)   
 
</pre>   
 
</pre>   
 +
 
==Rspamd Worker==   
 
==Rspamd Worker==   
 
*Der Rspamd Worker führt die eigentliche Spam-Analyse durch und verarbeitet eingehende Nachrichten anhand von Regeln, Statistiken und externen Diensten.   
 
*Der Rspamd Worker führt die eigentliche Spam-Analyse durch und verarbeitet eingehende Nachrichten anhand von Regeln, Statistiken und externen Diensten.   
Zeile 64: Zeile 47:
 
Port: 11333/tcp (Standardport für Worker-Dienste)   
 
Port: 11333/tcp (Standardport für Worker-Dienste)   
 
</pre>   
 
</pre>   
 +
 
==Rspamd Controller==   
 
==Rspamd Controller==   
 
*Der Rspamd Controller stellt eine API für Konfiguration, Statistiken und manuelles Training des Filters zur Verfügung.   
 
*Der Rspamd Controller stellt eine API für Konfiguration, Statistiken und manuelles Training des Filters zur Verfügung.   
Zeile 69: Zeile 53:
 
Port: 11334/tcp (Standardport für den Controller)   
 
Port: 11334/tcp (Standardport für den Controller)   
 
</pre>
 
</pre>
=Passwort für den Rspamd Controller und Port nach aussen öffen=
+
 
 +
=Passwort für den Rspamd Controller und Port nach außen öffnen=
 
;Passwort erzeugen
 
;Passwort erzeugen
rspamadm pw
+
  rspamadm pw
 +
 
 
  Enter passphrase:  
 
  Enter passphrase:  
 
  $2$mqbbp8yb4fz8febgpxk7rb4db9p5njwg$xior3gxjbuc76bhsq4rapq7x98cssrm9qkr49kwapgdsahmpzjny
 
  $2$mqbbp8yb4fz8febgpxk7rb4db9p5njwg$xior3gxjbuc76bhsq4rapq7x98cssrm9qkr49kwapgdsahmpzjny
 +
 
;In der Worker Datei eintragen
 
;In der Worker Datei eintragen
 
;Port an allen Interfaces lauschen lassen
 
;Port an allen Interfaces lauschen lassen
cat /etc/rspamd/override.d/worker-controller.inc
+
  cat /etc/rspamd/override.d/worker-controller.inc
 
    
 
    
password = "$2$mqbbp8yb4fz8febgpxk7rb4db9p5njwg$xior3gxjbuc76bhsq4rapq7x98cssrm9qkr49kwapgdsahmpzjny";
+
<pre>
bind_socket ="*:11334";
+
password = "$2$mqbbp8yb4fz8febgpxk7rb4db9p5njwg$xior3gxjbuc76bhsq4rapq7x98cssrm9qkr49kwapgdsahmpzjny";
 +
bind_socket ="*:11334";
 +
</pre>
  
 
=Restart=
 
=Restart=
systemctl restart rspamd
+
  systemctl restart rspamd
  
 
=Zugriff auf das Webinterface=
 
=Zugriff auf das Webinterface=
 
*http://IP-Mailserver:11334
 
*http://IP-Mailserver:11334
 
[[Datei:Rspamd-1.png]]
 
[[Datei:Rspamd-1.png]]
 +
 
=Milters=   
 
=Milters=   
 
*Milters sind Mail-Filter, die über das Milter-Protokoll mit MTA-Software wie Postfix oder Sendmail kommunizieren.   
 
*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.   
 
*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.
 
*Milter werden häufig für Spam-Filterung, Virenscans und Inhaltsüberprüfungen eingesetzt.
 +
 
=Einbinden in Postfix=
 
=Einbinden in Postfix=
postconf -e "smtpd_milters=inet:127.0.0.1:11332"
+
  postconf -e "smtpd_milters=inet:127.0.0.1:11332"
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
  
 
=Gtube Testmail=
 
=Gtube Testmail=
*echo 'XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X' | mail -s "Boese Mail" martha
+
  swaks --to root@localhost --server 127.0.0.1 --body "XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X"
 +
 
 
=Resultat=
 
=Resultat=
 
[[Datei:Rspamd-2.png]]
 
[[Datei:Rspamd-2.png]]
 +
 
=Die Logs=
 
=Die Logs=
journalctl -u postfix | grep cleanup
+
  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: 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[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)
Zeile 108: Zeile 102:
 
=Restart=
 
=Restart=
 
*systemctl restart rspamd
 
*systemctl restart rspamd
 +
 
=RBL-Integration in Rspamd und Postfix (Proof of Concept)=   
 
=RBL-Integration in Rspamd und Postfix (Proof of Concept)=   
 
==Rspamd mit lokaler RBL==   
 
==Rspamd mit lokaler RBL==   
 +
 
===Configuration===
 
===Configuration===
 
+
  vi /etc/rspamd/local.d/multimap.conf
vi /etc/rspamd/local.d/multimap.conf
 
  
 
<pre>
 
<pre>
Zeile 123: Zeile 118:
 
}
 
}
 
</pre>
 
</pre>
 +
 
===Blackliste===
 
===Blackliste===
echo 10.88.113.21 > /etc/rspamd/local.d/local_rbl.txt  
+
  echo 10.88.201.3 > /etc/rspamd/local.d/local_rbl.txt
 +
 
 
===Rspamd neustarten===   
 
===Rspamd neustarten===   
systemctl restart rspamd
+
  systemctl restart rspamd
 +
 
 
===Tests===
 
===Tests===
 
;postiv
 
;postiv
echo hallo welt | rspamc -i 10.88.113.22
+
  echo hallo welt | rspamc -i 10.88.113.22
  
 
<pre>
 
<pre>
Zeile 135: Zeile 133:
 
[Metric: default]
 
[Metric: default]
 
Action: add header
 
Action: add header
Spam: true
 
Score: 7.90 / 15.00
 
Symbol: ARC_NA (0.00)
 
Symbol: MIME_GOOD (-0.10)[text/plain]
 
Symbol: MIME_TRACE (0.00)[0:+]
 
Symbol: MISSING_DATE (1.00)
 
Symbol: MISSING_FROM (2.00)
 
Symbol: MISSING_MID (2.50)
 
Symbol: MISSING_SUBJECT (0.50)
 
Symbol: MISSING_TO (2.00)
 
Symbol: RCVD_COUNT_ZERO (0.00)[0]
 
Message-ID: undef
 
 
</pre>
 
</pre>
 +
 
;negativ
 
;negativ
*echo hallo welt | rspamc -i 10.88.113.21
+
  echo hallo welt | rspamc -i 10.88.201.3
 +
 
 
<pre>
 
<pre>
 
Results for file: stdin (0 seconds)
 
Results for file: stdin (0 seconds)
 
[Metric: default]
 
[Metric: default]
 
Action: reject
 
Action: reject
Spam: true
+
Symbol: LOCAL_RBL_HIT
Score: -0.10 / 15.00
 
Symbol: ARC_NA (0.00)
 
Symbol: LOCAL_RBL_HIT (0.00)[10.88.113.21]
 
Symbol: MIME_GOOD (-0.10)[text/plain]
 
Symbol: MIME_TRACE (0.00)[0:+]
 
Message-ID: undef
 
Message - smtp_message: Matched map: LOCAL_RBL_HIT
 
 
</pre>
 
</pre>
  
== Rspamd Schwellenwerte (Actions) ==
+
=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.
  
Die Bewertung erfolgt über Scores. Diese werden in der Datei <code>/etc/rspamd/local.d/actions.conf</code> definiert.
+
== ClamAV Konfiguration ==
 
 
{| class="wikitable"
 
! Aktion !! Empfohlener Score !! Bedeutung
 
|-
 
| '''reject'''
 
| 15.0
 
| Die Mail wird hart abgelehnt (SMTP 5xx).
 
|-
 
| '''add_header'''
 
| 6.0
 
| Die Mail wird zugestellt, erhält aber einen Header (z.B. X-Spam: Yes).
 
|-
 
| '''greylist'''
 
| 4.0
 
| Der Absender wird temporär abgewiesen (Soft-Fail). Ein echter Mailserver versucht es erneut.
 
|-
 
| '''no action'''
 
| < 4.0
 
| Die Mail gilt als sauber (Ham).
 
|}
 
 
 
=== Kurzer Check der Funktionsweise ===
 
Um zu sehen, welche Symbole Rspamd einer Mail vergibt, ohne eine echte Mail zu senden:
 
<pre>rspamc < /pfad/zu/einer/test.eml</pre>
 
Das Tool '''rspamc''' gibt den kompletten Scan-Report direkt auf der Konsole aus.
 
 
 
= ClamAV-Integration in Rspamd (TCP-Modus) =
 
 
 
Diese Dokumentation beschreibt die Konfiguration von ClamAV ueber Systemd-Sockets und die Anbindung an Rspamd unter Debian/Ubuntu.
 
 
 
== Systemd-Infrastruktur ==
 
 
 
Um ClamAV via TCP erreichbar zu machen, muessen die Socket-Unit und vorbereitende Dienst-Einstellungen angepasst werden.
 
 
 
=== /etc/systemd/system/clamav-daemon.socket ===
 
Die Socket-Unit wird so konfiguriert, dass sie auf Port 3310 lauscht.
 
<pre>
 
[Unit]
 
Description=Socket for Clam AntiVirus userspace daemon
 
Documentation=man:clamd(8) man:clamd.conf(5) https://docs.clamav.net/
 
# Datenbank-Check vor Socket-Aktivierung
 
ConditionPathExistsGlob=/var/lib/clamav/main.{c[vl]d,inc}
 
ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc}
 
 
 
[Socket]
 
# Definition des TCP-Sockets fuer Rspamd Kommunikation
 
ListenStream=127.0.0.1:3310
 
SocketUser=clamav
 
SocketGroup=clamav
 
RemoveOnStop=True
 
  
[Install]
+
Datei: /etc/clamav/clamd.conf 
WantedBy=sockets.target
 
</pre>
 
  
=== /etc/systemd/system/clamav-daemon.service.d/extend.conf ===
 
Stellt sicher, dass notwendige Verzeichnisse im fluechtigen Speicher (/run) existieren.
 
 
<pre>
 
<pre>
[Service]
+
# TCP deaktiviert
# Sicherstellung der Verzeichnisstruktur im RAM-Disk (/run) vor Dienststart
+
#TCPSocket 3310
ExecStartPre=-/bin/mkdir -p /run/clamav
+
#TCPAddr 127.0.0.1
ExecStartPre=/bin/chown clamav /run/clamav
 
</pre>
 
  
=== Aktivierung der Systemd-Anpassungen ===
+
# UNIX Socket
<pre>
+
LocalSocket /var/run/clamav/clamd.ctl
systemctl daemon-reload
+
LocalSocketMode 666
systemctl restart clamav-daemon.socket
 
systemctl restart clamav-daemon.service
 
# Verifizierung des Sockets
 
ss -ltpn | grep 3310
 
</pre>
 
 
 
== ClamAV Konfiguration ==
 
 
 
Die Hauptkonfiguration von ClamAV muss auf den TCP-Modus abgestimmt sein und ausreichende Puffer fuer den Datenstream bieten.
 
 
 
=== /etc/clamav/clamd.conf ===
 
<pre>
 
# Manuell angepasst fuer Rspamd nINSTREAM
 
TCPSocket 3310
 
TCPAddr 127.0.0.1
 
User clamav
 
ScanMail true
 
ScanArchive true
 
ArchiveBlockEncrypted false
 
MaxDirectoryRecursion 15
 
FollowDirectorySymlinks false
 
FollowFileSymlinks true
 
ReadTimeout 180
 
MaxThreads 12
 
MaxConnectionQueueLength 15
 
LogSyslog false
 
LogRotate true
 
LogFacility LOG_LOCAL6
 
LogClean false
 
LogVerbose false
 
DatabaseDirectory /var/lib/clamav
 
OfficialDatabaseOnly false
 
SelfCheck 3600
 
Foreground false
 
Debug false
 
ScanPE true
 
MaxEmbeddedPE 10M
 
ScanOLE2 true
 
ScanPDF true
 
ScanHTML true
 
MaxHTMLNormalize 10M
 
MaxHTMLNoTags 2M
 
MaxScriptNormalize 5M
 
MaxZipTypeRcg 1M
 
ScanSWF true
 
ExitOnOOM false
 
LeaveTemporaryFiles false
 
AlgorithmicDetection true
 
ScanELF true
 
IdleTimeout 30
 
CrossFilesystems true
 
PhishingSignatures true
 
PhishingScanURLs true
 
ExtendedDetectionInfo true
 
AllowAllMatchScan true
 
ForceToDisk false
 
DisableCertCheck false
 
DisableCache false
 
MaxScanTime 120000
 
MaxScanSize 100M
 
MaxFileSize 25M
 
MaxRecursion 16
 
MaxFiles 10000
 
# Wichtig fuer Rspamd Integration zur Vermeidung von "Size limit exceeded"
 
StreamMaxLength 100M
 
LogFile /var/log/clamav/clamav.log
 
LogTime true
 
Bytecode true
 
BytecodeSecurity TrustSigned
 
BytecodeTimeout 60000
 
 
</pre>
 
</pre>
  
 
== Rspamd Konfiguration ==
 
== Rspamd Konfiguration ==
  
Rspamd greift als Client auf den ClamAV-Socket zu. Die Konfiguration erfolgt ueber Overrides und lokale Includes.
+
Datei: /etc/rspamd/override.d/antivirus.conf 
  
=== /etc/rspamd/override.d/antivirus.conf ===
 
Erzwingt den Scan auch fuer unauthentifizierte lokale Absender und winzige Dateien.
 
 
<pre>
 
<pre>
 
enabled = true;
 
enabled = true;
Zeile 317: Zeile 171:
 
     type = "clamav";
 
     type = "clamav";
 
     symbol = "CLAM_VIRUS";
 
     symbol = "CLAM_VIRUS";
     servers = "127.0.0.1:3310";
+
     servers = "/var/run/clamav/clamd.ctl";
    # Erlaubt das Scannen von reinem Text (Body)
 
 
     scan_text_mime = true;
 
     scan_text_mime = true;
 
     scan_mime_parts = true;
 
     scan_mime_parts = true;
    # Scannt auch winzige Dateien (EICAR ist < 100 Bytes)
 
 
     min_size = 0;
 
     min_size = 0;
    # Ignoriert, dass die Mail von localhost/trusted IP kommt
 
 
     scan_unauthenticated = true;
 
     scan_unauthenticated = true;
    # Technische Uebertragung via nINSTREAM
 
 
     stream = true;
 
     stream = true;
    # Das Symbol soll sofort zum Reject fuehren
 
 
     score = 20.0;
 
     score = 20.0;
 
}
 
}
</pre>
 
 
=== Weitere Rspamd-Module ===
 
Unter /etc/rspamd/local.d/ werden Logging, Redis und RBL-Dienste definiert.
 
 
==== logging.inc ====
 
<pre>
 
debug_modules = ["antivirus", "clamav"];
 
</pre>
 
 
==== redis.conf ====
 
<pre>
 
servers = "127.0.0.1";
 
</pre>
 
 
==== rbl.conf ====
 
<pre>
 
enabled = false;
 
</pre>
 
 
==== worker-controller.inc (WebUI) ====
 
<pre>
 
password = "$2$5dj6zn4mt56sbmh8nw944c41wt537tdb$z4op8fwmunpwhe7yzbm94wgeqsdq8ajgjc4zs387e5qxnzppw46y";
 
bind_socket ="*:11334";
 
</pre>
 
 
=== Aktivierung Rspamd ===
 
<pre>
 
rspamadm configtest
 
systemctl restart rspamd
 
redis-cli flushall
 
 
</pre>
 
</pre>
  
Zeile 367: Zeile 185:
 
=== Erstellung der Test-E-Mail ===
 
=== Erstellung der Test-E-Mail ===
 
Datei: /tmp/virus.eml
 
Datei: /tmp/virus.eml
 +
 
<pre>
 
<pre>
 
From: Test <test@it213.int>
 
From: Test <test@it213.int>
Zeile 390: Zeile 209:
  
 
=== Testlauf ===
 
=== Testlauf ===
<pre>
+
  rspamc --ip 1.2.3.4 /tmp/virus.eml
rspamc --ip 1.2.3.4 /tmp/virus.eml
 
</pre>
 
Ein erfolgreicher Scan wird durch das Symbol '''CLAM_VIRUS''' und die Aktion '''reject''' bestaetigt.
 
 
 
 
 
== Fehlerdiagnose und Administration: ClamAV & Rspamd ==
 
  
Diese Zusammenfassung dient als Spickzettel fuer die taegliche Administration und Fehlerbehebung.
+
Ein erfolgreicher Scan wird durch das Symbol CLAM_VIRUS bestätigt.
  
=== Protokolldateien ueberwachen ===
+
== Fehlerdiagnose und Administration ==
Die wichtigsten Dateien zur Fehlersuche:
 
  
* Rspamd Hauptlog: /var/log/rspamd/rspamd.log
+
=== Protokolldateien überwachen ===
* ClamAV Scanlog: /var/log/clamav/clamav.log
+
* /var/log/rspamd/rspamd.log
* ClamAV Update-Log: /var/log/clamav/freshclam.log
+
* /var/log/clamav/clamav.log
* System-Journal (fuer Service-Fehler): journalctl -u clamav-daemon -u rspamd
+
* /var/log/clamav/freshclam.log
 +
* journalctl -u clamav-daemon -u rspamd
  
Live-Ueberwachung der Scans:
+
Live:
 
<pre>
 
<pre>
 
tail -f /var/log/rspamd/rspamd.log | grep -E "antivirus|clamav"
 
tail -f /var/log/rspamd/rspamd.log | grep -E "antivirus|clamav"
Zeile 414: Zeile 227:
  
 
=== Netzwerk-Ports und Sockets ===
 
=== Netzwerk-Ports und Sockets ===
Folgende Ports muessen auf der lokalen Schnittstelle (localhost) aktiv sein:
+
* Port 11333: Rspamd Worker
 
+
* Port 11334: Rspamd Controller
* Port Drei-Drei-Eins-Null: ClamAV TCP-Socket (nINSTREAM)
+
* Port 6379: Redis
* Port Elf-Drei-Drei-Drei: Rspamd Proxy (Normaler Mailflow)
 
* Port Elf-Drei-Drei-Vier: Rspamd Controller (WebUI & API)
 
* Port Sechs-Drei-Sieben-Neun: Redis Key-Value Store
 
  
Pruefung mit dem Befehl ss:
 
 
<pre>
 
<pre>
ss -ltpn | grep -E "3310|11333|11334|6379"
+
ss -ltpn | grep -E "11333|11334|6379"
 
</pre>
 
</pre>
  
 
=== Redis Datenbank bereinigen ===
 
=== Redis Datenbank bereinigen ===
Wenn Rspamd unerwartete Bewertungen abgibt oder alte gelernte Daten (Bayes) stoeren, kann der Zwischenspeicher geleert werden:
 
 
 
<pre>
 
<pre>
# Loescht alle Daten in allen Redis-Datenbanken
 
 
redis-cli flushall
 
redis-cli flushall
 
</pre>
 
</pre>
  
 
=== Manueller Virenscan ===
 
=== Manueller Virenscan ===
Um zu pruefen, ob ClamAV arbeitet, ohne den Umweg ueber Rspamd zu gehen, nutzt man clamdscan oder sendet den Datenstrom direkt:
 
 
 
<pre>
 
<pre>
# Per clamdscan (nutzt die Konfiguration in /etc/clamav/clamd.conf)
 
 
clamdscan /tmp/virus.eml
 
clamdscan /tmp/virus.eml
 
# Direktes Senden an den TCP-Port (Test auf unterster Ebene)
 
(echo "nINSTREAM"; cat /tmp/virus.eml; echo "") | nc 127.0.0.1 3310
 
 
</pre>
 
</pre>
  
 
=== Aktualisierung der Virendefinitionen ===
 
=== Aktualisierung der Virendefinitionen ===
Das Werkzeug freshclam laeuft normalerweise als Hintergrunddienst. Manuelle Steuerung:
 
 
 
<pre>
 
<pre>
# Status des Update-Dienstes pruefen
 
 
systemctl status clamav-freshclam
 
systemctl status clamav-freshclam
 
# Update manuell erzwingen (Dienst muss vorher gestoppt werden)
 
 
systemctl stop clamav-freshclam
 
systemctl stop clamav-freshclam
 
freshclam
 
freshclam
Zeile 459: Zeile 254:
  
 
=== Prüfung der Dienstkonfiguration ===
 
=== Prüfung der Dienstkonfiguration ===
Bevor man Dienste neu startet, sollte immer die Syntax der Dateien geprueft werden:
 
 
 
<pre>
 
<pre>
 
rspamadm configtest
 
rspamadm configtest
 
</pre>
 
</pre>
 +
 +
=== Rspamd kommuniziert mit ClamAV? ===
 +
 +
;Cache leeren
 +
  redis-cli flushall
 +
 +
;UNIX Socket Debug
 +
  apt install strace
 +
  strace -p $(pidof clamd) -e trace=network
 +
 +
;TCP Debug (optional)
 +
  apt install tcpdump
 +
  tcpdump -ni lo port 3310

Aktuelle Version vom 23. März 2026, 12:00 Uhr

Rspamd und ClamAV installieren

Debian/Ubuntu

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

RHEL/CentOS

 dnf install rspamd clamav clamav-update redis 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.

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";

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 --body "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.201.3 > /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.201.3
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 /var/run/clamav/clamd.ctl
LocalSocketMode 666

Rspamd Konfiguration

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

enabled = true;
clamav {
    type = "clamav";
    symbol = "CLAM_VIRUS";
    servers = "/var/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
UNIX Socket Debug
 apt install strace
 strace -p $(pidof clamd) -e trace=network
TCP Debug (optional)
 apt install tcpdump
 tcpdump -ni lo port 3310