Versionierung
| Datum | Änderung |
|---|---|
| 30.12.2025 | Die Code-Highlight-Funktion wurde deaktiviert. Dadurch ist die Anleitung aktuell nur eingeschränkt nutzbar. |
| 28.12.2025 | Entfernen des doppelten Middleware aufrufs in Kapitel 7.4.3. “Konfiguration von http.middlewares.*” Hat keine Auswirkungen auf bestehende Setups! |
| 27.12.2025 | Entfernen von Kapitel 10.5: “Mailcow anpassungen” |
| Kapitel 7.4.4. Formatierung korrigiert | |
| Kapitel 13.1. ergänzt | |
| Kapitel 10.4. “Logrotate für Traefik” korrigiert. Bitte Logrotate nochmals neu setzten! | |
| Kapitel 12.2.5. “Statische Konfiguration von Traefik” korrigiert. Bitte den Abschnitt mit accessLog in eurer Konfiguration austauschen! | |
| 24.12.2025 | Initialer Release |
WICHTIG!
Diese Anleitung orientiert sich bewusst an der bestehenden Anleitung, da die grundlegenden Konzepte und Konfigurationen weiterhin identisch geblieben sind. Ziel ist es, den Umstieg so einfach und nachvollziehbar wie möglich zu gestalten.
Am Ende dieser Anleitung wird ein eigenes Migrationskapitel ergänzt, das den Wechsel von der bisherigen auf diese neue Anleitung beschreibt. Obwohl in einer vollständig neu konzipierten Anleitung einzelne Details anders umgesetzt werden könnten, behalten wir zentrale Punkte wie IP-Adressen innerhalb des Docker-Setups sowie bestehende Pfadstrukturen bewusst bei, um eine möglichst reibungslose Migration zu ermöglichen.
0. Testing
Ich versuche, diese Anleitung so aktuell wie möglich zu halten. Die Kompatibilität der beschriebenen Schritte sowie der dazugehörigen Konfigurationen kann im zugehörigen GitHub-Repository eingesehen werden. Grundsätzlich empfehle ich, das GitHub-Repository erst dann direkt zu verwenden, wenn diese Anleitung bereits mehrfach durchgearbeitet wurde oder bereits fundierte Erfahrung im Bereich Server- und Docker-Administration vorhanden ist.
Aktuell kann ich das Repository jedoch nicht immer zeitnah an jede inhaltliche Anpassung der Anleitung anpassen. Der Abgleich zwischen Anleitung und Repository wird daher schrittweise erfolgen, sobald es der zeitliche Rahmen zulässt. Die Anleitung selbst stellt weiterhin die maßgebliche Referenz dar.
Repository:
https://github.com/psycho0verload/traefik-crowdsec-stack
1. Zielsetzung
In dieser Anleitung richten wir Traefik v3 als Reverse Proxy ein und konfigurieren ihn für den produktiven Einsatz. Ergänzend installieren und konfigurieren wir CrowdSec, um unsere Umgebung um zusätzliche Sicherheitsmechanismen zu erweitern.
Wir zeigen, wie wir unsere Services über Traefik bereitstellen und diese gezielt über CrowdSec absichern. Dabei setzen wir bewusst auf einen zentralen Stack, der Traefik, CrowdSec und die notwendige Integration übersichtlich zusammenführt.
Ziel ist es, eine nachvollziehbare und praxisnahe Grundlage zu schaffen, mit der wir unsere Services sicher, strukturiert und wartbar über Traefik verfügbar machen.

2. Voraussetzung
Um die Installation und Konfiguration von Traefik v3 und CrowdSec durchzuführen, müssen die folgenden Systemanforderungen erfüllt sein:
- Ubuntu 24.04 LTS – “Noble”, Debian 12 LTS – “Bookworm” oder Debian 13 LTS – “Trixie”
- Docker version 27.x
- Docker Compose version v2.28.x
root-Rechte auf dem Zielsystem
Diese Anleitung basiert auf einer persönlichen Testumgebung, in der hauptsächlich mit der aktuellen Ubuntu-Version gearbeitet wird. Der gesamte Prozess wird jedoch auch auf der jeweils aktuellen Debian-Version getestet und entsprechend bereitgestellt.
Für die Installation von Docker verweisen wir bewusst auf die offizielle Docker-Dokumentation:
• Für Debian: https://docs.docker.com/engine/install/debian/
• Für Ubuntu: https://docs.docker.com/engine/install/ubuntu/
Die Dokumentation ist zwar in englischer Sprache verfasst, lässt sich jedoch problemlos mit Übersetzungstools wie deepl.com nutzen. Zudem beschränkt sich die Installation in der Praxis auf eine überschaubare Anzahl von Befehlen, die in der Regel direkt übernommen werden können.
Es ist möglich, dass diese Anleitung auch mit älteren Versionen von Ubuntu oder Debian funktioniert. Dies wird jedoch nicht explizit getestet oder zugesichert.
Wichtiger Hinweis:
ALLE Befehle werden als root-User ausgeführt!


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 😊