CrowdSec ist eine Open-Source-Software, die entwickelt wurde, um Server und Netzwerke vor schädlichen Zugriffen zu schützen. Sie kombiniert Verhaltenserkennung mit einem globalen IP-Reputations-Netzwerk, um Entscheidungen über den Zugriff auf Systeme zu treffen, wie z.B. das Zulassen, Blockieren oder Anzeigen einer CAPTCHA-Seite. Dank @psycho0verload haben wir hier in der Community immer eine aktuelle Anleitung zu CrowdSec und Traefik. Diese dient auch bei fast allen Anleitungen als Grundlage. CrowdSec schützt uns nur manchmal “zu gut”, weshalb ich auch sehr oft selbst gebannt werde. Ich zeige euch hier, wie ihr den Ban löschen könnt und was man dagegen tun kann.
| Datum | Änderungen |
|---|---|
| 21.08.2024 | Erstellung dieser Anleitung |
| 15.11.2024 | Anpassungen an Traefik v3 Anleitung |
1. Wir sind gebannt. Was ist nun zu tun?
1.1 Auf Server zugreifen
Wenn ihr den Firewall Bouncer nutzt und ihr komplett von eurem Server gebannt wurdet, könnt ihr versuchen mittels anderer IP Adresse auf euren Server zuzugreifen. Eine weitere Möglichkeit ist über das Interface eures Serverbetreibers direkt auf dem Server zu arbeiten. Ansonsten müsst ihr einfach die “Bantime” warten und könnt anschließend auf euren Server wieder zugreifen.
1.2 Bans anzeigen
Nachdem ihr auf dem Server seid könnt ihr euch alle aktuellen Bans anzeigen lassen. Dazu gebt ihr folgendes ein:
docker exec crowdsec cscli decisions listCode-Sprache: PHP (php)
Nun seht ihr alle Bans:
+---------+----------+-------------------+-----------------------------------+--------+---------+------------------------+--------+--------------------+----------+
| ID | Source | Scope:Value | Reason | Action | Country | AS | Events | expiration | Alert ID |
+---------+----------+-------------------+-----------------------------------+--------+---------+------------------------+--------+--------------------+----------+
| 5127716 | crowdsec | Ip:95.91.xxx.xxx | crowdsecurity/http-probing | ban | DE | 3209 Vodafone GmbH | 11 | 3h59m46.411598283s | 1074 |
| 5127714 | crowdsec | Ip:167.99.xx0.xxx | crowdsecurity/jira_cve-2021-26086 | ban | NL | 14061 DIGITALOCEAN-ASN | 1 | 3h50m46.870979058s | 1072 |
| 5127712 | crowdsec | Ip:165.227.xx3.xxx | crowdsecurity/jira_cve-2021-26086 | ban | DE | 14061 DIGITALOCEAN-ASN | 1 | 3h50m45.352095913s | 1070 |
+---------+----------+-------------------+-----------------------------------+--------+---------+------------------------+--------+--------------------+----------+Code-Sprache: PHP (php)
Sucht hier euren eigenen Ban heraus. Falls ihr eure IP nicht kennt, könnt ihr diese beispielsweise auf wieistmeineip.de ermitteln.
1.3 Ban löschen
Nun entfernen wir den Ban. Dazu gebt ihr folgendes ein:
docker exec crowdsec cscli decisions delete --ip <eureIP>
Beispiel:
docker exec crowdsec cscli decisions delete --ip 95.91.xxx.xxxCode-Sprache: CSS (css)
Nun könnt ihr wieder “normal” auf euren Server zugreifen.
2. Ban verhindern durch Import von Hub Collections
Ihr habt nun die Möglichkeit fertige “Collections” zu importieren. Dies sind von der CrowdSec Community bereitgestellte Whitelists für einzelne Programme. Die komplette Liste findet ihr hier: https://app.crowdsec.net/hub/collections

Wenn ihr eure Anwendung dort finde, dann klickt auf die entsprechende Anwendung. In meinem Fall “apache2”. Anschließend seht ihr folgendes:

