
Traefik V3: Installation, Konfiguration und CrowdSec-Security
3. Grundlage: Netzwerke in Docker
[ihc-hide-content ihc_mb_type=“show“ ihc_mb_who=“3,4″ ihc_mb_template=“1″ ]
Table Of Content
- Versionierung
- WICHTIG!
- 0. Testing
- 1. Zielsetzung
- 2. Voraussetzung
- 2.1. Hinweis
- 3. Grundlage: Netzwerke in Docker
- 3.1. Private Adressbereiche in IPv4
- 3.2. Adressbereiche in Docker
- 3.3. Verständnis der Netzwerkproblematik
- 3.4. Lösung
- 4. Netzwerke konfigurieren
- 4.1. Vorbereitung
- 4.2. Docker Konfigurieren anpassen
- 4.3. Ergebnis
- 4.3.1. IPv6-Konfiguration
- 5. Überblick über die Systeme
- 5.1. Traefik
- 5.2. Docker-Socket-Proxy
- 5.3. CrowdSec
- 5.4. CrowdSec Bouncer
- 6. Stack vorbereiten
- 6.1. Hauptverzeichnis erstellen und in das Verzeichnis wechseln
- 6.2. Dateien erstellen und Berechtigungen setzen
- 6.3. Überprüfung
- 7. Stack konfigurieren
- 7.1. docker-compose.yml-Datei
- 7.2. compose-Dateien
- 7.3. DOTENV anpassen
- 7.3.1. Allgemeine .env-Datei
- 7.3.2. .env-Datei für CrowdSec
- 7.3.3. .env-Datei für den Socket-Proxy
- 7.3.4. .env-Datei für den CrowdSec Bouncer für Traefik
- 7.3.5. .env-Datei für Traefik
- 7.3.6. API Key für den CrowdSec Bouncer für Traefik generieren
- 7.4. Traefik konfigurieren
- 7.4.1. Konfiguration der traefik.yml
- 7.4.2. Konfiguration von TLS
- 7.4.3. Konfiguration von http.middlewares.default.yml
- 7.4.4. Konfiguration von http.middlewares.traefik-dashboard-auth.yml
- 7.4.5. Passwort für Traefik-Dashboard festlegen
- 7.4.6. Konfiguration von http.middlewares.traefik-bouncer.yml
- 7.4.7. Integration des Bouncers in traefik.yml
- 7.5. CrowdSec konfigurieren
- 7.5.1. Acquisition anpassen
- 8. Dienst starten
- 8.1. Checkliste
- 9. Traefik-CrowdSec-Stack überprüfung
- 10. Optional
- 10.1. CrowdSec aktuell halten
- 10.2. Traefik-CrowdSec-Stack Update
- 10.3. Erweiterung der Firewall (UFW bzw. IPTables und NFTables) mit CrowdSec
- 10.3.1. Repository für CrowdSec Firewall Bouncer
- 10.3.2. Installation des Firewall Bouncers
- 10.3.3. Access Token generieren
- 10.3.4. Bouncer konfigurieren
- 10.3.5. CrowdSec Firewall Bouncer starten
- 10.3.6. Anzeigen der CrowdSec Bouncer-Liste
- 10.4. Logrotate für Traefik
- 10.5. Mailcow anpassen
- 11. Neuen Container hinzufügen
- 11.1. TLS anstelle von HTTP
- 99. Anleitung in 2 Minuten
- Hinweis zu Kommentaren
- Author: Psycho0verload
Zugegeben, das Thema, dem ich mich hier kurz widmen möchte, mag für viele Leser weit über das hinausgehen, was sie für ihre Projekte benötigen. Dennoch ist es ein wichtiges Thema, das erklärt, warum ich Dinge so definiere, wie ich sie definiere.
3.1. Private Adressbereiche in IPv4
Die Internet Assigned Numbers Authority (IANA) hat drei Bereiche für private Netzwerke zugewiesen:
Adressbereiche für die Nutzung in privaten Netzwerken sind:
https://www.ibm.com/docs/en/networkmanager/4.2.0?topic=translation-private-address-ranges
- Klasse A: 10.0.0.0 bis 10.255.255.255
- Klasse B: 172.16.0.0 bis 172.31.255.255
- Klasse C: 192.168.0.0 bis 192.168.255.255
Alles außerhalb dieser Bereiche sollte als öffentlich betrachtet werden und könnte daher einem externen Host gehören.
3.2. Adressbereiche in Docker
In der Docker-Dokumentation ist nicht eindeutig ersichtlich, welche Adressbereiche für Docker-Netzwerke verwendet werden. Es gibt jedoch ein Ticket auf GitHub, das die Adressbereiche gut dokumentiert:
The analogous default for local networks (
dockerd --default-address-pool
) is not currently represented in the documentation. The defaults are as follows (including swarmglobal
networks as well for reference):
Type Default Size Default Pool global /24 10.0.0.0/8 local /16 172.17.0.0/12 local* /20 192.168.0.0/16 Github.com
- Local networks are allocated from 172.17.0.0/12, and then 192.168.0.0/16 once 172.17.0.0/12 is exhausted.
3.3. Verständnis der Netzwerkproblematik
An dieser Stelle benötigen wir ein besseres Verständnis von Netzwerken. Auch wenn dies für manche Leser umfassend sein mag, möchte ich die Problematik dennoch erklären. In den Punkten 3.1 und 3.2 wird gezeigt, dass wir im Bereich der privaten Netzwerke nur bestimmte Adressbereiche nutzen können. Dies ist jedoch kein Problem, da die Bereiche für private Netzwerke sehr groß sind:
- 172.16.0.0 bis 172.31.255.255: 1.048.544 nutzbare IP-Adressen
- 192.168.0.0 bis 192.168.255.255: 65.534 nutzbare IP-Adressen
In der Docker-Konfiguration stehen uns am Ende 32 Netzwerke zur Verfügung. Einfach ausgedrückt, sind das 32 Projekte mit eigenen Docker-Netzwerken oder 32 Docker-compose.yml-Dateien. Zwar muss man erst einmal 32 Projekte auf einem einzigen Server haben, aber die Erfahrung zeigt, dass der Adresspool pro Projekt viel größer ist als nötig. Dazu kommt das Problem, wenn Docker-Netzwerke bestehen bleiben, aber nicht mehr genutzt werden. Am Ende möchte man ein Projekt starten und es kommt zu einem Fehler, wie zum Beispiel:
failed to create network project_default: Error response from daemon: cannot create network 6b724a281c242df708982181fe36770258ebe8d22a8d917ec44dc237d11f646a (br-6b724a281c24): conflicts with network 45f702eb80e0310c508217448d923c8d9b303a28a37dcd0d98fd18d8705b3d44 (br-45f702eb80e0): networks have overlapping IPv4
Ein weiterer Punkt, den man wissen muss, ist, dass IP-Adressen innerhalb von Docker immer neu vergeben werden. Dies führt dazu, dass jedes Mal, wenn wir den Traefik-Container neu starten, der Reverse Proxy eine neue IP-Adresse im Docker-Netzwerk erhält. Es kann vorkommen, dass der Traefik-Container nicht dieselbe IP-Adresse wie zuvor erhält. Dadurch funktionieren Projekte, die auf eine feste Erreichbarkeit via IP-Adresse von Traefik angewiesen sind, nicht mehr. Dasselbe gilt für den CrowdSec-Container. Die Hostnamen, die wir innerhalb der Docker-Netzwerke vergeben, funktionieren ebenfalls nur innerhalb dieser Netzwerke und bergen daher Probleme.

