6. fejezet · 6.3
Docker és a tűzfal: portok biztonságos közzététele
Ez az a csapda, amelybe a legtöbben beleesnek. A Dockerben a ports: segítségével közzétett port elérhető az internetről, még akkor is, ha az ufw lezárja azt a portot. A Docker saját tűzfalszabályokat állít be, és ezek elsőbbséget élveznek az ufw szabályaival szemben.
Egy példa arra, mi romlik el
services:
db:
image: mariadb:11
ports:
- "3306:3306"
A tűzfala szerint csak a 22-es, a 80-as és a 443-as port van nyitva. Az adatbázisa mégis az egész világ számára elérhető a 3306-os porton.
Három szabály a biztonságért
- Csak azt tegye közzé, aminek kívülről elérhetőnek kell lennie. Ebben a kézikönyvben ez csak a Caddy, a 80-as és a 443-as porton. Az alkalmazások a compose belső hálózatán keresztül kommunikálnak a Caddyvel. Ezeknek nincs szükségük
ports:beállításra. - Egy portnak csak magán a szerveren kell elérhetőnek lennie? Írja elé ezt:
127.0.0.1:. Így csak maga a szerver férhet hozzá, vagy Ön egy SSH-alagúton keresztül (lásd: SSH-konfiguráció: bejelentkezés rövid névvel). - Egy adatbázis soha nem kap
ports:beállítást. Az alkalmazás a szolgáltatás neve alapján találja meg, például így:db.
ports:
- "127.0.0.1:3001:3001"
Ellenőrzés kívülről
Nézze meg a szerveren, mely portok vannak nyitva mindenki számára:
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",...))
Minden, ami mellett 0.0.0.0 vagy [::] szerepel, kívülről elérhető. Minden, ami mellett 127.0.0.1 áll, csak belülről. Ha kívülről szeretné megnézni, használjon a saját számítógépéről egy portszkennert, például a nmap programot, a saját IP-címére.
Figyelem: Ne csatolja a /var/run/docker.sock elemet egy konténerbe, hacsak nem tudja pontosan, miért teszi. Aki átveszi az irányítást a konténer felett, ezzel az egész szerverét megszerzi.
