Poglavlje 6 · 6.3
Docker i vatrozid: sigurno objavljivanje portova
Ovo je zamka u koju upada većina ljudi. Port koji u Dockeru objavite s ports: dostupan je s interneta, čak i ako ga ufw zatvara. Docker postavlja vlastita pravila vatrozida, a ona imaju prednost pred pravilima ufw-a.
Primjer onoga što pođe po zlu
services:
db:
image: mariadb:11
ports:
- "3306:3306"
Vaš vatrozid kaže da su otvoreni samo portovi 22, 80 i 443. Ipak je Vaša baza podataka sada dostupna iz cijelog svijeta na portu 3306.
Tri pravila koja čuvaju sigurnost
- Objavite samo ono što mora biti dostupno izvana. U ovom priručniku to je samo Caddy, na portovima 80 i 443. Aplikacije komuniciraju s Caddyjem preko interne mreže composea. Njima nije potreban
ports:. - Mora li port biti dostupan samo na samom poslužitelju? Ispred njega stavite
127.0.0.1:. Tada mu može pristupiti samo sam poslužitelj ili Vi putem SSH tunela (pogledajte SSH konfiguracija: prijava kratkim nazivom). - Baza podataka nikada ne dobiva
ports:. Aplikacija je pronalazi po nazivu servisa, kao što jedb.
ports:
- "127.0.0.1:3001:3001"
Provjera izvana
Na poslužitelju provjerite koji su portovi otvoreni za sve:
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",...))
Sve s 0.0.0.0 ili [::] dostupno je izvana. Sve s 127.0.0.1 dostupno je samo iznutra. Želite li to vidjeti izvana, sa svojeg računala upotrijebite skener portova kao što je nmap na vlastitoj IP adresi.
Napomena: Ne povezujte /var/run/docker.sock u kontejner osim ako točno znate zašto. Tko preuzme taj kontejner, time preuzima cijeli Vaš poslužitelj.
