99. Anleitung in 2 Minuten
Falls wir diese Anleitung bereits mehrfach durchgearbeitet haben oder den gesamten Aufbau sowie die Funktionsweise des Traefik-CrowdSec-Stacks grundsätzlich verstehen, gibt es eine deutlich schnellere Abkürzung.
Alle im Rahmen dieser Anleitung erstellten Dateien und Konfigurationen stehen in einem Git-Repository zur Verfügung. Das Repository kann direkt ausgecheckt und mit nur wenigen Anpassungen produktiv genutzt werden. Dadurch entfällt die manuelle Erstellung der einzelnen Dateien und Konfigurationen, was den Einstieg erheblich beschleunigt.
Repository:
https://github.com/Psycho0verload/traefik-crowdsec-stack
Aktuell kann das Repository jedoch nicht immer zeitnah an jede inhaltliche Anpassung dieser Anleitung angepasst werden. Der Abgleich zwischen Anleitung und Repository erfolgt daher schrittweise, sobald es der zeitliche Rahmen zulässt. Die Anleitung selbst stellt weiterhin die maßgebliche Referenz dar.
Hinweis: Über Unterstützung in Form von ⭐ Sternen, Issue-Tickets oder Pull-Requests freue ich mich sehr, insbesondere wenn Verbesserungen oder Fehler auffallen. Auch Christian, der uns diese großartige Webseite zur Verfügung stellt, freut sich über Feedback und Unterstützung.
Viel Spaß mit dem optimierten Setup 🚀
Hinweis zu Kommentaren
Wenn etwas nicht funktioniert, gehe noch einmal alle einzelnen Punkte in der Anleitung durch. Ich habe die Anleitung mehrfach getestet und Christian hat sie auch durchgesehen. Wenn du sicher bist, dass du alles richtig konfiguriert hast und das noch einmal überprüft hast, dann hinterlasse gerne einen Kommentar. Der Blog wird von Christian betrieben und er, sowie alle Co-Autoren, bemühen uns, alle Fragen und Probleme zu lösen – allerdings ist dies auch immer von unserer verfügbaren Zeit abhängig!
Bitte abonniert GoNeuland, damit dieser Blog uns auch weiterhin viele Jahre Freude bereiten kann 😉

Hallo,
vielen Dank für die Anleitung.
Kann mir jemand erklären, warum ein externer Testangriff durchgeht?
https://reqbin.com/curl
curl -v “https://dozzle.URL.de/?search=<script>alert(‘TEST’)</script>”
Ich habe sehr viel getestet und die Anleitung auf einem neuen Server (Debian 13) Schritt für Schritt befolgt.
Auch Crowdsec habe ich auf LogLevel DEBUG gestellt.
Es sieht so aus, als ob der “Angriff” trusted ist und gar nicht erst kontrolliert wird.
Daraufhin habe ich die trusted IPS einfach komplett aus crowdsec entfernt.
Das Ergebnis bleibt leider gleich.
Danach testete ich die appsec.yaml zu ändern
von:
crowdsecurity/appsec-default
auf:
crowdsecurity/virtual-patching
Auch alle genannten Kontrollen sind positiv.
Die Dienste laufen.
Die Regeln sind geladen.
Am Ende habe ich alles wieder wie in der Anleitung hergestellt, weil ich nie einen Unterschied sah.
Ich bin für Aufklärung und Hilfe dankbar.
Hallo, danke für die Anleitung, die auch erst funktionierte, aber nach einem Neustart des Servers gar nicht mehr geht.
Ich komme schon nicht mehr auf das Traefik dashboard:
Sie besitzen keine Benutzerrechte zum Anzeigen dieser Seite.HTTP ERROR 403
Habt ihr dafür eine Erklärung?
Und wie kann ich das erstellte Backup wieder ausrollen?
Vielen Dank für die neue Anleitung. Ich habe eine kleine Frage – ich glaub ich steh da irgendwo auf dem Schlauch. Seit ich auf das neue Setup umgestellt habe, bekomme ich der Crowdsec Konsole immer den Hinweis, dass 1 Remedation Component inactiv ist (vgl. Bild).
Wenn ich jedoch die Metrics eingebe, scheint dieser Firewall sehr wohl in Betrieb – auch die Statusüberprüfung von Crowdsec-Firewall ergibt, dass dieser aktiv ist… (sowohl in der Bouncers List unter derselbek IP wie auch im systemctl “active and running”.
Hat jemand eine Idee? Ist dies eine falsche Angabe in der Konsole? Installiert ist der firewall-nftables-firewall-bouncer…. oder alternativ werde ich den Server neu aufsetzen….
an Christian: ist das 2 Minuten Script zwischenzeitlich aktuell? Ist evtl. noch ein alter Firewall aus der”alten” Konfiguration/Anleitung aktiv? Ich habe nach der Schnellanleitung umgestellt……
Nachtrag: Habe den Fehler gefunden…. Habe die Umstellung (einfache Variante) nicht sauber gemacht…. Dadurch war immer noch der alte Firewall-Bouncer auf Ebene der IP der VM aktiv (nicht in App). Dadurch hatte ich 2 Bouncer…. Dies ist durch zuviel “copy-paste” bei den middlewares etc. bei der Umstellung passiert…. Habe nun die Umstellung nochmals genau nach Anleitung durchgeführt und alles paletti.
Erst einmal vielen Dank für die Arbeit, die Du hier rein gesteckt hast.
Ich habe mal alles durchgelesen und finde die Änderungen grundsätzlich gut.
Als Migrationspfad hast Du ja geschrieben, am besten einmal neu aufsetzen. Das wäre die sauberste Lösung.
Ich habe allerdings noch ein Setup mit Traefik V2.X. Frei nach dem Motto “Never change a running system…” Gilt Deine Aussage auch hier? Einmal neu installieren und sauber hochfahren?
Oder muss ich noch Anpassungen in der Konfiguration der einzelnen Dienste machen? Wenn ja, wie sähen die dann aus?
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 😊