8. Dienst starten
Uff! Das war wirklich eine lange und gründliche Anleitung bis jetzt. Ich habe mein Bestes gegeben, um viele Aspekte direkt zu erläutern und das Verständnis für die Funktionsweise sowie den Aufbau des Stacks zu erleichtern.
Bevor wir den finalen Schritt gehen und den Dienst starten, möchte ich dir folgendes ans Herz legen: Nimm dir einen Moment Zeit, um nochmal alle Schritte durchzugehen und sicherzustellen, dass alle Dateien richtig erstellt und korrekt befüllt wurden.
8.1. Checkliste
- Wurden alle
.env-Dateien korrekt konfiguriert? - Ist die
docker-compose.ymlmit den richtigen Einbindungen versehen? - Sind alle Einträge in den Middleware-Dateien (
crowdsec,default) korrekt eingetragen? - Wurde die Traefik-Konfiguration korrekt angelegt (
traefik.yml,tls.yml,http.middlewares.default.yml,http.middlewares.default-security-headers.yml,http.middlewares.gzip.yml,http.middlewares.crowdsec.plugin.yml,http.routers.traefik-dashboard.yml)?
Jetzt, bevor du weitermachst: Gönn dir eine kurze Pause, entspann dich, streck dich mal und lass deine Augen etwas Erholung vom Bildschirm haben. Mit frischem Kopf und voller Energie sind wir dann bereit für den nächsten Schritt! ☕️☕️☕️
Bereit?
Dann gehen wir jetzt in das Verzeichnis des Projekts:
cd /opt/containers/traefik-crowdsec-stackCode-Sprache: Bash (bash)
Und starten den Dienst mit Docker Compose:
docker compose up -dCode-Sprache: Bash (bash)
Unsere URL für das Traefik-Dashboard, welche wir in Kapitel: “7.3.1. Allgemeine .env-Datei” unter SERVICES_TRAEFIK_LABELS_TRAEFIK_HOST festgelegt haben, sollte jetzt erreichbar sein. Beim Aufrufen der Seite wird ein Benutzername und Passwort abgefragt, um den Zugriff zu sichern.
🚀🚀🚀 Fertig, oder?
Wir sind fast durch, aber es gibt noch ein paar abschließende Dinge, die wir erledigen sollten. Als nächstes kümmern wir uns um die Überprüfung dieses Setup.
Bleib also dran, wir sind schon fast am Ziel!
9. Traefik-CrowdSec-Stack überprüfung
Natürlich sollten wir zwischendurch und gemäß dieser Anleitung immer wieder überprüfen, ob alles funktioniert, wie es sollte. Das tun wir jetzt nach all diesen Schritten.
9.1. Container-Status prüfen
Wir haben den Container ja bereits gestartet. Als erstes überprüfen wir, ob alle Container als “healthy” (gesund) markiert sind:
cd /opt/containers/traefik-crowdsec-stack
docker compose ps
root@test-01:/opt/containers/traefik-crowdsec-stack# docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
crowdsec crowdsecurity/crowdsec:latest "/bin/bash /docker_s…" crowdsec 50 minutes ago Up 50 minutes (healthy)
socket-proxy lscr.io/linuxserver/socket-proxy:latest "/docker-entrypoint.…" socket-proxy 50 minutes ago Up 50 minutes (healthy)
traefik traefik:3.6 "/entrypoint.sh trae…" traefik 50 minutes ago Up 50 minutes (healthy) 0.0.0.0:80->80/tcp, [::]:80->80/tcp, 0.0.0.0:443->443/tcp, [::]:443->443/tcp, 0.0.0.0:443->443/udp, [::]:443->443/udp
root@test-01:/opt/containers/traefik-crowdsec-stack# Code-Sprache: PHP (php)
Wenn wir alles richtig gemacht haben, sind alle Container als “healthy” markiert.
9.2. Dashboard überpüfen und häufige Probleme
Dann rufen wir das Traefik-Dashboard mit der zuvor festgelegten URL auf. Das Dashboard sollte sich öffnen und auch ein valides Let’s Encrypt-Zertifikat haben.
Sollte die konfigurierte Domain nicht erreichbar sein oder beim Aufruf des Traefik-Dashboards ein Fehler auftreten, handelt es sich in den meisten Fällen um ein Problem bei der Zertifikatsausstellung. In diesem Fall liefert das Traefik-Log in der Regel bereits konkrete Hinweise auf die Ursache.
Die relevanten Fehlermeldungen finden wir im Traefik-Log unter:
cat /var/log/traefik/traefik.logCode-Sprache: JavaScript (javascript)
Typische Fehler sehen dabei beispielsweise wie folgt aus:
{"level":"error","providerName":"tls_resolver.acme","acmeCA":"https://acme-v02.api.letsencrypt.org/directory","providerName":"tls_resolver.acme","ACME CA":"https://acme-v02.api.letsencrypt.org/directory","routerName":"traefik-dashboard@file","rule":"HOST(`xyz.deinedomain.de`)","error":"unable to generate a certificate for the domains [xyz.deinedomain.de]: error: one or more domains had a problem:\n[xyz.deinedomain.de] invalid authorization: acme: error: 400 :: urn:ietf:params:acme:error:tls :: 94.xxx.xxx.xxx: remote error: tls: unrecognized name\n","domains":["xyz.deinedomain.de"],"time":"2025-12-25T14:09:09+01:00","message":"Unable to obtain ACME certificate for domains"}Code-Sprache: JSON / JSON mit Kommentaren (json)
Solche Meldungen deuten in der Regel darauf hin, dass kein gültiger DNS-Eintrag für die verwendete Domain existiert. Häufig fehlt entweder ein passender A- & AAA-Record auf die Server-IP oder zumindest ein korrekt aufgelöster CNAME-Eintrag. Ohne eine saubere DNS-Auflösung kann Let’s Encrypt das Zertifikat nicht validieren und Traefik stellt folglich kein TLS-Zertifikat aus.
Sobald der DNS-Eintrag korrekt gesetzt und weltweit auflösbar ist, kann Traefik das Zertifikat automatisch neu anfordern. In diesem Fall reicht es in der Regel aus, den Traefik-Container neu zu starten und das Log erneut zu prüfen.
9.3. Logs überpüfen
Beim Öffnen des Dashboards werden auch Logdateien erstellt, und diese überprüfen wir als nächstes:
cd /var/log/traefik
ls -all
cat traefik.log
cat access.logCode-Sprache: JavaScript (javascript)
Hier sollten wir idealerweise die Dateien traefik.log und access.log finden, und in beide sollte etwas geschrieben sein. Wenn die Datei access.log nicht vorhanden ist, ist das kein Beinbruch, sollte aber beobachtet werden.
9.4. CrowdSec Metrics überpüfen
Wenn das alles passt, betrachten wir mit dem Befehl:
docker exec crowdsec cscli metrics
die ganz oben stehenden Acquisition Metrics. Dort sollte nun mit der Zeit die access.log und auth.log vorhanden sein.
10. Optional
Es gibt noch einige optionale Punkte. Diesen Bereich werde ich nach und nach erweitern bzw. auf vorhandene Anleitungen verweisen!
10.1. CrowdSec aktuell halten
Die aus dem CrowdSec Hub bezogenen COLLECTIONS, PARSERS, SCENARIOS, POSTOVERFLOWS und CONTEXTS werden größtenteils von der Community gepflegt und regelmäßig auf neue CrowdSec-Versionen angepasst. Um sicherzustellen, dass wir keine veralteten Versionen verwenden oder in Fehler laufen, ist es sinnvoll, diese Komponenten regelmäßig zu aktualisieren.
In der früheren Anleitung hatten wir dafür einen Cronjob eingerichtet, der das Update innerhalb des Containers ausgeführt hat. Allerdings ist dies in der aktuellen Form nicht mehr notwendig und wird auch nicht empfohlen. Stattdessen reicht es aus, den CrowdSec-Container gelegentlich neu zu starten. Besonders vor dem Ausführen von docker compose pull sollte sichergestellt werden, dass CrowdSec die neuesten Versionen aus dem Hub geladen hat.
Es ist dennoch denkbar, einen Cronjob einzurichten, der den Container regelmäßig neu startet:
Cronjob einrichten
Um einen Cronjob zu konfigurieren, der den CrowdSec-Container alle 3 Tage neu startet, bearbeite die Crontab-Datei:
crontab -e
Wir fügen den folgenden Eintrag hinzu:
0 3 */3 * * docker compose -f /opt/containers/traefik-crowdsec-stack/docker-compose.yml restart crowdsecCode-Sprache: JavaScript (javascript)
Dieser Cronjob startet den CrowdSec-Container alle 3 Tage um 3 Uhr morgens neu.
Wichtiger Hinweis:
Wir müssen dabei stets bedenken, dass ein automatischer Neustart auch Risiken birgt. Wenn wir unseren Server und das Setup nicht aktiv überwachen und beim Update von CrowdSec etwas schiefgeht, besteht die Gefahr, dass der Server oder die über Traefik laufenden Anwendungen nicht mehr erreichbar sind.
10.2. Traefik-CrowdSec-Stack Update
Um den Stack aktuell zu halten und Updates ordnungsgemäß durchzuführen, empfehlen wir die folgende Befehlsabfolge:
cd /opt/containers/traefik-crowdsec-stack/
docker compose restart crowdsec
docker compose down
docker compose pull
docker compose up -d
Erklärung der Schritte:
- Verzeichnis wechseln: Wir wechseln in das Verzeichnis, in dem die Docker-Compose-Dateien des Stacks liegen.
- CrowdSec neustarten: Dies aktualisiert die COLLECTIONS, PARSERS, SCENARIOS, POSTOVERFLOWS und CONTEXTS, um sicherzustellen, dass keine Fehler aufgrund von veralteten Versionen auftreten.
- Stack herunterfahren: Dies sorgt dafür, dass der Stack sauber beendet wird, was langfristig hilft, unnötige Logdateien zu vermeiden.
- Aktualisieren des Stacks: Mit diesem Befehl werden die neuesten Versionen der Docker-Images heruntergeladen.
- Stack neu starten: Der aktualisierte Stack wird im Hintergrund wieder hochgefahren.
Durch diese Schritte wird der Stack regelmäßig aktualisiert und mögliche Probleme mit neuen Versionen von CrowdSec oder Traefik werden minimiert.
10.3. Erweiterung der Firewall (UFW bzw. IPTables und NFTables) mit CrowdSec
Jetzt erweitern wir unsere Firewall mithilfe des CrowdSec Firewall Bouncers, um unser System besser vor Angriffen zu schützen. In dieser Anleitung haben wir CrowdSec bereits über Docker in unser System integriert. Nun möchten wir den Firewall-Bouncer direkt auf unserem System installieren und ihn mit dem CrowdSec, das in einem Docker-Container läuft, verknüpfen. Dadurch können wir die Firewall effizient erweitern und Angriffe direkt auf Netzwerkebene abwehren.
10.3.1. Repository für CrowdSec Firewall Bouncer
Um den Firewall Bouncer zu installieren, müssen wir das entsprechende Repository einbinden. Auch wenn die Pakete in einigen Distributionen verfügbar sind, empfiehlt die Dokumentation von CrowdSec, das offizielle Repository hinzuzufügen. Wir führen den folgenden Befehl aus, um die benötigten Repositorys hinzuzufügen:
curl -s https://install.crowdsec.net | sudo shCode-Sprache: JavaScript (javascript)
Dieser Befehl richtet die erforderlichen Repositorys auf unserem System ein.
10.3.2. Installation des Firewall Bouncers
Abhängig von der verwendeten Firewall (UFW, IPTables oder NFTables) installieren wir das passende Paket. Die Pakete für den CrowdSec Firewall Bouncer sind jetzt über unsere Repositories verfügbar.
UFW + IPTables:
apt install crowdsec-firewall-bouncer-iptables
NFTables:
apt install crowdsec-firewall-bouncer-nftables
10.3.3. Access Token generieren
Ähnlich wie im Schritt 7.3.6. API Key für den CrowdSec Bouncer für Traefik generieren benötigen wir nun ein Passwort für den CrowdSec Bouncer für die Firewall.
Der Access Token wird wie folgt generiert:
BOUNCER_PASSWORD=$(openssl rand -base64 48 | tr -dc 'a-zA-Z0-9!@#$%^&*()-_=+[]{}<>?|')
echo "BOUNCER_KEY_FIREWALL=\"$BOUNCER_PASSWORD\"" >> /opt/containers/traefik-crowdsec-stack/.env
echo "Generated BOUNCER_KEY_FIREWALL: $BOUNCER_PASSWORD"Code-Sprache: JavaScript (javascript)
Generated BOUNCER_KEY_FIREWALL: t/PCqkXRE7Qlm4kGCYUNEiW5LSLvobRMeZ00YN01zpXCHdlYK98ji3ZrGQNNc3H+
root@test-01:/opt/containers/traefik-crowdsec-stack# Code-Sprache: PHP (php)
Nun speichern wir uns den generierten Schlüssel noch kurz in einem Textdokument oder ähnlichem ab, da wir ihn in Schritt 10.3.4. wieder benötigen.
Damit haben wir unserem Stack den BOUNCER_KEY_FIREWALL hinzugefügt. Damit dieser vom Stack angenommen wird, müssen wir den Stack einmal neu starten:
cd /opt/containers/traefik-crowdsec-stack/
docker compose down
docker compose up -d
10.3.4. Bouncer konfigurieren
Um die Konfiguration des Bouncers anzupassen, öffnen wir die Konfigurationsdatei mit folgendem Befehl:
nano /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
Die Datei sieht zunächst folgendermaßen aus:
api_url: http://127.0.0.1:8080/
api_key: <API_KEY>Code-Sprache: JavaScript (javascript)
Wir passen die Konfiguration an, indem wir die folgenden Werte eintragen:
api_url: http://172.31.127.254:8080/
api_key: t/PCqkXRE7Qlm4kGCYUNEiW5LSLvobRMeZ00YN01zpXCHdlYK98ji3ZrGQNNc3H+Code-Sprache: HTTP (http)
Dabei ersetzen wir den Platzhalter t/PCqkXRE7Qlm4kGCYUNEiW5LSLvobRMeZ00YN01zpXCHdlYK98ji3ZrGQNNc3H+ durch den in Schritt 10.3.3. erstellten und gespeicherten Access-Token.
Hinweis: An dieser Stelle funktioniert der Docker Hostname von CrowdSec nicht, weshalb wir die IP-Adresse verwenden müssen. Dies ist einer der Gründe, warum wir die IP von CrowdSec im CrowdSec-Netzwerk explizit definiert haben.
10.3.5. CrowdSec Firewall Bouncer starten
Wir starten den Firewall Bouncer mit folgendem Befehl:
systemctl enable crowdsec-firewall-bouncer
systemctl restart crowdsec-firewall-bouncer
Um sicherzustellen, dass der Bouncer ordnungsgemäß läuft, überprüfen wir den Status mit:
systemctl status crowdsec-firewall-bouncer
Die Ausgabe sollte in etwa so aussehen:
root@test-01:/opt/containers/traefik-crowdsec-stack# systemctl status crowdsec-firewall-bouncer
● crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec
Loaded: loaded (/etc/systemd/system/crowdsec-firewall-bouncer.service; enabled; vendor preset: enabled)
Active: active (running) since Sun 2024-10-06 11:10:51 CEST; 25s ago
Process: 1048574 ExecStartPre=/usr/bin/crowdsec-firewall-bouncer -c /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml -t (code=exited, status=0/SUCCESS)
Process: 1048586 ExecStartPost=/bin/sleep 0.1 (code=exited, status=0/SUCCESS)
Main PID: 1048580 (crowdsec-firewa)
Tasks: 9 (limit: 9450)
Memory: 47.1M
CPU: 314ms
CGroup: /system.slice/crowdsec-firewall-bouncer.service
└─1048580 /usr/bin/crowdsec-firewall-bouncer -c /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
Oct 06 11:10:51 test-01 systemd[1]: Starting The firewall bouncer for CrowdSec...
Oct 06 11:10:51 test-01 systemd[1]: Started The firewall bouncer for CrowdSec.
root@test-01:/opt/containers/traefik-crowdsec-stack# Code-Sprache: PHP (php)
Damit stellen wir sicher, dass der CrowdSec Firewall Bouncer erfolgreich gestartet wurde und aktiv ist.
Ein automatisches Starten des Bouncers bzw. ein Cronjob, der den Start des CrowdSec Firewall Bouncers verzögert, ist nicht mehr notwendig. Das Problem wurde mit dem Issue #216 gelöst, und ein Fix wurde hinzugefügt.
10.3.6. Anzeigen der CrowdSec Bouncer-Liste
Um sicherzustellen, dass unser Firewall Bouncer korrekt registriert ist, können wir uns die Liste aller registrierten CrowdSec Bouncer anzeigen lassen.
Dazu führen wir den folgenden Befehl aus:
docker exec crowdsec cscli bouncers listCode-Sprache: PHP (php)
Die Ausgabe sollte in etwa wie folgt aussehen:
root@test-01:/opt/containers/traefik-crowdsec-stack# docker compose exec crowdsec cscli bouncers list
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Name IP Address Valid Last API pull Type Version Auth Type
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
FIREWALL 172.31.64.1 ✔️ 2025-12-25T19:41:53Z crowdsec-firewall-bouncer v0.0.34-debian-pragmatic-amd64-4144555453620958398aee64253dfd90bbc1f698 api-key
TRAEFIK 172.31.127.253 ✔️ 1.X.X api-key
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
root@test-01:/opt/containers/traefik-crowdsec-stack#Code-Sprache: PHP (php)
Beachte, dass die in diesem Beispiel aufgeführten IP-Adressen individuell für unser Setup sind und bei dir möglicherweise andere Werte erscheinen.
Damit haben wir erfolgreich bestätigt, dass unser Firewall Bouncer in der Liste aufgeführt wird und korrekt funktioniert.
10.4. Logrotate für Traefik
Es ist bereits bekannt, dass die access.log-Datei sehr schnell wächst, insbesondere wenn das Debug-Level auf “info” gesetzt ist. Das kann schnell zu Speicherplatzproblemen führen, wenn sie nicht gehandhabt wird. Traefik selbst bietet keine eingebaute Log-Rotation-Funktion, aber zum Glück gibt es eine Standardkomponente namens Logrotate in vielen Linux-Distributionen wie Ubuntu, die uns dabei helfen kann.
Bei diesem Inhalt handelt es sich um exklusiven Content für Community Plus Mitglieder und Supporter.
Bitte logge dich mit deinem Account ein um den Inhalt zu sehen.
11. Neuen Container hinzufügen
Um einen neuen Container über Traefik verfügbar zu machen und gleichzeitig durch CrowdSec zu schützen, müssen wir in der zugehörigen docker-compose.yml die Ports entfernen und dem entsprechenden Container Labels hinzufügen. Hier ein Beispiel mit WordPress:
Dies ist die docker-compose.yml aus der WordPress-Dokumentation auf hub.docker.com:
version: '3.1'
services:
wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
volumes:
wordpress:
db:Code-Sprache: JavaScript (javascript)
Dies wird dann zu folgender Konfiguration geändert:
version: '3.1'
services:
wordpress:
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: exampledb
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_USER: exampleuser
image: wordpress
labels:
traefik.docker.network: proxy
traefik.enable: "true"
traefik.http.routers.wordpress-secure.entrypoints: websecure
traefik.http.routers.wordpress-secure.rule: Host(`meinwordpress.de`)
traefik.http.routers.wordpress-secure.service: wordpress
traefik.http.routers.wordpress-secure.tls: "true"
traefik.http.routers.wordpress-secure.tls.certresolver: tls_resolver
traefik.http.routers.wordpress.entrypoints: web
traefik.http.routers.wordpress.rule: Host(`meinwordpress.de`)
traefik.http.services.wordpress.loadbalancer.server.port: "80"
networks:
default: null
proxy: null
restart: always
volumes:
- wordpress:/var/www/html
db:
environment:
MYSQL_DATABASE: exampledb
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: "1"
MYSQL_USER: exampleuser
image: mysql:5.7
networks:
default: null
restart: always
volumes:
- db:/var/lib/mysql
networks:
default:
proxy:
external: true
volumes:
db:
wordpress:Code-Sprache: JavaScript (javascript)
Als Multi-Domain sieht das dann so aus:
version: '3.1'
services:
wordpress:
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_NAME: exampledb
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_USER: exampleuser
image: wordpress
labels:
traefik.docker.network: proxy
traefik.enable: "true"
traefik.http.routers.wordpress-secure.entrypoints: websecure
traefik.http.routers.wordpress-secure.rule: Host(`meinwordpress.de`) || Host(`www.meinwordpress.de`)
traefik.http.routers.wordpress-secure.service: wordpress
traefik.http.routers.wordpress-secure.tls: "true"
traefik.http.routers.wordpress-secure.tls.certresolver: tls_resolver
traefik.http.routers.wordpress.entrypoints: web
traefik.http.routers.wordpress.rule: Host(`meinwordpress.de`) || Host(`www.meinwordpress.de`)
traefik.http.services.wordpress.loadbalancer.server.port: "80"
networks:
default: null
proxy: null
restart: always
volumes:
- wordpress:/var/www/html
db:
environment:
MYSQL_DATABASE: exampledb
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: "1"
MYSQL_USER: exampleuser
image: mysql:5.7
networks:
default: null
restart: always
volumes:
- db:/var/lib/mysql
networks:
default:
proxy:
external: true
volumes:
db:
wordpress:Code-Sprache: JavaScript (javascript)
Eine kurze Erklärung dazu: Die Ports müssen nicht mehr explizit freigegeben (exposed) werden, da dies nun Traefik übernimmt. Wir teilen Traefik lediglich über Labels mit, welcher Resolver verwendet werden soll und über welchen Port Traefik auf WordPress zugreifen kann. Zusätzlich muss dem WordPress-Container noch das Traefik-Netzwerk namens “proxy” zugewiesen werden. Allerdings sollte dies nur dem WordPress-Container zugewiesen werden, da wir zwar die Datenbank gemeinsam mit WordPress im “default”-Netzwerk betreiben, die Datenbank jedoch nicht öffentlich zugänglich machen möchten.
11.1. TLS anstelle von HTTP
Wie der Name schon sagt: Nutzt mehr den tls_resolver und nicht den http_resolver. Traefik macht TLS möglich und am Ende ist es die modernere Variante!

