6 skyrius · 6.3
Docker ir užkarda: kaip saugiai publikuoti prievadus
Tai spąstai, į kuriuos pakliūva dauguma žmonių. Prievadas, kurį Docker publikuojate su ports:, yra pasiekiamas iš interneto, net jei ufw tą prievadą uždaro. Docker nustato savo užkardos taisykles, ir jos turi pirmenybę prieš ufw taisykles.
Pavyzdys, kas nutinka ne taip
services:
db:
image: mariadb:11
ports:
- "3306:3306"
Jūsų užkarda rodo, kad atidaryti tik 22, 80 ir 443 prievadai. Vis dėlto Jūsų duomenų bazė dabar pasiekiama iš viso pasaulio per 3306 prievadą.
Trys taisyklės, kurios užtikrina saugumą
- Publikuokite tik tai, kas turi būti pasiekiama iš išorės. Šiame vadove tai tik Caddy, per 80 ir 443 prievadus. Programos bendrauja su Caddy per vidinį compose tinklą. Joms
ports:nereikia. - Ar prievadas turi būti pasiekiamas tik pačiame serveryje? Prieš jį nurodykite
127.0.0.1:. Tada prie jo galės prisijungti tik pats serveris arba Jūs per SSH tunelį (žr. SSH konfigūracija: prisijungimas trumpu pavadinimu). - Duomenų bazei niekada nenurodoma
ports:. Programa ją randa pagal paslaugos pavadinimą, pavyzdžiui,db.
ports:
- "127.0.0.1:3001:3001"
Patikrinimas iš išorės
Serveryje patikrinkite, kurie prievadai atidaryti visiems:
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",...))
Viskas, kas pažymėta 0.0.0.0 arba [::], yra pasiekiama iš išorės. Viskas, kas pažymėta 127.0.0.1, pasiekiama tik iš vidaus. Jei norite patikrinti iš išorės, savo kompiuteryje naudokite prievadų skenerį, pavyzdžiui, nmap, ir nuskenuokite savo IP adresą.
Dėmesio: Neprijunkite /var/run/docker.sock prie konteinerio, nebent tiksliai žinote, kodėl tai darote. Kas perima tą konteinerį, tas kartu perima ir visą Jūsų serverį.
