Kapitola 6 · 6.3
Docker a firewall: bezpečné publikovanie portov
Toto je pasca, do ktorej sa chytí väčšina ľudí. Port, ktorý v Dockeri publikujete pomocou ports:, je dostupný z internetu, aj keď ho ufw zatvára. Docker nastavuje vlastné pravidlá firewallu a tie majú prednosť pred pravidlami ufw.
Príklad toho, čo sa pokazí
services:
db:
image: mariadb:11
ports:
- "3306:3306"
Váš firewall hovorí, že otvorené sú iba porty 22, 80 a 443. Napriek tomu je teraz vaša databáza dostupná z celého sveta na porte 3306.
Tri pravidlá, ktoré zachovajú bezpečnosť
- Publikujte iba to, čo musí byť dostupné zvonku. V tejto príručke je to iba Caddy, na portoch 80 a 443. Aplikácie komunikujú s Caddy cez interné sieťové prostredie compose. Tie nepotrebujú
ports:. - Má byť port dostupný iba na samotnom serveri? Pridajte pred neho
127.0.0.1:. Potom k nemu má prístup iba samotný server, prípadne vy cez SSH tunel (pozrite Konfigurácia SSH: prihlásenie pomocou krátkeho názvu). - Databáza nikdy nedostane
ports:. Aplikácia ju nájde podľa názvu služby, napríkladdb.
ports:
- "127.0.0.1:3001:3001"
Kontrola zvonku
Na serveri si pozrite, ktoré porty sú otvorené pre všetkých:
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šetko s 0.0.0.0 alebo [::] je dostupné zvonku. Všetko s 127.0.0.1 iba zvnútra. Ak to chcete vidieť zvonku, použite zo svojho počítača skener portov, napríklad nmap, na vlastnú IP adresu.
Upozornenie: Nepripájajte /var/run/docker.sock do kontajnera, pokiaľ presne neviete prečo. Kto tento kontajner ovládne, získa tým celý váš server.