Herzlichen Dank für dieses HowTo Crowdsec+Traefik. Es hilft mir sehr!
Beim abarbeiten ist mir gerade aufgefallen, dass
${SERVICES_TRAEFIK_NETWORKS_SOCKET_PROXY_IPV4}
zwei mal verwendet wird.
—
In der crowdsec.yml
${SERVICES_TRAEFIK_NETWORKS_SOCKET_PROXY_IPV4:-172.31.255.252}
—
In der traefik.yml
${SERVICES_TRAEFIK_NETWORKS_SOCKET_PROXY_IPV4:-172.31.255.253}
—
Der Syntax nach, vermute ich, dass es in der crowdsec.yml entsprechend so lauten sollte:
${SERVICES_CROWDSEC_NETWORKS_SOCKET_PROXY_IPV4:-172.31.255.252}
${SERVICES_CROWDSEC_NETWORKS_SOCKET_PROXY_IPV6:-fd00:1:be:a:7001:0:3e:8ffe}
“customResponseHeaders – Content-Security-Policy: “frame-ancestors ‘self’;”” stört in meinem setup die Verbindung zwischen Nextcloud und Collabora.
Aber unter Traefik 3.6 gibt es noch weitere Stolpersteine “encodedcharacters” ist das Stichwort.
Vielen lieben Dank ihr zwei, die Anleitung hat super funktioniert!
Zwei kleine Anmerkungen: Der Link am Ende von 8.1 führt noch zu der alten Anleitung und in 7.3.1 würde ich mir eine Klarstellung wünschen, dass mit “SERVICES_TRAEFIK_LABELS_TRAEFIK_HOST” die DASHBOARD domain und nicht die “Mutter-Domain” des Servers gemeint ist. 😉
Weiterhin hatte ich mit meiner alten Installation häufiger mal false-bans, wenn ich meinen Browser offen gelassen habe und beim erneuten Aufrufen eines Services/Seite ohne aktiven Session Cookie. Crowdsec hat diese Szenarien dann als brute-login oder ähnliches (http-probing oder so…) erkannt.
Gibt es hier auch andere, die ähnlichen Problemen begegnet sind und eventuell Lösungsansätze teilen können?
Erst einmal an der Stelle ein riesiges Dankeschön für die top Anleitung!
Ich hätte dazu eine Frage in die Runde bezüglich der Auswahl des richtigen Firewall Bouncers für Crowdsec unter Debian 13.
Ich nutze UFW, habe aber durch Debian 13 vermutlich die Default-FW Implementierung NFT aktiv.
Auch scheint (laut dem Web) inzwischen UFW auch mit NFT zu funktionieren.
Welcher Bouncer ist in dem Fall der Richtige?
Es müsste eigentlich UFW+NFT sein, aber diese Auswahl besteht nicht..?
Wer ein Wildcard-Zertifikat erstellen möchte (hier am Beispiel von Cloudflare) muss folgendes abändern bzw. hinzufügen:
.
.
.
In /opt/containers/traefik-crowdsec-stack/.env hinzufügen:
CF_DNS_API_TOKEN=DeinCloudflareAPIToken
.
.
.
In /opt/containers/traefik-crowdsec-stack/compose/traefik.yml abändern (siehe Hinweise im Code).
services:
traefik:
container_name: ${SERVICES_TRAEFIK_CONTAINER_NAME:-traefik}
depends_on:
socket-proxy:
condition: service_healthy
env_file: ${ABSOLUTE_PATH}/data/traefik/.env
environment: ##### Hinzufügen
– CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN} ##### Hinzufügen
…
…
…
restart: unless-stopped
security_opt:
– no-new-privileges:true
volumes:
– /etc/localtime:/etc/localtime:ro
– ${ABSOLUTE_PATH}/data/traefik/traefik.yml:/etc/traefik/traefik.yml
– ${ABSOLUTE_PATH}/data/traefik/.htpasswd:/etc/traefik/.htpasswd
##### Folgendes Umbenennen / Alle anderen .json-Zeilen löschen#####
– ${ABSOLUTE_PATH}/data/traefik/certs/acme.json:/etc/traefik/acme.json
##### Ende #####
– ${ABSOLUTE_PATH}/data/traefik/dynamic_conf:/etc/traefik/dynamic_conf:ro
– /var/log/traefik/:/var/log/traefik/
.
.
.
Im Ordner ‘/opt/containers/traefik-crowdsec-stack/data/traefik/certs‘ eine ‘acme.json‘ – Datei mit chmod 0600(!) erstellen, alle anderen löschen. (Oder eine bestehende in ‘acme.json‘ umbenennen)
.
.
.
In /opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf/http.routers.traefik-dashboard.yml mit folgenden Code austauschen:
http:
routers:
traefik-dashboard:
entrypoints: websecure
middlewares: traefik-dashboard-auth@file
rule: {{ env “SERVICES_TRAEFIK_LABELS_TRAEFIK_HOST” }}
service: api@internal
tls:
certresolver: cloudflare
domains:
– main: beispiel.de
sans:
– “*.beispiel.de”
.
.
.
In /opt/containers/traefik-crowdsec-stack/data/traefik/traefik.yml NUR den Abschnitt ‘certificatesResolvers’ mit folgendem Code austauschen:
certificatesResolvers:
cloudflare:
acme:
email: deine@email.de
storage: /etc/traefik/acme.json
dnsChallenge:
provider: cloudflare
propagation:
delayBeforeChecks: 10
resolvers:
– “1.1.1.1:53”
– “8.8.8.8:53”
👌
Ich habe bei mir die unter Kapitel 13 angeschnittene DNSchallenge mit Cloudflare implementiert und könnte hier eine entsprechende Anleitung contributen. In welcher Form wäre das sinnvoll/möglich?
Be mir läuft nun alles mit dem neuen Plugin
allerdings habe ich nun das Problem das in der Traefik und crowdsec log jeweils immer die IP vom CDN drin stehen also Cloudflare und ich bekomme ums verrecken es nicht hin das bei crowdsec die orign (client) ip ankommt …
Ich habe folgende fehlermeldung in den logs:
{“level”:”error”,”providerName”:”tls_resolver.acme”,”acmeCA”:”https://acme-v02.api.letsencrypt.org/directory”,”providerName”:”tls_resolver.acme”,”ACME CA”:”https://acme-v02.api.letsencrypt.org/directory”,”routerName”:”traefik-dashboard@docker”,”rule”:”HOST(
traefik.ancienne-forge.eu)”,”error”:”unable to generate a certificate for the domains [traefik.ancienne-forge.eu]: error: one or more domains had a problem:\n[traefik.ancienne-forge.eu] invalid authorization: acme: error: 400 :: urn:ietf:params:acme:error:malformed :: Unable to contact \”traefik.ancienne-forge.eu\” at \”2001:16b8:a79a:ec00:cbd8:8d5c:bcfe:58dd\”, no IPv4 addresses to try as fallback\n”,”domains”:[“traefik.ancienne-forge.eu”],”time”:”2026-01-07T08:00:21+01:00″,”message”:”Unable to obtain ACME certificate for domains”}Für mich unverständlicherweise ist die adresse
traefik.ancienne-forge.eu
über
ping -c3 -6 traefik.ancienne-forge.eu
erreichbar. Ein
nslookup traefik.ancienne-forge.eu
ergibt:
Server: 192.168.1.95
Address: 192.168.1.95#53
Non-authoritative answer:
Name: traefik.ancienne-forge.eu
Address: 2001:16b8:a79a:ec00:cbd8:8d5c:bcfe:58dd
Warum funktioniert der aufruf von
https://traefik.ancienne-forge.eu
dennoch nicht?
Übrigens: auf 192.168.1.95 läuft ein pihole.
Vielen dank für die hilfe.
Sehr schön, dass es jetzt auch eine Anleitung mit dem Bouncer-Plugin gibt! Ich hatte mir da letztes Jahr vorgenommen, mich tiefer einzuarbeiten, aber es fehlte am Ende die Zeit – mit der neuen Anleitung sollte es dann glücklicherweise auch nochmal einen Tick einfacher werden 👍
Wobei ich mich beim Überlegen und auch jetzt beim Lesen wieder fragte, ob sich der Stack nicht noch etwas vereinfachen ließe, indem nicht nur den Firewall-Bouncer, sondern auch Crowdsec selbst auf dem Host laufen lässt (und nicht im Container).
Hallo zusammen,
ich habe die Anleitung auf einem ubuntu Server umgesetzt und bin von der “alten” Anleitung migriert.
Beim Synchronisieren von Daten über die Nextcloud App geht die Verbindung verloren.
Natürlich habe ich auch in crowdsec die Collections und Parser für Nextcloud eingefügt und da Log bereitgestellt.
+——–+———-+——————–+————————————+——–+———+—————————+——–+————+———-+
| ID | Source | Scope:Value | Reason | Action | Country | AS | Events | expiration | Alert ID |
+——–+———-+——————–+————————————+——–+———+—————————+——–+————+———-+
| 105002 | crowdsec | Ip:xxx.xxx.xxx.xxx | crowdsecurity/http-sensitive-files | ban | DE | 3209 Vodafone GmbH | 5 | 3h52m40s | 12 |
| 90001 | crowdsec | Ip:195.178.110.132 | crowdsecurity/http-sensitive-files | ban | BG | 48090 Techoff Srv Limited | 5 | 3h3m42s | 10 |
+——–+———-+——————–+————————————+——–+———+—————————+——–+————+———-+
“xxx” ist meine aktuelle IP
Offenbar wird der Ban durch die Collection http-sensitive-files verursacht.
Kann/soll ich diese Collection einfach weglassen bzw welche Collections empfehlt ihr generell?
Hi,
die bestehende Overleaf-Anleitung funktioniert nicht mehr mit der neuen Konfiguration. Kannst du sie bitte wieder anpassen? Danke.
Ich habe jetzt meinen Main-Server nach der “Komplexen Migration” umgestellt. Hat 1a geklappt! Danke!😀
Hallo,
ich habe ein upgrade durchgeführt, nun funktioniert meine Portainer Oberfläche nicht mehr 🙁
Muss ich hier jetzt neue variablen einsetzten?
Vielen Dank schonmal für eure antworten und lösungen
Nach nur kurzer Zeit ist es mir gelungen meinen kompletten Traefik-Stack problemlos auf die neue Version upzugraden. Sehr gut Arbeit!
An einer Stelle bekomme ich allerdings Fehlermeldungen: Beim Einrichten des Crowdsec-Firewall-Bouncers auf dem Hostsystem. Es gibt einfach nichts aussagekräftiges. Als OS läuft ein Debian 12.
Es geht um Punkt 10.3. und folgende: Ich habe den crowdsec-firewall-bouncer-nftables installiert. (NF-Tables ist übrigens bereits seit Ubuntu 20.10 und Debian 10 Standard). Danach den Access-Token generiert und dann zusammen mit api_url in /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml eingefügt. systemctl enable … funktioniert natürlich, aber das Starten nicht. Ich bekomme einen Exit Code 1. Leider finde ich nicht wirklich verwertbares in den Logs:
journalctl -xeu crowdsec-firewall-bouncer.service:
Dez 28 11:10:22 services systemd[1]: Starting crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec...
░░ Subject: A start job for unit crowdsec-firewall-bouncer.service has begun execution
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░
░░ A start job for unit crowdsec-firewall-bouncer.service has begun execution.
░░
░░ The job identifier is 248656.
Dez 28 11:10:23 services crowdsec-firewall-bouncer[3880235]: time="2025-12-28T11:10:23+01:00" level=info msg="Loading yaml file: '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml' with additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'"
Dez 28 11:10:23 services crowdsec-firewall-bouncer[3880241]: time="2025-12-28T11:10:23+01:00" level=info msg="Loading yaml file: '/etc/crowdsec/additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'"
Dez 28 11:10:23 services crowdsec-firewall-bouncer[3880241]: time="2025-12-28T11:10:23+01:00" level=fatal msg="process terminated with error: bouncer stream halted.
Dez 28 11:10:23 services systemd[1]: crowdsec-firewall-bouncer.service: Main process exited, code=exited, status=1/FAILURE
░░ Subject: Unit process exited
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░
░░ An ExecStart= process belonging to unit crowdsec-firewall-bouncer.service has exited.
░░
░░ The process' exit code is 'exited' and its exit status is 1.
Dez 28 11:10:23 services systemd[1]: crowdsec-firewall-bouncer.service: Failed with result 'exit-code'.
░░ Subject: Unit failed
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
░░
░░ The unit crowdsec-firewall-bouncer.service has entered the 'failed' state with result 'exit-code'.
Dez 28 11:10:23 services systemd[1]: Failed to start crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec.
░░ Subject: A start job for unit crowdsec-firewall-bouncer.service has failed
░░ Defined-By: systemd
░░ Support: https://www.debian.org/support
systemctl status crowdsec-firewall-bouncer.service:
● crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec
Loaded: loaded (/etc/systemd/system/crowdsec-firewall-bouncer.service; enabled; preset: enabled)
Active: activating (auto-restart) (Result: exit-code) since Sun 2025-12-28 11:24:54 CET; 9s ago
Process: 3905021 ExecStartPre=/usr/bin/crowdsec-firewall-bouncer -c /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml -t (code=exited, status=0/SUCCESS)
Process: 3905027 ExecStart=/usr/bin/crowdsec-firewall-bouncer -c /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml (code=exited, status=1/FAILURE)
Process: 3905035 ExecStartPost=/bin/sleep 0.1 (code=exited, status=0/SUCCESS)
Main PID: 3905027 (code=exited, status=1/FAILURE)
CPU: 133ms
Manueller Aufruf:
/usr/bin/crowdsec-firewall-bouncer -c /etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml
INFO[0000] Loading yaml file: '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml' with additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'
time="2025-12-28T11:27:12+01:00" level=fatal msg="process terminated with error: bouncer stream halted"
tail /var/log/syslog:
2025-12-28T11:28:03.492272+01:00 services systemd[1]: Starting crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec...
2025-12-28T11:28:03.507262+01:00 services crowdsec-firewall-bouncer[3910458]: time="2025-12-28T11:28:03+01:00" level=info msg="Loading yaml file: '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml' with additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'"
2025-12-28T11:28:03.507262+01:00 services crowdsec-firewall-bouncer[3910458]: time="2025-12-28T11:28:03+01:00" level=info msg="Loading yaml file: '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml' with additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'"
2025-12-28T11:28:03.635062+01:00 services crowdsec-firewall-bouncer[3910464]: time="2025-12-28T11:28:03+01:00" level=info msg="Loading yaml file: '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml' with additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'"
2025-12-28T11:28:03.635062+01:00 services crowdsec-firewall-bouncer[3910464]: time="2025-12-28T11:28:03+01:00" level=info msg="Loading yaml file: '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml' with additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'"
2025-12-28T11:28:03.727360+01:00 services crowdsec-firewall-bouncer[3910464]: time="2025-12-28T11:28:03+01:00" level=fatal msg="process terminated with error: bouncer stream halted"
2025-12-28T11:28:03.727360+01:00 services crowdsec-firewall-bouncer[3910464]: time="2025-12-28T11:28:03+01:00" level=fatal msg="process terminated with error: bouncer stream halted"
2025-12-28T11:28:03.730811+01:00 services systemd[1]: crowdsec-firewall-bouncer.service: Main process exited, code=exited, status=1/FAILURE
2025-12-28T11:28:03.730811+01:00 services systemd[1]: crowdsec-firewall-bouncer.service: Main process exited, code=exited, status=1/FAILURE
2025-12-28T11:28:03.803384+01:00 services systemd[1]: crowdsec-firewall-bouncer.service: Failed with result 'exit-code'.
2025-12-28T11:28:03.803384+01:00 services systemd[1]: crowdsec-firewall-bouncer.service: Failed with result 'exit-code'.
2025-12-28T11:28:03.804078+01:00 services systemd[1]: Failed to start crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec.
2025-12-28T11:28:03.804078+01:00 services systemd[1]: Failed to start crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec.
2025-12-28T11:28:13.968807+01:00 services systemd[1]: crowdsec-firewall-bouncer.service: Scheduled restart job, restart counter is at 116.
2025-12-28T11:28:13.968807+01:00 services systemd[1]: crowdsec-firewall-bouncer.service: Scheduled restart job, restart counter is at 116.
2025-12-28T11:28:13.969164+01:00 services systemd[1]: Stopped crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec.
2025-12-28T11:28:13.969164+01:00 services systemd[1]: Stopped crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec.
2025-12-28T11:28:14.007842+01:00 services systemd[1]: Starting crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec...
2025-12-28T11:28:14.007842+01:00 services systemd[1]: Starting crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec...
2025-12-28T11:28:14.022716+01:00 services crowdsec-firewall-bouncer[3910733]: time="2025-12-28T11:28:14+01:00" level=info msg="Loading yaml file: '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml' with additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'"
2025-12-28T11:28:14.022716+01:00 services crowdsec-firewall-bouncer[3910733]: time="2025-12-28T11:28:14+01:00" level=info msg="Loading yaml file: '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml' with additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'"
2025-12-28T11:28:14.143666+01:00 services crowdsec-firewall-bouncer[3910739]: time="2025-12-28T11:28:14+01:00" level=info msg="Loading yaml file: '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml' with additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'"
2025-12-28T11:28:14.143666+01:00 services crowdsec-firewall-bouncer[3910739]: time="2025-12-28T11:28:14+01:00" level=info msg="Loading yaml file: '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml' with additional values from '/etc/crowdsec/bouncers/crowdsec-firewall-bouncer.yaml.local'"
2025-12-28T11:28:14.251029+01:00 services crowdsec-firewall-bouncer[3910739]: time="2025-12-28T11:28:14+01:00" level=fatal msg="process terminated with error: bouncer stream halted"
2025-12-28T11:28:14.251029+01:00 services crowdsec-firewall-bouncer[3910739]: time="2025-12-28T11:28:14+01:00" level=fatal msg="process terminated with error: bouncer stream halted"
2025-12-28T11:28:14.254105+01:00 services systemd[1]: crowdsec-firewall-bouncer.service: Main process exited, code=exited, status=1/FAILURE
2025-12-28T11:28:14.254105+01:00 services systemd[1]: crowdsec-firewall-bouncer.service: Main process exited, code=exited, status=1/FAILURE
2025-12-28T11:28:14.335186+01:00 services systemd[1]: crowdsec-firewall-bouncer.service: Failed with result 'exit-code'.
2025-12-28T11:28:14.335186+01:00 services systemd[1]: crowdsec-firewall-bouncer.service: Failed with result 'exit-code'.
2025-12-28T11:28:14.335900+01:00 services systemd[1]: Failed to start crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec.
2025-12-28T11:28:14.335900+01:00 services systemd[1]: Failed to start crowdsec-firewall-bouncer.service - The firewall bouncer for CrowdSec.
Leider kann ich aus keinem der Logs ersehen, was das Problem ist. Hat jemand Tipps für mich?
Vielen Dank für das Update.
Ich freu mich riesig. Vor ein paar Wochen wollte ich schon Mal vorsichtig anfragen, ob zumindest irgendwann ein Update mit dem integrierten Plugin geplant ist und jetzt das hier.
Ein sehr schönes Weihnachtsgeschenk 😀
Da ich immer auf der Suche nach Alternativen bin, habe ich eine Alternative zu Let’s Encrypt aus Europa ausfindig gemacht. Man weiß ja nie was mal kommen wird, ganz besonders in der heutigen Zeit, daher finde ich sowas wichtig. Unsere Daten sind uns ja was wert, deswegen hosten wir ja schließlich selber. Es handelt sich um den italienischen Anbieter Actalis (der übrigens auch kostenfrei SMIME-Zertifikate zur Verfügung stellt, um Emails zu signieren).
Actalis: https://www.actalis.com/custom-registration
Kleiner Wermutstropfen: Es erfordert eine kurze einmalige Anmeldung und es wird leider kein TLS unterstützt, nur HTTP. Trotzdem besser als nichts und kostenfrei ist es auch. Bis September gab es noch den Anbieter buypass. Dieser hat leider den Betrieb für neue Anfragen allerdings eingestellt.
Um Actalis ins eigene Setup mit einzubinden, muss man nur ganz wenig anpassen und wer weiß, wofür es mal gut ist:
In der traefik.yml muss einfach ein weiterer Resolver aufgenommen werden:
certificatesResolvers:
http_resolver:
...
tls_resolver:
...
actalis_http_resolver:
acme:
email: "mail@example.com"
storage: "acme_actalis.json"
caServer: "https://acme-api.actalis.com/acme/directory"
eab:
kid: "KID AUS DEM BENUTZERACCOUNT"
hmacEncoded: "HMAC ENCODED"
httpChallenge:
entryPoint: web
Hier die eigene Emailadresse einfügen, die KID aus dem Benutzerkonto 1:1 hineinkopieren. Die hmacEncoded, muss etwas umgewandelt werden. HMAC natürlich durch die eigene aus dem Benutzeraccount ersetzen:
printf '%s\n' "$(printf '%s' "MEINE HMAC AUS DEM BENUTZERACCOUNT" | tr '+/' '-_' | sed 's/=*$//')"
Der Wert, der hier ausgegeben wird, ist dann der HMAC ENCODED, der oben eingesetzt werden muss.Der Befehl macht nichts anderes, als eventuelle Gleichzeichen (=) am Ende zu entfernen, Pluszeichen (+) in Minuszeichen (-) und Slashes (/) durch Unterstriche (_) zu ersetzen. Geht natürlich genauso gut manuell.
Benutzt wird der das Ganze dann einfach über die Labels im entsprechenden Service.
Vorher:
labels:
...
traefik.http.routers.mein-service.tls.certresolver: http_resolver
# oder
traefik.http.routers.mein-service.tls.certresolver: tls_resolver
...
Nachher:
traefik.http.routers.mein-service.tls.certresolver: actalis_http_resolver
Guten Rutsch wünsche ich 👍
Danke für die neue Anleitung! 🙂
Mir sind noch zwei Kleinigkeiten aufgefallen beim Umstellen meines Servers:
Im traefik.log steht noch eine deprecated-Warnung:
{"level":"warn","time":"2025-12-26T11:39:07+01:00","message":"delayBeforeCheck is now deprecated, please use propagation.delayBeforeChecks instead."} {"level":"info","version":"3.6.5","time":"2025-12-26T11:39:07+01:00","message":"Traefik version 3.6.5 built on 2025-12-16T14:56:48Z"}Bei der dynamischen Traefik-Config besteht dann ein Unterschied zur normalen, neuen Config:
Die “http.middlewares.default.yml” arbeitet dann mit den neuen Dateien “http.middlewares.gzip.yml” und “http.middlewares.default-security-headers.yml”. Das habe ich bei mir glatt gezogen, dass das auf dem gleichen Stand ist. Vielleicht sollte man das in dem Migrations-Teil auch noch ergänzen und ggfs. weitere Änderungen nochmal ergänzen?
Die sind mir nur ins Auge gefallen, weil ich den Anfang mit dem Erstellen der Files geprüft hatte in der neuen Anleitung.
Was für ein Geschenk, vielen Dank für das gute Update. Ich habe gerade mal einen kleinen Server nach der einfachen Migration umgestellt. Hat alles geklappt. Der Server läuft nun mit der neuen Anleitung. In den nächsten Tage werde ich mal meinen Hauptserver umstellen. Das teilweise die Änderungen schon in den Konfigurationsdateien enthalten sind, ist eine sehr gut Idee und macht alles viel einfacher und schneller.
Ganz lieben Dank euch beiden für das Update zum Traefik Crowdsec Stack. Ich werde mein Setup in den nächsten Wochen mit der Migrationsanleitung auf den neusten Stand mit eurer abgleichen 😊