Docker'da ports: kullanmadan önce iki kez düşünün
Docker yayınladığı portları UFW kurallarını atlayarak açar. Güvenlik duvarınız size yalan söylüyor olabilir.
İçindekiler
Sunucuda UFW'yi kurdunuz, sadece 22, 80 ve 443'ü açtınız. Sonra bir veritabanı konteynerini -p 5432:5432 ile çalıştırdınız. Sizce 5432 dışarıdan erişilebilir mi?
Evet. Ve bu birçok kişinin canını yaktı.
Neden oluyor?
Docker, port yayınlarken doğrudan iptables üzerinde kendi zincirlerini oluşturur. Bu kurallar UFW'nin kurallarından önce işlenir. Yani ufw status çıktısı size güvende olduğunuzu söylerken port internete açıktır.
Çözüm: port yayınlamayın
Konteynerleri ortak bir Docker ağına bağlayın ve sadece reverse proxy'nin portlarını açın:
services:
app:
image: traefik/whoami
networks: [web]
networks:
web:
external: true
Caddy de aynı ağda olduğu için app:80 adresine erişebilir. Dışarıdan ise hiçbir yol yoktur.
Gerçekten yayınlamanız gerekiyorsa
Sadece localhost'a bağlayın:
ports:
- "127.0.0.1:5432:5432"
Böylece SSH tüneliyle erişebilir, internete kapalı tutabilirsiniz.
| Yöntem | Dışarıdan erişim | Önerilir mi? |
|---|---|---|
5432:5432 |
Açık | Hayır |
127.0.0.1:5432:5432 |
Kapalı | Gerekirse |
| Ortak ağ, port yok | Kapalı | Evet |