Kapitel 6 · 6.3
Docker og firewallen: udgiv porte sikkert
Det er den fælde, de fleste falder i. En port, du udgiver i Docker med ports:, kan nås fra internettet, også selv om ufw lukker porten. Docker sætter sine egne firewallregler, og de går forud for ufw's regler.
Et eksempel på, hvad der går galt
services:
db:
image: mariadb:11
ports:
- "3306:3306"
Din firewall siger, at kun 22, 80 og 443 er åbne. Alligevel kan hele verden nu nå din database på port 3306.
Tre regler, der holder det sikkert
- Udgiv kun det, der skal kunne nås udefra. I denne vejledning er det kun Caddy, på 80 og 443. Apps taler med Caddy over compose' interne netværk. De har ikke brug for
ports:. - Skal en port kun kunne nås på selve serveren? Sæt
127.0.0.1:foran. Så kan kun serveren selv komme til den, eller du via en SSH-tunnel (se En SSH-config: log ind med et kort navn). - En database får aldrig
ports:. Appen finder den på tjenestens navn, for eksempeldb.
ports:
- "127.0.0.1:3001:3001"
Tjek udefra
Se på serveren, hvilke porte der er åbne 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 [::] kan nås udefra. Alt med 127.0.0.1 kun indefra. Vil du se det udefra, så brug en portscanner som nmap fra din egen computer mod din egen IP-adresse.
Bemærk: Montér ikke /var/run/docker.sock i en container, medmindre du ved præcis hvorfor. Den, der overtager containeren, har dermed hele din server.
