Nodaļa 6 · 6.3
Docker un ugunsmūris: kā droši publicēt portus
Šī ir slazds, kurā iekrīt lielākā daļa cilvēku. Ports, ko Jūs publicējat Docker ar ports:, ir pieejams no interneta pat tad, ja ufw šo portu aizver. Docker iestata savus ugunsmūra noteikumus, un tiem ir prioritāte pār ufw noteikumiem.
Piemērs tam, kas noiet greizi
services:
db:
image: mariadb:11
ports:
- "3306:3306"
Jūsu ugunsmūris rāda, ka atvērti ir tikai 22, 80 un 443. Tomēr Jūsu datubāze tagad ir pieejama no visas pasaules portā 3306.
Trīs noteikumi, kas nodrošina drošību
- Publicējiet tikai to, kam jābūt pieejamam no ārpuses. Šajā rokasgrāmatā tas ir tikai Caddy, portos 80 un 443. Lietotnes sazinās ar Caddy pa compose iekšējo tīklu. Tām nav nepieciešams
ports:. - Vai portam jābūt pieejamam tikai pašā serverī? Pievienojiet tā priekšā
127.0.0.1:. Tad tam var piekļūt tikai pats serveris vai Jūs, izmantojot SSH tuneli (skatiet SSH konfigurācija: pieteikšanās ar īsu nosaukumu). - Datubāze nekad nesaņem
ports:. Lietotne to atrod pēc servisa nosaukuma, piemēram,db.
ports:
- "127.0.0.1:3001:3001"
Pārbaude no ārpuses
Serverī pārbaudiet, kuri porti ir atvērti ikvienam:
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",...))
Viss ar 0.0.0.0 vai [::] ir pieejams no ārpuses. Viss ar 127.0.0.1 ir pieejams tikai no iekšpuses. Ja vēlaties to redzēt no ārpuses, izmantojiet no sava datora portu skeneri, piemēram, nmap, pret savu IP adresi.
Ņemiet vērā: Nepievienojiet /var/run/docker.sock konteinerim, ja vien precīzi nezināt, kāpēc tas ir vajadzīgs. Kas pārņem šo konteineru, tas līdz ar to iegūst visu Jūsu serveri.