3.4. Lösung
Um die genannten Probleme zu vermeiden, nehmen wir folgende Konfigurationen vor:
- Anpassen des Docker-Adressbereichs
Wir verkleinern den Docker-Adress-Pool, um die Adressbereiche pro Docker-Netzwerk überschaubarer zu machen. Statt 65.534 IP-Adressen, die wir wahrscheinlich nie benötigen, reduzieren wir auf 512 verfügbare Adressen. Dies ist auch für einzelne Projekte noch großzügig bemessen. Dabei achten wir darauf, dass sich der Adressbereich nicht mit Mailcow überschneidet, falls Leser dieses Tool verwenden möchten. - Festdefinierter Adressbereich für Traefik und Crowdsec
Wir richten für Traefik und Crowdsec eigene Adressbereiche ein, die außerhalb des Docker-Adressbereichs liegen. Dadurch vermeiden wir Überschneidungen zwischen Projekten und den Netzwerken von Traefik und Crowdsec. - Feste IP-Adressen am Ende des verfügbaren Adressbereichs
Innerhalb ihrer eigenen Netzwerke erhalten die Crowdsec- und Traefik-Container jeweils die letzten beiden Adressen im Netzwerk. So sind sie stabil und fest erreichbar, unabhängig davon, wie viele Projekte dem Netzwerk hinzugefügt werden.
[/ihc-hide-content]
No Comment! Be the first one.