Kapitola 6 · 6.3
Docker a firewall: jak bezpečně publikovat porty
Do této pasti spadne většina lidí. Port, který v Dockeru publikujete pomocí ports:, je dostupný z internetu, i když ho ufw blokuje. Docker si nastavuje vlastní pravidla firewallu a ta mají přednost před pravidly ufw.
Příklad toho, co se pokazí
services:
db:
image: mariadb:11
ports:
- "3306:3306"
Váš firewall tvrdí, že jsou otevřené jen porty 22, 80 a 443. Přesto je teď Vaše databáze dostupná z celého světa na portu 3306.
Tři pravidla, která zajistí bezpečnost
- Publikujte jen to, co musí být dostupné zvenčí. V této příručce je to pouze Caddy, na portech 80 a 443. Aplikace komunikují s Caddy přes interní síť compose. Nepotřebují žádné
ports:. - Má být port dostupný jen na samotném serveru? Napište před něj
127.0.0.1:. Pak se k němu dostane jen samotný server, nebo Vy přes SSH tunel (viz Konfigurace SSH: přihlášení pod krátkým názvem). - Databáze nikdy nedostane
ports:. Aplikace ji najde podle názvu služby, napříkladdb.
ports:
- "127.0.0.1:3001:3001"
Kontrola zvenčí
Podívejte se na serveru, které porty jsou otevřené pro všechny:
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",...))
Vše s 0.0.0.0 nebo [::] je dostupné zvenčí. Vše s 127.0.0.1 jen zevnitř. Chcete-li to ověřit zvenčí, použijte ze svého počítače skener portů, například nmap, na vlastní IP adresu serveru.
Pozor: Nepřipojujte /var/run/docker.sock do kontejneru, pokud přesně nevíte proč. Kdo ten kontejner ovládne, získá tím celý Váš server.
