RSPAMD an WAZUH

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen

Rspamd mit Virenerkennung

Rspamd wird als Milter an Postfix angebunden und prüft jede Mail. Über das Antivirus-Modul bindet es ClamAV ein und weist verseuchte Mails ab.

Installation Rspamd

Repo-Werkzeuge
  • apt update
  • apt install -y lsb-release wget gpg
Signing-Key des offiziellen Rspamd-Repos
Repo eintragen
Rspamd und Redis installieren (Redis für Statistik/Cache)
  • apt update
  • apt install -y rspamd redis-server
Dienste aktivieren
  • systemctl enable --now redis-server
  • systemctl enable --now rspamd

Rspamd an Postfix anbinden

Ohne diese Anbindung läuft Rspamd zwar, wird von Postfix aber nie aufgerufen.

In die main.cf aufnehmen
  • vi /etc/postfix/main.cf
smtpd_milters = inet:127.0.0.1:11332
non_smtpd_milters = inet:127.0.0.1:11332
milter_default_action = accept
milter_protocol = 6
Wichtig
Der smtps-Block (Port 465) muss den Milter explizit bekommen

Roundcube liefert über 465 ein. Ohne diese Zeile wird Rspamd für Webmail-Mail nicht aufgerufen, also auch nicht für die Virenprüfung.

  • vi /etc/postfix/master.cf
smtps     inet  n       -       y       -       -       smtpd
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_milters=inet:127.0.0.1:11332
Postfix neu laden
  • systemctl restart postfix

Installation ClamAV

Scanner und Daemon installieren
  • apt install -y clamav clamav-daemon
Signaturen holen (clamd startet sonst nicht)
  • systemctl stop clamav-freshclam
  • freshclam
  • systemctl start clamav-freshclam
  • systemctl enable --now clamav-daemon
Prüfen, dass der Socket da ist
  • ls -l /run/clamav/clamd.ctl

Rspamd darf an den clamd-Socket

Der Rspamd-User muss in die clamav-Gruppe, sonst kein Zugriff auf den Unix-Socket.

  • usermod -a -G clamav _rspamd

Antivirus-Modul konfigurieren

Datei anlegen
  • vi /etc/rspamd/local.d/antivirus.conf
clamav {
    type = "clamav";
    symbol = "CLAM_VIRUS";
    servers = "/run/clamav/clamd.ctl";

    # Virus gefunden => harte Ablehnung, unabhängig vom Spam-Score
    action  = "reject";
    message = '${SCANNER}: Virus gefunden: "${VIRUS}"';

    scan_mime_parts = true;
    scan_text_mime  = false;
    scan_image_mime = false;
    max_size = 20000000;

    # EICAR sauber als eigenes Symbol erkennbar machen
    patterns {
        JUST_EICAR = '^Eicar-Test-Signature$';
    }
}
Syntax prüfen und neu starten
  • rspamadm configtest
  • systemctl restart clamav-daemon
  • systemctl restart rspamd

Funktionstest

1. ClamAV direkt prüfen (muss "Eicar-Test-Signature FOUND" zeigen)
  • echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' | clamdscan -
2. Mail mit EICAR-Anhang an einen Lab-User schicken
  • echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/eicar.txt
  • mail -s "Rechnung" -A /tmp/eicar.txt martha@it2XX.int < /dev/null
3. Treffer im Rspamd-Log
  • tail -f /var/log/rspamd/rspamd.log | grep CLAM_VIRUS

Erwartete Logzeile:

CLAM_VIRUS(0.00){Eicar-Test-Signature;} ... action: reject

RSPAMD an WAZUH

Rspamd weist virenbehaftete Mails am Milter ab und schreibt den Fund als Symbol CLAM_VIRUS ins Log. Der Wazuh-Agent auf dem Mailserver liest dieses Log, ein Decoder zerlegt die Zeile, eine Regel macht daraus einen Alert.

Da der Alert auf Level 12 liegt (über dem email_alert_level 7), verschickt der Manager automatisch eine Alarmmail ins soc-Postfach — der Bogel Detection → Response schließt sich also bis nach Roundcube.

Agent: rspamd.log als Logquelle

Der Agent liest das Rspamd-Log standardmäßig nicht. Wir ergänzen es als localfile.

In /var/ossec/etc/ossec.conf ergänzen (auf dem Mailserver)
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/rspamd/rspamd.log</location>
</localfile>
Agent neu starten
  • systemctl restart wazuh-agent

Manager: Decoder

Der Decoder greift auf die CLAM_VIRUS-Zeile und extrahiert den Virusnamen.

In /var/ossec/etc/decoders/local_decoder.xml ergänzen (auf dem Manager)
<decoder name="rspamd-clamav">
  <prematch>CLAM_VIRUS</prematch>
  <regex type="pcre2">CLAM_VIRUS\([^)]*\)\{([^;]+);</regex>
  <order>virus_name</order>
</decoder>

Manager: Regel

In /var/ossec/etc/rules/local_rules.xml ergänzen (auf dem Manager)
<group name="rspamd,clamav,">
  <rule id="100200" level="12">
    <decoded_as>rspamd-clamav</decoded_as>
    <description>Rspamd/ClamAV: Virus in E-Mail erkannt und abgewiesen ($(virus_name))</description>
    <group>virus,malware,attack,</group>
  </rule>
</group>
Manager neu starten
  • systemctl restart wazuh-manager

Decoder und Regel testen

Vor dem scharfen Test prüfen wir die Logik offline mit einer echten Logzeile.

Eine CLAM_VIRUS-Zeile aus dem Log holen
  • grep CLAM_VIRUS /var/log/rspamd/rspamd.log | tail -1
Die Zeile durch wazuh-logtest jagen (auf dem Manager)
  • /var/ossec/bin/wazuh-logtest
  • Die Zeile einfügen — erwartet wird: Decoder rspamd-clamav, Rule 100200, Level 12, Feld virus_name

Scharfer Test (EICAR-Mail)

EICAR-Mail an einen Lab-User schicken
echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > /tmp/eicar.txt
mail -s "Rechnung" -A /tmp/eicar.txt martha@it213.xinmen.de < /dev/null
Alert auf dem Manager mitlesen
  • tail -f /var/ossec/logs/alerts/alerts.log | grep -A5 CLAM_VIRUS
  • Erwartet: Rule 100200, Level 12, mit dem Virusnamen Eicar-Test-Signature
  • Zusätzlich landet die Alarmmail im soc-Postfach und ist in Roundcube sichtbar