Merhaba sevgili THS ailesi,
Bugün Linux dünyasının en yaygın konteyner teknolojisi olan Docker’ın belki de en kritik yönüne, yani güvenliğine değineceğiz.
Docker, sistemleri izole etmek ve uygulamaları kolayca dağıtmak için harika bir araç.
Ancak doğru yapılandırılmadığında, aynı kolaylık kötü niyetli kişiler için de bir fırsata dönüşebiliyor.
Bu yazıda “Docker’ı güvenli hale getirmek için gerçekten neler yapılmalı?” sorusuna hem pratik hem de ileri düzey bir bakış açısıyla yanıt vereceğiz.
1. Root Olarak Çalıştırmayın (Asla!)
Docker konteynerleri varsayılan olarak root yetkileriyle başlar.
Bu, konforlu ama riskli bir davranıştır — çünkü konteynerden çıkmayı başaran bir saldırgan, doğrudan sistem kök erişimi elde eder.
Çözüm:
- Konteyner içinde özel bir kullanıcı oluşturun:
Kod:
RUN useradd -r -u 1001 appuser
USER appuser
- Host sistemde de Docker daemon’unu rootless modda çalıştırın:
Kod:
dockerd-rootless-setuptool.sh install
Bu yöntemle, konteynerin sistem üzerinde yaratabileceği hasar en aza iner.
2. Minimum İmajlar Kullanın (Alpine, Distroless)
Ne kadar küçük imaj, o kadar az saldırı yüzeyi!
Büyük imajlar (örneğin Ubuntu tabanlı) gereksiz paketler ve potansiyel açıklarla doludur.
Güvenlik için şu imaj türlerini tercih edin:
- alpine:latest
- gcr.io/distroless/base
- scratch (tamamen çıplak temel imaj)
[CODE]apt-get clean[/CODE] veya [CODE]rm -rf /var/lib/apt/lists[/CODE]/ komutlarıyla temizlik yapın.3. Capabilities (Yetenekleri) Sınırlayın
Linux çekirdeği, bir sürecin yapabileceklerini “capabilities” adı verilen ayrıcalıklarla tanımlar.
Docker konteynerleri genelde bunların çoğunu kullanır, ama hepsine gerek yoktur.
Öneri:
Kod:
docker run --cap-drop=ALL --cap-add=NET_BIND_SERVICE nginx
Gelişmiş güvenlik isteyenler için:
Kod:
--security-opt no-new-privileges
flag’i, konteynerin yeni root hakları elde etmesini tamamen engeller.
4. AppArmor ve SELinux Profilleri Kullanın
Linux’un güvenlik modülleri (LSM) konteyner dünyasında fark yaratan unsurlardır.
Docker, AppArmor veya SELinux politikalarını destekler.
Kontrol edin:
Kod:
docker info | grep -i security
Eğer apparmor veya selinux aktifse, her konteyner için özel bir profil oluşturabilirsiniz.
Örnek AppArmor politikası:
Kod:
profile docker-nginx flags=(attach_disconnected,mediate_deleted) {
# Nginx’in sadece /var/www erişimine izin ver
/var/www/** r,
/etc/nginx/** r,
deny /** w,
}
5. Network İzolasyonu
Varsayılan Docker ağı (bridge) pratik ama güvenlik açısından zayıftır.Her konteyner birbirine ping atabilir, veri gönderebilir.
Daha güvenli bir yapı için:
- Her uygulama grubuna özel user-defined network oluşturun:
Kod:
docker network create --driver bridge app_net
- Gereksiz port publish işlemlerinden kaçının.
Örneğin sadece Nginx dışa açılmalı, database konteyneri sadece dahili ağda kalmalıdır.
6. Docker Daemon’unu Güvenceye Alın
Docker’ın kendisi, genelde sistemdeki en güçlü süreçtir.
Yanlış yapılandırılırsa, konteyner güvenli olsa bile saldırgan daemon üzerinden sisteme sızabilir.
Öneriler:
[COLOR=rgb(84, 172, 210)]/var/run/docker.sock[/COLOR]dosyasını asla paylaşmayın([COLOR=rgb(84, 172, 210)]-v /var/run/docker.sock:/var/run/docker.sock[/COLOR]ciddi risktir).- Daemon API erişimini sadece TLS ile açın:
Kod:
[CODE]/etc/docker/daemon.json
{
"hosts": ["tcp://127.0.0.1:2376"],
"tlsverify": true
}
7. İmaj Tarama (Image Scanning) Yapın
Birçok güvenlik açığı daha imaj aşamasında fark edilebilir.
Docker Hub, GitLab, Trivy ve Clair gibi araçlarla imaj taraması yapın.
Örnek:
Kod:
trivy image myapp:latest
CI/CD sisteminize entegre ederek otomatik tarama yapmak en sağlıklısıdır.
8. Kaynak Sınırlandırması (Resource Limits)
Konteynerlerin kontrolsüz CPU veya RAM kullanımı da güvenlik riski yaratabilir (örneğin DoS saldırısı).
Systemd makalesinde bahsettiğimiz cgroup v2 burada da devreye girer:
Kod:
docker run -m 512m --cpus="1.0" nginx
Bu ayar, konteynerin maksimum 512 MB RAM ve 1 CPU çekirdeği kullanmasını sağlar.
9. Güncellemeleri Otomatikleştirin
Birçok güvenlik açığı, “eski sürüm imajlar” nedeniyle ortaya çıkar.watchtower gibi araçlar konteynerlerinizi otomatik olarak güncel tutar:
Kod:
docker run -d \
--name watchtower \
-v /var/run/docker.sock:/var/run/docker.sock \
containrrr/watchtower
10. Log ve Denetim (Audit)
Son olarak, hiçbir güvenlik önlemi gözlem olmadan anlamlı değildir.Docker loglarını düzenli olarak kontrol edin:
Kod:
docker logs container_adi
Ayrıca Linux tarafında:
Kod:
auditctl -w /usr/bin/docker -p war -k docker_audit
Sonuç: Güvenlik Bir Katman Değil, Bir Kültürdür
Linux üzerinde Docker güvenliği; sadece birkaç komutla değil, doğru alışkanlıklarla sağlanır.
Root’tan kaçınmak, ağları izole etmek, imajları küçük tutmak ve sürekli denetim yapmak — bunlar birer görev değil, refleks haline gelmeli.
Unutmayın:
En güvenli konteyner, sadece gerekli izinlerle çalışan ve ne yaptığını bilen bir yöneticinin elindedir.
Peki siz nasıl Docker güvenliği sağlıyorsunuz?
Kullandığınız araçlar, politikalar veya özel konfigürasyonlar varsa paylaşın — birlikte daha güvenli sistemler inşa edelim.
Mavi ekransız ve sorunsuz sistemlerle çalışmanız dileği ile, Birdahaki yazımızda buluşmak üzere hoşçakalın.



