Docker-Netzwerk-Isolation
Was dieser Artikel über Docker-Netzwerk-Isolation behandelt
- Standard-Bridge und benutzerdefinierte Netze.
- Interne Netzwerke ohne externe Kommunikation.
- Netzwerksegmentierung in Compose.
- Sicherheitsvorteile der Isolation.
- Tipps für saubere Netzwerkarchitekturen.
Einleitung: Docker-Netzwerk-Isolation
In Docker laufen viele Container oft auf demselben Host. Ohne Isolation können Container sich gegenseitig sehen, anpingen und über offene Ports miteinander kommunizieren. Für sicherheitskritische Setups ist das problematisch. Docker bietet verschiedene Netzwerk-Typen, mit denen man Container voneinander trennen kann. Wer Datenbanken, APIs und öffentliche Web-Container in getrennte Netze legt, verringert das Risiko und erhält eine übersichtlichere Infrastruktur.
Dieser Artikel zeigt, wie man Docker-Netzwerke isoliert.
Wichtige Begriffe
- Bridge: Standard-Netzwerktyp in Docker.
- Overlay: Netzwerk für Swarm-Cluster.
- Host: Container nutzt Netzwerk des Hosts.
- None: Kein Netzwerk.
- Internes Netzwerk: Keine externe Kommunikation.
- Segmentierung: Aufteilung in logische Netz-Bereiche.
- Microsegmentation: Feine Isolation pro Dienst.
- Default-Bridge: Docker-Standardnetzwerk.
Standard-Bridge
Standardmässig landen alle Container im bridge-Netzwerk. Sie können sich über IPs erreichen, solange keine Firewall dazwischen ist. Das ist bequem, aber unsicher.
docker network ls
Benutzerdefiniertes Netzwerk
docker network create app-net
Container nur in diesem Netzwerk können sich über DNS-Namen erreichen:
docker run -d --name web --network app-net nginx
docker run -d --name db --network app-net postgres
Internes Netzwerk
Interne Netzwerke haben keinen externen Zugang:
docker network create --internal backend-net
Container im internen Netzwerk können nicht ins Internet. Ideal für Datenbanken oder interne APIs.
Compose-Beispiel
services:
web:
image: nginx
networks:
- frontend
app:
image: mein-app
networks:
- frontend
- backend
db:
image: postgres
networks:
- backend
networks:
frontend:
driver: bridge
backend:
internal: true
Die Datenbank ist nur über app erreichbar, nicht direkt aus frontend.
Ports nicht veröffentlichen
Nur Container, die von aussen erreichbar sein sollen, bekommen Ports:
services:
db:
image: postgres
networks:
- backend
# Keine ports hier
Kein Internet für bestimmte Container
Mit network_mode: none:
services:
batch:
image: batch-processor
network_mode: none
Oder über spezielle iptables-Regeln.
Sicherheit durch Isolation
- Datenbanken nicht direkt erreichbar.
- Interne APIs abgeschirmt.
- Weniger Angriffsfläche.
- Einfachere Regeln für Firewalls und Reverse-Proxy.
- Schadsoftware in einem Container kann sich weniger leicht ausbreiten.
Reverse-Proxy als Einfallstor
Ein öffentlich erreichbarer Traefik oder nginx leitet Anfragen in das richtige Netzwerk. Dienste dahinter brauchen keine eigenen öffentlichen Ports.
Tipps
- Für jeden logischen Bereich ein Netzwerk.
- Datenbanken ins interne Backend-Netz.
- Nicht alle Ports veröffentlichen.
- Firewall auf dem Host ergänzen.
- Logging und Monitoring über alle Netze.
- Nur notwendige Verbindungen erlauben.
Typische Stolpersteine
- Container im falschen Netz: Erreichbarkeit prüfen.
- DNS nicht funktioniert: Benutzerdefinierte Netze bringen DNS, die Standard-Bridge nicht.
- Interne Netze und Updates: Container kann keine Pakete laden.
- Veröffentlichte Ports an falscher Stelle: Sicherheitslücke.
- Falsche Firewall-Regel: Container doch erreichbar.
Weiterführende Links und Infos
- BotServ.de Docker Netzwerk
- BotServ.de Docker Ressourcenlimits
- BotServ.de Docker Sicherheit
- BotServ.de Docker Reverse Proxy
FAQ: Docker-Netzwerk-Isolation
Sind Docker-Container im gleichen Netzwerk isoliert? Nein, sie können sich standardmässig gegenseitig erreichen.
Was ist ein internes Netzwerk? Ein Netzwerk ohne externe Verbindung, beispielsweise für Datenbanken.
Brauche ich für jeden Dienst ein Netzwerk? Bei mehreren Diensten ist Segmentierung sinnvoll, aber nicht zwingend.
Kann ich Container ganz vom Netzwerk trennen?
Ja, mit network_mode: none.
Wie erreicht ein Container das Internet? Im Standard-Bridge oder benutzerdefinierten Netzwerk, nicht im internen Netz.
Quellen und weiterführende Literatur
- Docker Network: https://docs.docker.com/network/
- Compose Networks: https://docs.docker.com/compose/networking/
- Bridge vs Overlay: https://docs.docker.com/network/bridge/
Zusammenfassung: Docker-Netzwerk-Isolation
Docker-Netzwerk-Isolation ist eine einfache, aber wirksame Sicherheitsmassnahme. Benutzerdefinierte Netze und interne Netze trennen Container logisch voneinander. Datenbanken und interne APIs gehören ins Backend, öffentliche Dienste ins Frontend. Wer Ports sparsam veröffentlicht und das externe Netz nicht überall freigibt, reduziert Angriffsfläche und behält die Infrastruktur übersichtlich.