Hier seht ihr, dass die Collection “crowdsecurity/apache2” heißt. Nun öffnet ihr folgende Datei:
nano /opt/containers/traefik-crowdsec-stack/data/crowdsec/.env
Dort fügt ihr im Bereich “Collections” folgendes hinzu:
crowdsecurity/apache2
Nun müsst ihr CrowdSec noch neu starten, damit diese Änderungen übernommen werden.
cd /opt/containers/traefik-crowdsec-stack
docker compose up -d --force-recreate
3. Bans verhindern durch eigene Whitelists
Wenn Punkt 2 geklappt haben sollte, dann könnt ihr diesen Punk überspringen. Sollte es aber keine Collection zu eurer Anwendung geben bzw. die Collection plant nicht wie funktioniert, so könnt / müsst ihr eine eigene Whitelist erstellen. Dazu schauen wir uns als erstes an, welches “Problem” zum Ban geführt hat. Also zuerst wieder die Banlist anschauen:
docker exec crowdsec cscli decisions listCode-Sprache: PHP (php)
Nun seht ihr alle Bans:
+---------+----------+-------------------+-----------------------------------+--------+---------+------------------------+--------+--------------------+----------+
| ID | Source | Scope:Value | Reason | Action | Country | AS | Events | expiration | Alert ID |
+---------+----------+-------------------+-----------------------------------+--------+---------+------------------------+--------+--------------------+----------+
| 5127716 | crowdsec | Ip:95.91.xxx.xxx | crowdsecurity/http-probing | ban | DE | 3209 Vodafone GmbH | 11 | 3h59m46.411598283s | 1074 |
| 5127714 | crowdsec | Ip:167.99.xx0.xxx | crowdsecurity/jira_cve-2021-26086 | ban | NL | 14061 DIGITALOCEAN-ASN | 1 | 3h50m46.870979058s | 1072 |
| 5127712 | crowdsec | Ip:165.227.xx3.xxx | crowdsecurity/jira_cve-2021-26086 | ban | DE | 14061 DIGITALOCEAN-ASN | 1 | 3h50m45.352095913s | 1070 |
+---------+----------+-------------------+-----------------------------------+--------+---------+------------------------+--------+--------------------+----------+Code-Sprache: PHP (php)
In unserem Fall also “crowdsecurity/http-probing” und der Ban hat die Alter ID “1074”. Nun schauen wir uns genauer an, wie es dazu kam. Gebt dazu folgendes ein:
docker exec crowdsec cscli alerts inspect <Alter ID>
Beispiel:
docker exec crowdsec cscli alerts inspect 1074Code-Sprache: HTML, XML (xml)
Ausgabe:
################################################################################################
- ID : 1074
- Date : 2024-08-16T09:40:48Z
- Machine : localhost
- Simulation : false
- Reason : crowdsecurity/http-probing
- Events Count : 11
- Scope:Value : Ip:95.91.xxx.xxxx
- Country : DE
- AS : Vodafone GmbH
- Begin : 2024-08-16 09:40:47.812031078 +0000 UTC
- End : 2024-08-16 09:40:47.906448409 +0000 UTC
- UUID : 7971a3e2-e9e7-xxxxx
- Active Decisions :
+---------+------------------+--------+--------------------+----------------------+
| ID | scope:value | action | expiration | created_at |
+---------+------------------+--------+--------------------+----------------------+
| 5127716 | Ip:95.91.xxx.xxx | ban | 2h46m22.673585049s | 2024-08-16T09:40:48Z |
+---------+------------------+--------+--------------------+----------------------+
- Context :
+------------+---------------------------------+
| Key | Value |
+------------+---------------------------------+
| method | GET |
| status | 403 |
| target_uri | /api/v2/search/Tv/moviedb/3562 |
| target_uri | /api/v2/search/Tv/moviedb/11863 |
| target_uri | /api/v2/search/Tv/moviedb/55165 |
| target_uri | /api/v2/search/Tv/moviedb/40891 |
| target_uri | /api/v2/search/Tv/moviedb/4384 |
| target_uri | /api/v2/search/Tv/moviedb/0 |
| target_uri | /api/v2/search/Tv/moviedb/82172 |
| target_uri | /api/v2/search/Tv/moviedb/13805 |
| target_uri | /api/v2/search/Tv/moviedb/90 |
| target_uri | /api/v2/search/Tv/moviedb/1428 |
| target_uri | /api/v2/search/Tv/moviedb/21145 |
| user_agent | - |
+------------+---------------------------------+Code-Sprache: PHP (php)
Hier sollte also auf sehr viele URLs mit dem Format “/api/v2/search/Tv/moviedb/” zugegriffen werden, was zu dem Fehler führte. Nun wollen wir diese URL whitelisten. Dazu legen wir uns eine neue Whitelist an. Den Namen könnt ihr frei wählen. In meinem Fall geht es um das Programm “Ombi”, daher verwende ich diesen Namen.
nano /opt/containers/traefik-crowdsec-stack/data/crowdsec/config/parsers/s02-enrich/whitelist-ombi.yaml
Inhalt:
name: whitelist-ombi
description: "Whitelist for ombi"
whitelist:
reason: "Exclude URL to solve http-probing errors"
expression:
- evt.Meta.http_path contains '/api/v2/search/Tv/moviedb/'Code-Sprache: JavaScript (javascript)
Die Beschreibungstexte / Reason könnt ihr beliebig anpassen. Entscheidend ist die letzte Zeile, die den Ausschluss regelt.
Nun starten wir CrowdSec neu.
cd /opt/containers/traefik-crowdsec-stack
docker compose up -d --force-recreate
Jetzt kontrollieren wir erst mal, dass unsere Whitelist korrekt importiert wurde.
docker exec crowdsec cscli hub listCode-Sprache: PHP (php)
Dort solltet ihr jetzt eure Whitelist in der Liste sehen. Bei mir ganz unten.
----------------------------------------------------------------------------------------------------------------------
Name 📦 Status Version Local Path
----------------------------------------------------------------------------------------------------------------------
crowdsecurity/cri-logs ✔️ enabled 0.1 /etc/crowdsec/parsers/s00-raw/cri-logs.yaml
crowdsecurity/dateparse-enrich ✔️ enabled 0.2 /etc/crowdsec/parsers/s02-enrich/dateparse-enrich.yaml
crowdsecurity/docker-logs ✔️ enabled 0.1 /etc/crowdsec/parsers/s00-raw/docker-logs.yaml
crowdsecurity/dovecot-logs ✔️ enabled 0.8 /etc/crowdsec/parsers/s01-parse/dovecot-logs.yaml
crowdsecurity/geoip-enrich ✔️ enabled 0.3 /etc/crowdsec/parsers/s02-enrich/geoip-enrich.yaml
crowdsecurity/http-logs ✔️ enabled 1.2 /etc/crowdsec/parsers/s02-enrich/http-logs.yaml
crowdsecurity/nginx-logs ✔️ enabled 1.5 /etc/crowdsec/parsers/s01-parse/nginx-logs.yaml
crowdsecurity/postfix-logs ✔️ enabled 0.6 /etc/crowdsec/parsers/s01-parse/postfix-logs.yaml
crowdsecurity/postscreen-logs ✔️ enabled 0.3 /etc/crowdsec/parsers/s01-parse/postscreen-logs.yaml
crowdsecurity/sshd-logs ✔️ enabled 2.3 /etc/crowdsec/parsers/s01-parse/sshd-logs.yaml
crowdsecurity/syslog-logs ✔️ enabled 0.8 /etc/crowdsec/parsers/s00-raw/syslog-logs.yaml
crowdsecurity/traefik-logs ✔️ enabled 0.9 /etc/crowdsec/parsers/s01-parse/traefik-logs.yaml
crowdsecurity/whitelists ✔️ enabled 0.2 /etc/crowdsec/parsers/s02-enrich/whitelists.yaml
whitelist-ombi 🏠 enabled,local /etc/crowdsec/parsers/s02-enrich/whitelist-ombi.yaml
Nun probiert ihr aus, ob alles korrekt funktioniert. Falls es noch Probleme gibt, dann schaut ihr euch wieder die Altert ID an und gebt gegebenfalls noch eine weitere URL frei. Dies macht ihr so lange bis eure Anwendung korrekt funktioniert.
Beispiel für mehrere URLs:
name: whitelist-ombi
description: "Whitelist for ombi"
whitelist:
reason: "Exclude URL to solve http-probing errors"
expression:
- evt.Meta.http_path contains '/api/v2/search/Tv/moviedb/'
- evt.Meta.http_path contains '/api/v3/'
- evt.Meta.http_path contains '/api/v4/'Code-Sprache: JavaScript (javascript)
4. weitere CrowdSec Befehle
Es gibt hier in der Community noch einen weiteren Artikel, welcher euch einige CrowdSec Befehle vorstellt. Wer sich für CrowdSec interessiert, sollte sich diesen unbedingt anschauen.

Hallo
Christian ich kann mir die Befehle nicht merken. 🙂 Deshalb habe ich mir ein kleines IP Löschscript geschrieben. Erst werden die Ban´s angezeigt und die zu löschende IP abgefragt. Fertig. Klappt wunderbar..!
Viele Grüße
Jens
#!/bin/bash
# Bestimmte IPs entsperren
docker exec crowdsec cscli decisions list
read -p “Geben Sie bitte die gebannte IP ein:” ip
docker exec crowdsec cscli decisions remove –ip $ip
echo Die gebannte IP $ip wurde gelöscht und der Server ist wieder erreichbar!