5. Überblick über die Systeme
Bevor wir in die Konfigurationen eintauchen, ist es wichtig zu verstehen, welche Rolle jedes der eingesetzten Systeme in unserem Stack übernimmt:
5.1. Traefik
Traefik ist ein moderner Reverse-Proxy und Load Balancer, der speziell für dynamische und containerisierte Umgebungen wie Docker entwickelt wurde. In dieser Anleitung setzen wir Traefik als Reverse-Proxy ein, um den HTTP-Traffic zwischen Clients und Anwendungen zu steuern und Anfragen basierend auf Domains weiterzuleiten.
Zusätzlich zu seiner Rolle als Reverse-Proxy bietet Traefik jedoch noch weitere leistungsstarke Funktionen:
- Netzwerk-Routing: Traefik kann auf Basis von Regeln (wie z.B. Headern oder Pfaden) Netzwerk-Routen zu den entsprechenden Diensten dynamisch konfigurieren.
- Automatische SSL-Zertifikate: Durch die Integration von Let’s Encrypt können SSL-Zertifikate automatisch verwaltet und erneuert werden.
- Lastverteilung: Traefik bietet Load Balancing zwischen mehreren Instanzen eines Services und sorgt so für eine optimierte Verteilung der Anfragen.
- Monitoring und Metriken: Traefik lässt sich leicht in Monitoring-Systeme wie Prometheus integrieren, um die Performance der Services zu überwachen.
Durch diese Funktionen ermöglicht Traefik die einfache Verwaltung von Netzwerk-Traffic in verteilten Anwendungen und erhöht gleichzeitig die Sicherheit und Verfügbarkeit der bereitgestellten Services.
5.2. Docker-Socket-Proxy
Der Docker-Socket-Proxy agiert als Schutz für den Docker-Socket. Ohne diesen Schutz könnte der Docker-Socket direkt von anderen Anwendungen genutzt werden, was ein Sicherheitsrisiko darstellt (siehe Docker-Dokumentation). Der Proxy sorgt dafür, dass nur ausgewählter und kontrollierter Zugriff auf Docker-APIs möglich ist, um die Angriffsfläche zu minimieren.
5.3. CrowdSec
CrowdSec ist ein Tool zur Erkennung und Reaktion auf Bedrohungen. Es analysiert das Verhalten von Besuchern und erkennt verdächtige Aktivitäten wie Brute-Force-Angriffe oder Port-Scans. CrowdSec überwacht IP-Adressen und entscheidet darüber, welche als bösartig gelten und blockiert werden sollten – ähnlich einer judikativen Instanz, die über Schuld oder Unschuld entscheidet.
5.4. CrowdSec Bouncer
CrowdSec Bouncer sind Module, die auf erkannte Bedrohungen reagieren, indem sie potenziell gefährliche IP-Adressen blockieren. Sie fungieren wie eine exekutive Instanz, die Maßnahmen ergreift, um den Zugriff auf Dienste zu verhindern. Es gibt verschiedene Bouncer, die für unterschiedliche Umgebungen entwickelt wurden, wie z.B.:
- crowdsec-firewall-bouncer: Für die Blockierung auf der Firewall-Ebene.
- traefik-crowdsec-bouncer: Für die direkte Integration mit Traefik.
Ich habe den neuen Stack jetzt am Laufen, und auch schon die alte Nextcloud-Instanz mit dem neuen Stack wieder erreichbar, vielen Dank für die hilfreiche Anleitung und vor allem für das Skript. Ich musste es etwas anpassen, weil ich nicht in /opt installiere, da ich die Container nicht auf dem USB-Stick haben will, der mein Boot-Medium ist (OpenMediaVault), aber danach hat es funktioniert.
Lediglich ein Problem tritt gelegentlich auf, und zwar dass ich selbst gebannt werde. Gibt es eine einfache Möglichkeit, Anfragen von der eigenen öffentlichen IP-Adresse (DynDNS) immer durchzulassen? Also dynamisch, ohne dass ich jetzt meine IP in der Whitelist eintrage, weil die sich ja jederzeit ändern kann? Wenn ich von Außerhalb zugreife ist das dann halt so, weil ja nicht klar sein kann, dass die Anfrage von mir ist, aber wenn ich zu Hause bin, dann ist das ja die gleiche IP unter der der Server auch zu erreichen ist, das ist doch bestimmt machbar.
Viele Grüße
Mir fällt jetzt gerade noch was auf..
daemon.json -> “base”: “172.25.0.0/14″ ist für v4 so glaube ich nicht richtig.
Es handelt sich dabei um eine Adresse aus dem 172.24.0.0/14 Netzwerk.
Auch wenn es funktioniert, (docker scheint es richtig zu interpretieren, jedenfalls gehen die Netze/Ips mit 172.24. los) würde ich hier wie folgt eintragen “172.24.0.0/14”
Dann passt auch bei einer Size 23 die 512(-2) Hosts bzw verfügbare IP Adressen pro Netzwerk.
Danke Gruss Marco
Hallo Christian, mal wieder eine super Anleitung! Ich habe die neue V3 Anleitung in einen separaten Ordner aufgebaut, meine spezifischen Änderungen wie IPWhitelist, Telegram Alerting, Collections usw. in die Config Files eingepflegt. Dann die alte Umgebung runtergefahren, die neue gestartet, lief auf Anhieb.
Frage: Hast du IPv6 getestet?
Danke Gruss Marco
Hallo und eine kurze Frage: ist es geplant, den Cloudflaretunnel mit in die Konfiguration zu übernehmen?
Authelia Integration in Traefik-Crowdsec-Stack (Traefik3)
Anlegen von Verzeichnissen.
Erstellen der Secrets
Das Secret authelia_notifier_smtp_password enthält euch Password zum Email Account wenn Ihr SMTP Notifications nutzen wollt.
Wenn ihr File Notifications nutzen wollte dann lasst dies bitte weg.
Ergänzen der docker-compose.yml
—
—
Erstellen der .env File in /opt/containers/traefik-crowdsec-stack/data/authelia/
Legt hier bitte eine .env File mit folgendem Inhalt an.
—
—
Erstellen authelia.yml im compose Verzeichnis.
nano /opt/containers/traefik-crowdsec-stack/compose/authelia.yml
—
…
Erzeugen Traefik Middelware Yml für Authelia.
Erzeugt im Verzeichnis /opt/containers/traefik-crowdsec-stack/data/traefik/dynamic_conf
eine Datei http.middlewares.middlewares-authelia.yml mit folgendem Inhalt.
—
—
Erzeugen der Authelia Configuration in /opt/containers/traefik-crowdsec-stack/data/authelia/config
mit nano /opt/containers/traefik-crowdsec-stack/data/authelia/config/configuration.yml die entsprechende Datei erstellen.
Inhalt:
—
—
Mit diesem Befehl erzeugt ihr den Hash für Euren User:
den angezeigten String tragt ihr dann in die users.yml ein als password:
Mit nano /opt/containers/traefik-crowdsec-stack/data/authelia/config/users.yml die entsprechende Datei erstellen.
Inhalt:
—
—
Nach dem ihr dann alle Container mit docker compose -up -d –force-recreate neugestartet habt, ruft ihr
eure Authelia domain auf auth.domain.tld und log euch mit den angelegten Zugangsdaten ein.
Durch den rest führt euch dann Authelia. Beachtet der 6 stellige Code der angefordert wird wird euch in der Notification.txt im config Verzeichnis angezeigt.
Nach dem erfolgreichen Anlegen des 2FA könnt ihr nun folgende Anpassungen vornehmen:
Manuelle Anpassungen an der traefik.yml im /compose
um Traefik hinter die Authelia Middleware zu bekommen muss folgende Zeile angeasst werden.
Original:
traefik.http.routers.traefik-dashboad.middlewares: default@file,traefik-dashboard-auth@file
Angepasst:
traefik.http.routers.traefik-dashboad.middlewares: default@file,middlewares-authelia@file
Macht das bitte erst wenn euer Authelia Container läuft und ihr euch bei Authelia mindestens einmal angemeldet habt.
alternativ kann man hier auch eine traefik.override.yml anlegen.
nach einem erneuten restart mit
docker compose up -d –force-recreate
und ein paar minuten Wartezeit sollte sich beim Aufruf eurer Traefik Domain nun erst Authelia melden.
Ich hoffe ich habe dies nun vollständig dokumentiert. Falls doch was schiefgehen sollte fragt einfach.
Ich habe dies auch gleichzeitig an Psycho0verload geschickt zur Prüfung und ggf einbau in den Stack.
Tag zusammen, habe gestern Abend die Anleitung genauestens ausgeführt. Aber ich bekomme außer Traefik-Dashboard keinen meiner Services von außen erreicht. Auch wenn ich zB meine Portainer Installation wie hier beschrieben einbinde, keine Chance. Das ganze hängt hinter CloudFlare und ich bekomme nen 525er also SSL Handshake, oder auch gar keine Response.
Im Traefik.log stehen bei den Certificates 403er Fehler.
Werd irre, hat jemand nen Tip was ich noch schauen kann?
Moin Moin,
ist geplant vom traefik-crowdsec-bouncer auf das neue traefik-crowdsec Plugin zu wechseln ? (https://plugins.traefik.io/plugins/6335346ca4caa9ddeffda116/crowdsec-bouncer-traefik-plugin)
Ich werde mich auch die Tage mal dort einlesen 😀
Hallo. Super Anleitung. Ich starte nun mal, um meine bestehende, nach der alten Anleitung, erstellte Traefik/Crowdsec Installation anzupassen (inkl. Mailcow 10 Projekte, WordPress, Portainer, Nextcloud etc.). Nach meinem Verständnis muss ich “Traefik-Crowdsec-Stack” in erster Linie total neu erstellen. Die übrigen Projekte kann ich danach wieder in Betrieb nehmen mit den entsprechenden Anpassungen in der docker-compose.yml resp. zusätzlich der override-Datei (Mailcow) und alte (teilweise unnötige) Cronjobs anpasse. Dafür sollte die gesamte Traefik-Crowdsec-Stack gelöscht werden und danach nach der neuen Anleitung aufgesetzt werden. Dabei werden ja auch alle bestehenden Zertifikate gelöscht (acme_letsencrypt.json) und beim neuen Start des jeweiligen alten, angepassten docker-compose Projekt neu erstellt. Sind noch weitere Stolpersteine (z.Bsp. Crowdsec Bouncer Firewall etc.) vorhanden, welche vor der neuen Traefik V3 Installation deinstalliert/gelöscht werden sollten? Danke für kurze Rückmeldung.
Hallo,
TRAEFIK V2 habe ich bereits erfolgreich eingesetzt nach entsprechender Anleitung.
Nun habe ich TRAEFIK V3 nach dieser Anleitung aufgesetzt, das kann aber nicht funktionieren: Ich benötige traefik (und später die folgenden docker-Installationen für wiki u.a.) nur in einem internen Netz, wo Let’s Encrypt nicht funktioniert.
Wie/Wo muss ich Anpassungen vornehmen, und traefik nutzen zu können?
Danke für die super Anleitung! Ich würde gerne, wie bei der „alten“ Anleitung, das Dashboard mit Authelia absichern. Hat das schon jemand zum Laufen gebracht? Oder, noch besser: Gibt es eine OIDC-Integration für den Zugriff auf das Dashboard?
Hi, erstmal vielen Dank für die ausführliche Anleitung psycho0verload .
Ein Frage habe ich und vielleicht kann mir die hier jemand beantworten.
Meine Domains habe ich alle bei Cloudflare liegen. Beim neu einrichten mit Traefik 3 ist mir jetzt aufgefallen, das die Domain mit aktiviertem Proxy Modus bei Cloudflare nicht erreichbar ist.
Laut Traefik Log gibt es einen Fehler mit dem TLS
Würde den schon sehr gerne weiter nutzen allein der DDos Schutz ist es wohl wert.
Ich hoffe mal das es nur ein Config Problem ist und jemand hier den entsprechenden Tip für die Lösung geben kann.
Danke
Ich hab mich jetzt doch ran gewagt und alles manuell von neuem gemacht. Im Prinzip klappt alles. Aktuell läuft mein Portainer halt noch nicht über den Socket-Proxy, aber das kann man ja noch nachjustieren.
Was aber nicht funktioniert ist das Updaten von Crowdsec. Im Crontab hab ich folgendes drin stehen (wie in der Anleitung): docker compose -f /opt/containers/traefik-crowdsec-stack/docker-compose.yml restart crowdsec
Der Container mag aber nicht neu starten – der Fehler lautet: env file /root/data/socket-proxy/.env not found: stat /root/data/socket-proxy/.env: no such file or directory
Komme aktuell nicht drauf wo es hakt. Bin über Tipps dankbar! 🙂
psycho0verload die Benennung der dynamic confs hat einen bestimmten sind, dies erkenne ich allerdings erschließt sich mir noch nicht wie traefik das erkennt in welche Datei er gehen soll beispiel hast du geschrieben
http.middlewares.default.yml
und in der Config von traefik selber
default@file
geht Traefik dann einfach durch alle Dateien ? oder wie ist das zu sehen.
versuche gerade meine gesamte Config auf die neue zu übertragen, aber aktuell sehe ich nicht durch weil ich überall irgendwie was geändert habe
Eine Frage psycho0verload, da ich mich gerade in der Vorbereitung zum Upgrade befinde:
Aktuell habe ich in meiner dynamic-conf.yml einen weiteren Router eingerichtet, der auf mein NAS verweist, um auch dieses via Traefik und Crowdsec abzusichern.
Erstelle ich hierfür eine weitere YML-Datei, die ich in die Docker compose integriere oder packe ich das in eine bestehende dazu?
Da wir die ursprüngliche dynamic conf nun auf mehrere Teile aufgeteilt haben, ist mir das nicht ganz klar.
routers:
qnap:
service: qnap
rule: “Host(
abc.de
)”entryPoints:
– websecure
tls:
certResolver: http_resolver
services:
qnap:
loadBalancer:
servers:
– url: http://192.168.000.00:8080
nextcloud:
loadBalancer:
servers:
Hallo nochmal,
nehmt mir auch folgende Frage nicht übel, ich lerne mich noch in das ganze Thema ein. Kann ich eigentlich auch eine Traefik-Instanz für mehrere Webserver nutzen, oder muss ich auf jedem Server eine eigene Instanz aufsetzen?
Danke und viele Grüße
Moin,
mal eine Frage zu Crowdsec in diesem Stack. Im Moment trudeln bei mir ständig Nachrichten ein, das jemand aus dem bösen Internet meinen mailcow Server inspiziert. Das ist ja nichts ungewöhnliches. Dafür gibt es ja den den Crowdsec. mittels
werden die bösen IPs auch angezeigt, jedoch bekomme ich zur Zeit gerade wirklich viele Wiederholungstäter mit der gleichen IP (klar, die werden wahrscheinlich verschleiert) jetzt wollte ich mittels iptables -L -v -n mal nachsehen, ob die auch wirklich auf dem System gesperrt sind. Leider zeigt mir diese keinen einzige von den gesperrten IP im System an? Es werden mir nur die manuell gesperrten IP in der mailcow Konfiguration angezeigt (Chain MAILCOW). Wie kann ich nun feststellen ob das System richtig arbeiten und meine Installation wirklich durch Crowdsec geschützt ist?
Vielen Dank psycho0verload für die geile Anleitung 😀 Du hast dich echt nochmals selbst übertroffen 😃
Erhalte in ‘Portainer Business Edition 2.21.3’ folgende Fehelermeldung:
Guten Morgen,
entschuldigt bitte die doofe Frage, aber ich komme einfach nicht weiter. Ich bekomme mit der neuen Anleitung weder Traefik noch Mailcow zum Laufen. Muss ich die IPV6 an meinen Server anpassen, oder kann ich diese so wie in der Anleitung übernehmen?
psycho0verload
Mein Feedback.
Bin heute umgestiegen. Backup alter Server. Neuinstallation Ubuntu 24.X.
Nach Anleitung vorgegangen. Anschl. Mailcow neu installiert und restore der Daten.
Danach aus dem Borgbackup alle Container wieder hergestellt.
System läuft nun einwandfrei. Mir fiel nur die hohe Anzahl der Bans auf.
39 aktive Bans hatte ich noch nie. 🙂 Port 22 war aber auch lange offen 🙂
Vielen Dank für die gute Anleitung.
steje
Die Entscheidung, welche Domain du verwendest, liegt ganz bei dir und deinem individuellen Setup. Ob du dich für eine Second-Level-Domain oder eine Third-Level-Domain entscheidest, bleibt dabei dir überlassen. 😊
Lass uns gerne im Mailcow-Beitrag genauer anschauen, wo das Problem liegt bzw. an welcher Stelle das Zertifikat fehlt. Das gehört primär nicht zu diesem Thema hier.
Vielen Dank für die Anleitung! Hat seitens der Anleitung problemlos Funktioniert.
Zwei Anmerkungen.
Kapitel 7.5.1 (@all)
Ich hab beim ausführen von “docker compose up crowdsec -d && docker compose down” folgende Fehlermeldung erhalten.
WARN[0000] The “PWD” variable is not set. Defaulting to a blank string.
Danach ist crowdsec nicht gestartet.
Das lag bei mir am Terminal. Eine Möglichkeit das Problem zu umgehen ist den Befehl mit “-E” zu modifizieren.
Neuer Befehl: -E docker compose up crowdsec -d && docker compose down
Zusatz: Ich arbeite mit Sudo, da ich nicht root bin. Weiß nicht inwiefern das damit zusammenhängt.
Kapitel 8.1. ( psycho0verload )
Bei der Referenzierung auf die URL vom Traefik Dashboard bitte den Kaptielschritt referenzieren in dem wir die URL festlegen.
Ich hatte die URL als allgemein URL im Kopf abgespeichert und war kurz verwirrt als wir plötzlich von der spezifischen Traefik Dashbord URL gesprochen haben.
Auch von mir ein ganze großes Dankeschön! Super geschrieben und richtig informativ. Alleine die ersten 5 Seiten enthalten so viele wichtige Informationen, dass es alleine das schon Wert ist zu lesen. Da werde ich mich in nächster Zeit mal dran machen 😀
Super die Anleitung vielen Dank für deine Arbeit. Da ist es wirklich zu überlegen Traefik neu aufzusetzen.
Wow, da hast du wirklich ein gigantisches Meisterwerk erstellt.
Ich überlege, ob ich meine alte Traefik config kille und diese neu aufsetzte oder auf deine Migrationsanleitung warte.
Ein großes Kompliment und Dankeschön für die neue Anleitung. Freue mich auf die Migrationsanleitung, da ich mein System gerne auf den aktuellen Stand bringen möchte. 🙂