Luku 6 · 6.3
Docker ja palomuuri: porttien turvallinen julkaiseminen
Tähän ansaan useimmat lankeavat. Portti, jonka julkaiset Dockerissa komennolla ports:, on tavoitettavissa internetistä, vaikka ufw sulkisi sen. Docker luo omat palomuurisääntönsä, ja ne menevät ufw:n sääntöjen edelle.
Esimerkki siitä, mikä menee pieleen
services:
db:
image: mariadb:11
ports:
- "3306:3306"
Palomuurisi mukaan vain portit 22, 80 ja 443 ovat auki. Silti tietokantasi on nyt koko maailman tavoitettavissa portissa 3306.
Kolme sääntöä, joilla pysyt turvassa
- Julkaise vain se, minkä täytyy näkyä ulos. Tässä ohjeessa se on vain Caddy porteissa 80 ja 443. Sovellukset keskustelevat Caddyn kanssa composen sisäisen verkon kautta. Ne eivät tarvitse asetusta
ports:. - Pitääkö portin näkyä vain palvelimella itsellään? Lisää sen eteen
127.0.0.1:. Silloin siihen pääsee vain palvelin itse tai sinä SSH-tunnelin kautta (katso SSH-config: kirjaudu sisään lyhyellä nimellä). - Tietokanta ei koskaan saa asetusta
ports:. Sovellus löytää sen palvelun nimellä, esimerkiksidb.
ports:
- "127.0.0.1:3001:3001"
Tarkistus ulkopuolelta
Katso palvelimella, mitkä portit ovat auki kaikille:
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",...))
Kaikki, missä lukee 0.0.0.0 tai [::], on tavoitettavissa ulkoa. Kaikki, missä lukee 127.0.0.1, vain sisältä. Jos haluat nähdä tilanteen ulkoa päin, käytä omalla tietokoneellasi porttiskanneria, kuten nmap, omaan IP-osoitteeseesi.
Huomaa: Älä liitä /var/run/docker.sock konttiin, ellet tiedä tarkalleen miksi. Se, joka kaappaa kyseisen kontin, saa samalla haltuunsa koko palvelimesi.
