Kapitel 6 · 6.3
Docker und die Firewall: Ports sicher veröffentlichen
Dies ist die Falle, in die die meisten Menschen tappen. Ein Port, den Sie in Docker mit ports: veröffentlichen, ist aus dem Internet erreichbar, auch wenn ufw diesen Port sperrt. Docker setzt eigene Firewallregeln, und diese haben Vorrang vor den Regeln von ufw.
Ein Beispiel dafür, was schiefgeht
services:
db:
image: mariadb:11
ports:
- "3306:3306"
Ihre Firewall sagt, dass nur 22, 80 und 443 offen sind. Trotzdem ist Ihre Datenbank jetzt von der ganzen Welt aus über Port 3306 erreichbar.
Drei Regeln, die für Sicherheit sorgen
- Veröffentlichen Sie nur, was von außen erreichbar sein muss. In dieser Anleitung ist das nur Caddy, auf 80 und 443. Apps kommunizieren mit Caddy über das interne Netzwerk von compose. Sie benötigen kein
ports:. - Soll ein Port nur auf dem Server selbst erreichbar sein? Setzen Sie
127.0.0.1:davor. Dann kann nur der Server selbst darauf zugreifen, oder Sie über einen SSH-Tunnel (siehe Eine SSH-Config: mit einem kurzen Namen anmelden). - Eine Datenbank bekommt niemals
ports:. Die App findet sie über den Namen des Service, etwadb.
ports:
- "127.0.0.1:3001:3001"
Von außen prüfen
Sehen Sie auf dem Server nach, welche Ports für alle offen stehen:
anna@web1:~$ sudo ss -tlnp
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
LISTEN 0 4096 0.0.0.0:443 0.0.0.0:* users:(("docker-proxy",...))
LISTEN 0 4096 127.0.0.1:3001 0.0.0.0:* users:(("docker-proxy",...))
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",...))
Alles mit 0.0.0.0 oder [::] ist von außen erreichbar. Alles mit 127.0.0.1 nur von innen. Möchten Sie es von außen sehen, verwenden Sie auf Ihrem eigenen Computer einen Portscanner wie nmap für Ihre eigene IP-Adresse.
Hinweis: Binden Sie /var/run/docker.sock nicht in einen Container ein, es sei denn, Sie wissen genau, warum. Wer diesen Container übernimmt, hat damit Ihren gesamten Server.
