Selamlar,
Yillardir haberlerde "acikta kalan MongoDB" sizintilari goruyoruz; cogunun tek sebebi internete kimlik dogrulamasiz acilmis bir veritabani. Bu konuda MongoDB'yi guvenli sekilde yapilandirmanin temel adimlarini derledim.
Konuda Anlatilacaklar
- En sik yapilan hata: acik bind
- Kimlik dogrulamayi etkinlestirme
- RBAC ile yetki ayrimi
- TLS ve ag izolasyonu
- Hizli kontrol listesi
1) Acik Bind Sorunu
Varsayilan kurulumlarin bir kismi tum arayuzlere dinlemeye acilabiliyor. Ilk is, erisimi sinirlamaktir. Yalnizca gerekli arayuzlere baglanin:
# mongod.conf
net:
bindIp: 127.0.0.1,10.0.0.5
port: 27017Veritabaninizi dogrudan internete acmayin; uygulama sunucusu ile ayni ozel agda tutun.
2) Kimlik Dogrulama
Authorization varsayilan olarak kapali gelebilir. Mutlaka acin ve once bir yonetici kullanicisi olusturun.
// mongosh
use admin
db.createUser({
user: "admin",
pwd: passwordPrompt(),
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
})# mongod.conf
security:
authorization: enabledServisi yeniden baslattiktan sonra artik kimlik olmadan erisim reddedilir.
3) RBAC ile Yetki Ayrimi
Her uygulama tek bir sinirli kullaniciyla baglanmali. Uygulamaniza yalnizca kendi veritabaninda okuma/yazma verin:
use appdb
db.createUser({
user: "app",
pwd: passwordPrompt(),
roles: [ { role: "readWrite", db: "appdb" } ]
})Tek bir "root" kullanicisiyla her yere baglanmak en sik gorulen kotu aliskanliktir.
4) TLS ve Ag
Baglantilari sifrelemek icin TLS kullanin ve mumkunse guvenlik duvariyla yalnizca uygulama sunucusunun IP'sine izin verin.
net:
tls:
mode: requireTLS
certificateKeyFile: /etc/ssl/mongodb.pem5) Hizli Kontrol Listesi
- authorization: enabled acik mi?
- bindIp sinirli mi, internete acik degil mi?
- Her uygulama icin ayri, en az yetkili kullanici var mi?
- TLS acik mi?
- Yedekler sifreli ve erisimi kisitli mi?
Kaynaklar
Alıntı:Yasal not: Yapilandirmalari yalnizca kendi veritabani sunucularinizda uygulayin.