Docker Gerçekten Güvenli mi? (Bir Sistem Yöneticisinin Tecrübesi)

“Docker güvenli mi?” sorusunu bana ilk soran bir müşterimdi. Sunucuya Docker kurmuştum, her şey çalışıyordu ama müşteri “container’dan sunucuya sızmak mümkün mü?” diye sordu. O an cevap veremedim bilmiyordum. Ama bu soru beni araştırmaya itti ve öğrendiklerim hem müşterimi hem kendimi rahatlattı. Kısa cevap: evet, Docker güvenli. Ama “nasıl” kısmı önemli.
Konu İçeriği
Docker’ın Güvenlik Modeli Nedir?
Docker çalışma prensibi olarak process isolation kullanıyor. Yani her container ayrı bir alanda çalışıyor, birbirine karışmıyor. Bunu Linux’un namespace ve cgroups özellikleriyle yapıyor. Basit bir benzetme: aynı apartmanda oturan ama kapıları kilitli, hiçbir şekilde birbirine geçmeyen daireler gibi.
Ama burada önemli bir nüans var: container bir sanal makine (VM) değil. VM’de ayrı bir işletim sistemi çalışır, tam izolasyon vardır. Container ise host’un kernel’ini paylaşır. Yani container ile host arasında tam bir duvar yok ince bir perde var.

Container’dan Host’a Sızmak Mümkün mü?
Teorik olarak evet. Pratikte ise çok zor. Ama imkansız değil. Buna “container escape” deniyor ve güvenlik araştırmacıları bunu kanıtlamak için sürekli deniyorlar.
2019’da bir araştırmacı, container’dan host kernel’ine sızmayı başarmıştı. Bu bulgu Docker ekibini harekete geçirdi ve ciddi yamalar yayınlandı. O günden beri container escape oldukça zorlaştı ama sıfırlanmadı hiçbir sistem %100 güvenli değildir.
En Yaygın Docker Güvenlik Hataları
İşin ilginç tarafı, Docker’ın kendisinden çok kullanıcıların yaptığı hatalar güvenlik açığı yaratıyor. Ben de başta bunları yapıyordum:
- Root olarak container çalıştırmak: Bunu hepimiz yapıyoruz ama yapmamalıyız. Container içinde root iseniz ve bir açık bulunursa, saldırgan host üzerinde de root yetkisine yaklaşabilir. Her zaman dedicated kullanıcı oluşturun.
- Güvenilmeyen image kullanmak: Docker Hub’da milyonlarca image var ve hangisinin güvenli olduğunu bilemezsiniz. Bir ara popüler bir image’ın arkada madencilik yazılımı çalıştırdığı tespit edildi. Sadece resmi veya doğrulanmış image’ları kullanın.
- Host dizinlerini container’a bağlamak: Volume mount yaparken tüm root dizinini bağlarsanız, container host’unuzun her yerine erişebilir. Sadece gerekli dizinleri bağlayın.
- Güncellemeleri atlamak: Docker’ın kendisi de güncellenmeli. Eski sürümlerde bilinen açıklar olabilir.
- Portları gereksiz açmak: Container portlarını 0.0.0.0’a bağlamak tüm internete açık demek. Sadece gerekli portları, gerekli IP’lere açın.

Docker’ı Daha Güvenli Hale Getirmek İçin Ne Yapmalı?
Benim uygulamaya başladığım önlemler bunlar:
1. Rootless Modu Kullanın
Docker’ı root yetkisi olmadan çalıştırabilirsiniz. Buna “rootless mode” diyorlar. Host üzerinde root gerektirmediği için container escape riski ciddi azalıyor. Ubuntu’da kurulumu basit ve ben tüm sunucularıma geçtim.
2. Image’ları Tarayın
Trivy veya Snyk gibi araçlarla image’ları taramayı alışkanlık haline getirin. Ben CI/CD pipeline’ıma Trivy ekledim her deploy’dan önce image’ı tarıyor, güvenlik açığı varsa deploy’u engelliyor. Başta sinir bozucu ama sonra alışıyorsunuz.
3. Read-Only Filesystem
Container’ın dosya sistemini salt okunur yapabilirsiniz. Sadece yazması gereken dizinleri ayrıca mount edin. Bu, saldırgan container’a sızsa bile dosya değiştirememesi anlamına geliyor.
4. Resource Limitleri Koyun
Container’lara CPU ve RAM limiti koyun. Böylece bir container çıldırırsa tüm sunucuyu beraberinde götüremez. Ben her container’a max 2GB RAM ve 1 CPU limiti koydum sunucu stabilitesi inanılmaz arttı.
5. Docker Bench Security Çalıştırın
Docker’ın resmi güvenlik denetim aracı var: Docker Bench for Security. Tek komutla çalışıyor ve size “şu ayarınız yanlış, şunu düzeltin” diye rapor veriyor. Ben ayda bir çalıştırıyorum ve her seferinde bir şeyler öğreniyorum.
Docker mı VM mi Hangisi Daha Güvenli?
Bu soru da sık geliyor. VM daha güçlü izolasyon sağlıyor çünkü gerçek bir kernel ayrımı var. Docker’da ise kernel paylaşılıyor. Ama VM’lerin de kendi güvenlik sorunları var hypervisor escape denen kavram var, o da teorik olarak mümkün.
Bence doğru soru “hangisi daha güvenli?” değil, “ihtiyacım ne?” olmalı. Çoğu web projesi için Docker’ın güvenlik modeli fazlasıyla yeterli. Gizli devlet belgeleri çalıştırmıyorsanız Docker güvenlidir yeter ki doğru yapılandırın.
Sonuç
Docker güvenli mi? Evet, doğru kullanıldığında. Yanlış kullanıldığında her teknoloji gibi tehlikeli olabilir. Ben Docker’ı yüzlerce projede kullandım, bir kez bile güvenlik sorunu yaşamadım ama bunun sebebi şansımın yaver gitmesi değil, temel önlemleri almam.
Unutmayın: en büyük güvenlik açığı teknoloji değil, kullanıcıdır. Docker’ı doğru yapılandırın, image’ları kontrol edin, root kullanmaktan kaçının. Gerisi kendiliğinden geliyor.


