Zum Inhalt

# Rspamd

Rspamd wird für die AV-Verarbeitung, DKIM-Signierung und SPAM-Verarbeitung verwendet. Es ist ein leistungsfähiges und schnelles Filtersystem. Für eine ausführlichere Dokumentation über Rspamd besuchen Sie bitte die [Rspamd Dokumentation] (https://rspamd.com/doc/index.html).

## Spam & Ham lernen

Rspamd lernt, ob es sich um Spam oder Ham handelt, wenn Sie eine Nachricht in oder aus dem Junk-Ordner in ein anderes Postfach als den Papierkorb verschieben. Dies wird durch die Verwendung des Sieve-Plugins "sieve_imapsieve" und Parser-Skripte erreicht.

Rspamd liest auch automatisch Mails, wenn eine hohe oder niedrige Punktzahl erkannt wird (siehe https://rspamd.com/doc/configuration/statistic.html#autolearning). Wir haben das Plugin so konfiguriert, dass es ein vernünftiges Verhältnis zwischen Spam- und Ham-Learnings beibehält.

Die Bayes-Statistiken werden in Redis als Schlüssel `BAYES_HAM` und `BAYES_SPAM` gespeichert.

Neben Bayes wird ein lokaler Fuzzy-Speicher verwendet, um wiederkehrende Muster in Texten oder Bildern zu lernen, die auf Ham oder Spam hinweisen.

Sie können auch die Web-UI von Rspamd verwenden, um Ham und/oder Spam zu lernen oder bestimmte Einstellungen von Rspamd anzupassen.

### Spam oder Ham aus bestehendem Verzeichnis lernen

Sie können einen Einzeiler verwenden, um Mails im Klartextformat (unkomprimiert) zu lernen:

    # Ham
    for file in /my/folder/cur/*; do docker exec -i $(docker-compose ps -q rspamd-mailcow) rspamc learn_ham < $file; done
    # Spam
    for file in /my/folder/.Junk/cur/*; do docker exec -i $(docker-compose ps -q rspamd-mailcow) rspamc learn_spam < $file; done

Erwägen Sie, einen lokalen Ordner als neues Volume an `rspamd-mailcow` in `docker-compose.yml` anzuhängen und die gegebenen Dateien innerhalb des Containers zu lernen. Dies kann als Workaround verwendet werden, um komprimierte Daten mit zcat zu parsen. Beispiel:

``bash for file in /data/old_mail/.Junk/cur/*; do rspamc learn_spam < zcat $file; done

    ### Gelernte Daten zurücksetzen (Bayes, Neural)

    Sie müssen die Schlüssel in Redis löschen, um die gelernten Daten zurückzusetzen, also erstellen Sie jetzt eine Kopie Ihrer Redis-Datenbank:

    **Backup Datenbank**

    ```bash
    # Es ist besser, Redis zu stoppen, bevor Sie die Datei kopieren.
    cp /var/lib/docker/volumes/mailcowdockerized_redis-vol-1/_data/dump.rdb /root/

Bayes-Daten zurücksetzen

    docker-compose exec redis-mailcow sh -c 'redis-cli --scan --pattern BAYES_* | xargs redis-cli del'
    docker-compose exec redis-mailcow sh -c 'redis-cli --scan --pattern RS* | xargs redis-cli del'

Neurale Daten zurücksetzen

    docker-compose exec redis-mailcow sh -c 'redis-cli --scan --pattern rn_* | xargs redis-cli del'

Fuzzy-Daten zurücksetzen

    # Wir müssen zuerst das redis-cli eingeben:
    docker-compose exec redis-mailcow redis-cli
    # In redis-cli:
    127.0.0.1:6379> EVAL "for i, name in ipairs(redis.call('KEYS', ARGV[1])) do redis.call('DEL', name); end" 0 fuzzy*

Info

Wenn redis-cli sich beschwert über...

    (error) ERR wrong number of arguments for 'del' command

...das Schlüsselmuster nicht gefunden wurde und somit keine Daten zum Löschen vorhanden sind - ist es in Ordnung.

## CLI-Werkzeuge

``bash docker-compose exec rspamd-mailcow rspamc --help docker-compose exec rspamd-mailcow rspamadm --help

    ## Greylisting deaktivieren

    Nur Nachrichten mit einer höheren Punktzahl werden als Greylisting betrachtet (soft rejected). Es ist schlechte Praxis, Greylisting zu deaktivieren.

    Sie können Greylisting serverweit durch Editieren deaktivieren:

    `{mailcow-dir}/data/conf/rspamd/local.d/greylist.conf`

    Fügen Sie die Zeile hinzu:

    ```cpp
    enabled = false;

Speichern Sie die Datei und starten Sie "rspamd-mailcow" neu: `docker-compose restart rspamd-mailcow`

## Spamfilter-Schwellenwerte (global)

Jeder Benutzer kann seine Spam-Bewertung individuell ändern. Um eine neue serverweite Grenze zu definieren, editieren Sie `data/conf/rspamd/local.d/actions.conf`:

    reject = 15;
    add_header = 8;
    greylist = 7;

Speichern Sie die Datei und starten Sie "rspamd-mailcow" neu: `docker-compose restart rspamd-mailcow`

Bestehende Einstellungen der Benutzer werden nicht überschrieben!

Um benutzerdefinierte Schwellenwerte zurückzusetzen, führen Sie aus:

    source mailcow.conf
    docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e "delete from filterconf where option = 'highspamlevel' or option = 'lowspamlevel';"
    # oder:
    # docker-compose exec mysql-mailcow mysql -umailcow -p$DBPASS mailcow -e "delete from filterconf where option = 'highspamlevel' or option = 'lowspamlevel' and object = 'only-this-mailbox@example.org';"

## Benutzerdefinierte Ablehnungsnachrichten

Die Standard-Spam-Reject-Meldung kann durch Hinzufügen einer neuen Datei `data/conf/rspamd/override.d/worker-proxy.custom.inc` mit dem folgenden Inhalt geändert werden:

    reject_message = "Meine eigene Ablehnungsnachricht";

Speichern Sie die Datei und starten Sie Rspamd neu: `docker-compose restart rspamd-mailcow`.

Waehrend das oben genannte fuer abgelehnte Mails mit einem hohen Spam-Score funktioniert, ignorieren Prefilter-Aktionen diese Einstellung. Für diese Karten muss das Multimap-Modul in Rspamd angepasst werden:

1. Finden Sie das Prefilet-Reject-Symbol, für das Sie die Nachricht ändern wollen, führen Sie dazu aus: `grep -R "SYMBOL_YOU_WANT_TO_ADJUST" /opt/mailcow-dockerized/data/conf/rspamd/`

2. Fügen Sie Ihre eigene Nachricht als neue Zeile hinzu:

    GLOBAL_RCPT_BL {
      Typ = "rcpt";
      map = "${LOCAL_CONFDIR}/custom/global_rcpt_blacklist.map";
      regexp = true;
      prefilter = true;
      action = "reject";
      message = "Der Versand von E-Mails an diesen Empfänger ist durch postmaster@your.domain verboten";
    }

1. Speichern Sie die Datei und starten Sie Rspamd neu: `docker-compose restart rspamd-mailcow`.

## Whitelist für bestimmte ClamAV-Signaturen

Es kann vorkommen, dass legitime (saubere) Mails von ClamAV blockiert werden (Rspamd markiert die Mail mit `VIRUS_FOUND`). So werden beispielsweise interaktive PDF-Formularanhänge standardmäßig blockiert, da der eingebettete Javascript-Code für schädliche Zwecke verwendet werden könnte. Überprüfen Sie dies anhand der clamd-Protokolle, z.B.:

    docker-compose logs clamd-mailcow | grep "FOUND"

Diese Zeile bestätigt, dass ein solcher identifiziert wurde:

    clamd-mailcow_1 | Sat Sep 28 07:43:24 2019 -> instream(local): PUA.Pdf.Trojan.EmbeddedJavaScript-1(e887d2ac324ce90750768b86b63d0749:363325) FOUND

Um diese spezielle Signatur auf die Whitelist zu setzen (und den Versand dieses Dateityps im Anhang zu ermöglichen), fügen Sie sie der ClamAV-Signatur-Whitelist-Datei hinzu:

    echo 'PUA.Pdf.Trojan.EmbeddedJavaScript-1' >> data/conf/clamav/whitelist.ign2

Dann starten Sie den clamd-mailcow Service Container in der mailcow UI oder mit docker-compose neu:

    docker-compose restart clamd-mailcow

Bereinigen Sie zwischengespeicherte ClamAV-Ergebnisse in Redis:

    # docker-compose exec redis-mailcow /bin/sh
    /data # redis-cli KEYS rs_cl* | xargs redis-cli DEL
    /data # exit

## Verwerfen statt zurückweisen

Wenn Sie eine Nachricht stillschweigend verwerfen wollen, erstellen oder bearbeiten Sie die Datei `data/conf/rspamd/override.d/worker-proxy.custom.inc` und fügen Sie den folgenden Inhalt hinzu:

    discard_on_reject = true;

Starten Sie Rspamd neu:

    docker-compose restart rspamd-mailcow

## Lösche alle Ratelimit-Schlüssel

Wenn Sie das UI nicht verwenden wollen und stattdessen alle Schlüssel in der Redis-Datenbank löschen wollen, können Sie redis-cli für diese Aufgabe verwenden:

    docker-compose exec redis-mailcow sh
    # Unlink (verfügbar in Redis >=4.) löscht im Hintergrund
    redis-cli --scan --pattern RL* | xargs redis-cli unlink

Starten Sie Rspamd neu:

    docker-compose exec redis-mailcow sh

## Erneutes Senden von Quarantäne-Benachrichtigungen auslösen

Sollte nur zur Fehlersuche verwendet werden!

    docker-compose exec dovecot-mailcow bash
    mysql -umailcow -p$DBPASS mailcow -e "update quarantine set notified = 0;"
    redis-cli -h redis DEL Q_LAST_NOTIFIED
    quarantine_notify.py

## Speicherung der Historie erhöhen

Standardmäßig speichert Rspamd 1000 Elemente in der Historie.

Die Historie wird komprimiert gespeichert.

Es wird empfohlen, hier keinen unverhältnismäßig hohen Wert zu verwenden, probieren Sie etwas in der Größenordnung von 5000 oder 10000 und sehen Sie, wie Ihr Server damit umgeht:

Bearbeiten Sie `data/conf/rspamd/local.d/history_redis.conf`:

    nrows = 1000; # Ändern Sie diesen Wert

Starten Sie anschließend Rspamd neu: `docker-compose restart rspamd-mailcow`

Letztes Update: 2022-02-18 19:46:54
Zurück zum Seitenanfang