Poglavje 6 · 6.3
Docker in požarni zid: varna objava vrat
To je past, v katero se ujame večina ljudi. Vrata, ki jih v Dockerju objavite z ports:, so dosegljiva z interneta, tudi če jih ufw zapre. Docker nastavi lastna pravila požarnega zidu, ki imajo prednost pred pravili ufw.
Primer, kaj gre narobe
services:
db:
image: mariadb:11
ports:
- "3306:3306"
Vaš požarni zid kaže, da so odprta le vrata 22, 80 in 443. Kljub temu je Vaša podatkovna zbirka zdaj dosegljiva s celega sveta na vratih 3306.
Tri pravila za varnost
- Objavite samo to, kar mora biti dosegljivo od zunaj. V tem priročniku je to le Caddy, na vratih 80 in 443. Aplikacije s Caddyjem komunicirajo prek notranjega omrežja compose. Te ne potrebujejo
ports:. - Morajo biti vrata dosegljiva le na samem strežniku? Pred njih dodajte
127.0.0.1:. Tako lahko do njih dostopa le strežnik sam ali Vi prek tunela SSH (glejte Konfiguracija SSH: prijava s kratkim imenom). - Podatkovna zbirka nikoli ne dobi
ports:. Aplikacija jo najde po imenu storitve, na primerdb.
ports:
- "127.0.0.1:3001:3001"
Preverjanje od zunaj
Na strežniku preverite, katera vrata so odprta za vse:
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",...))
Vse z 0.0.0.0 ali [::] je dosegljivo od zunaj. Vse z 127.0.0.1 je dosegljivo le od znotraj. Če želite to videti od zunaj, s svojega računalnika uporabite pregledovalnik vrat, kot je nmap, na svojem naslovu IP.
Pozor: /var/run/docker.sock ne priklopite v vsebnik, razen če natančno veste, zakaj. Kdor prevzame ta vsebnik, s tem prevzame Vaš celoten strežnik.
