Kapittel 6 · 6.3
Docker og brannmuren: publiser porter på en trygg måte
Dette er fellen de fleste går i. En port du publiserer i Docker med ports:, er tilgjengelig fra internett, selv om ufw stenger porten. Docker setter sine egne brannmurregler, og de går foran reglene i ufw.
Et eksempel på hva som går galt
services:
db:
image: mariadb:11
ports:
- "3306:3306"
Brannmuren sier at bare 22, 80 og 443 er åpne. Likevel er databasen din nå tilgjengelig for hele verden på port 3306.
Tre regler som holder det trygt
- Publiser bare det som må være tilgjengelig utenfra. I denne veiledningen er det bare Caddy, på 80 og 443. Appene snakker med Caddy over det interne nettverket i compose. De trenger ingen
ports:. - Skal en port bare være tilgjengelig på selve serveren? Sett
127.0.0.1:foran. Da er det bare serveren selv som kommer til, eller du via en SSH-tunnel (se En SSH-config: logg inn med et kort navn). - En database får aldri
ports:. Appen finner den på navnet til tjenesten, for eksempeldb.
ports:
- "127.0.0.1:3001:3001"
Sjekk utenfra
Se på serveren hvilke porter som er åpne for alle:
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",...))
Alt med 0.0.0.0 eller [::] er tilgjengelig utenfra. Alt med 127.0.0.1 bare innenfra. Vil du se det utenfra, bruker du en portskanner som nmap fra din egen datamaskin mot din egen IP-adresse.
Merk: Ikke koble /var/run/docker.sock inn i en container med mindre du vet nøyaktig hvorfor. Den som tar over containeren, har dermed hele serveren din.
