Takip et

MongoDB Nedir ve Neden Güvenliği Önemlidir?

MongoDB Nedir ve Neden Güvenliği Önemlidir? MongoDB, modern uygulamalar için tasarlanmış popüler, açık kaynaklı, belge tabanlı (document-

MongoDB Nedir ve Neden Güvenliği Önemlidir?

MongoDB, modern uygulamalar için tasarlanmış popüler, açık kaynaklı, belge tabanlı (document-oriented) bir NoSQL veritabanıdır. Esnek yapısı sayesinde, yapılandırılmış veya yarı yapılandırılmış verileri depolamak ve yönetmek için oldukça etkilidir. Geleneksel ilişkisel veritabanlarının aksine, MongoDB şema esnekliği sunar, bu da geliştiricilerin veri yapılarını daha hızlı değiştirmesine ve yinelemesine olanak tanır.

Ancak, MongoDB’nin kurulumu ve yapılandırması sırasında güvenlik adımlarına dikkat etmek kritik öneme sahiptir. Varsayılan kurulumlar genellikle kimlik doğrulama (authentication) olmadan çalışır ve veritabanına herhangi bir yerden erişime izin verir. Bu durum, hassas verilerinizin kötü niyetli saldırılara, veri sızıntılarına veya yetkisiz erişime açık olmasına neden olabilir. Bu rehberde, Ubuntu 16.04 sunucunuzda MongoDB’yi güvenli bir şekilde nasıl kuracağınızı ve yapılandıracağınızı adım adım açıklayacağız.

Sistem Hazırlığı ve Önkoşullar

MongoDB kurulumuna başlamadan önce, sunucunuzun güncel olduğundan ve gerekli bağımlılıklara sahip olduğundan emin olmalıyız. Bu adımlar, olası uyumluluk sorunlarını önlemeye ve daha sorunsuz bir kurulum süreci sağlamaya yardımcı olacaktır.

Sistemi Güncelleme

İlk olarak, sunucunuzdaki paket listesini güncelleyin ve yüklü paketleri en son sürümlerine yükseltin:

sudo apt update
sudo apt upgrade -y

Bu komutlar, sisteminizin güncel kalmasını ve herhangi bir eski paketin potansiyel güvenlik açıklarını veya uyumsuzluklarını gidermesini sağlar.

Gerekli Paketlerin Kurulumu

MongoDB’nin resmi deposundan kurulum yapabilmek için, GnuPG anahtarlarını yönetmek için gnupg gibi bazı ek paketlere ihtiyacımız olabilir:

sudo apt install gnupg wget curl -y

Bu paketler, MongoDB deposunun güvenilirliğini doğrulamak için gereklidir.

MongoDB Kurulumu

Sistemimiz hazır olduğuna göre, MongoDB’yi sunucumuza kurmaya başlayabiliriz. MongoDB, Ubuntu’nun varsayılan depolarında bulunmayabilir veya güncel olmayabilir, bu nedenle resmi MongoDB deposunu eklememiz gerekecektir.

MongoDB GPG Anahtarını İçe Aktarma

MongoDB’nin resmi paketlerini doğrulamak için genel GPG anahtarını içe aktarmamız gerekiyor. Bu adım, indirdiğimiz paketlerin MongoDB tarafından sağlandığını ve değiştirilmediğini garanti eder.

wget -qO - https://www.mongodb.org/static/pgp/server-3.6.asc | sudo apt-key add -

Bu komut, MongoDB’nin 3.6 sürümü için GPG anahtarını indirir ve sisteminize ekler. server-3.6.asc URL’si, Ubuntu 16.04 için genellikle uyumlu olan MongoDB 3.6 sürümünü hedeflemektedir. Daha yeni Ubuntu sürümlerinde veya daha yeni MongoDB sürümlerini kurmak isterseniz, bu URL’yi ilgili sürümle değiştirmeniz gerekebilir.

MongoDB Deposu Ekleme

Şimdi, Ubuntu’nun paket yöneticisine MongoDB deposunu bildirmemiz gerekiyor. Bu, apt komutunun MongoDB paketlerini nereden bulacağını bilmesini sağlayacaktır.

echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list

Yukarıdaki komut, /etc/apt/sources.list.d/mongodb-org-3.6.list adlı yeni bir dosya oluşturur ve içine MongoDB deposunun adresini yazar. xenial ifadesi, Ubuntu 16.04’ün kod adıdır. 3.6 ise kurmak istediğimiz MongoDB sürümünü belirtir. Bu sayede, sistemimiz 3.6 sürümüne özgü paketleri bulacaktır.

Paket Listesini Güncelleme ve MongoDB’yi Kurma

Yeni depoyu ekledikten sonra, apt paket listesini tekrar güncellemeliyiz ki sistemimiz yeni depodan paket bilgilerini alabilsin:

sudo apt update

Şimdi MongoDB’yi kurabiliriz. mongodb-org paketi, MongoDB sunucusunu, istemcisini, kabuğunu ve ilgili araçları içerir.

sudo apt install -y mongodb-org

Kurulum tamamlandıktan sonra, MongoDB otomatik olarak başlayacaktır. Durumunu kontrol edebiliriz:

sudo systemctl status mongod

Çıktıda active (running) ifadesini görmelisiniz. Ayrıca, sistem yeniden başlatıldığında MongoDB’nin otomatik olarak başlamasını sağlamak için aşağıdaki komutu kullanın:

sudo systemctl enable mongod

İsteğe Bağlı: MongoDB Sürümünü Sabitleme

MongoDB’nin belirli bir sürümde kalmasını sağlamak ve gelecekteki apt upgrade işlemlerinde otomatik olarak yükseltilmesini önlemek isteyebilirsiniz. Bu, üretim ortamlarında sürüm uyumluluğunu korumak için iyi bir uygulamadır:

echo "mongodb-org hold" | sudo dpkg --set-selections
echo "mongodb-org-server hold" | sudo dpkg --set-selections
echo "mongodb-org-shell hold" | sudo dpkg --set-selections
echo "mongodb-org-mongos hold" | sudo dpkg --set-selections
echo "mongodb-org-tools hold" | sudo dpkg --set-selections

Bu komutlar, MongoDB paketlerinin mevcut sürümde tutulmasını sağlar.

MongoDB Güvenliğini Yapılandırma

MongoDB’yi kurduk, ancak henüz güvenli değil. Varsayılan olarak, MongoDB kimlik doğrulama olmadan çalışır ve yerel ağdan veya hatta internetten erişilebilir olabilir. Bu bölüm, veritabanınızı güvence altına almak için atmanız gereken kritik adımları içerir.

Ağ Erişimini Kısıtlama (bindIp)

İlk ve en önemli güvenlik adımlarından biri, MongoDB’nin yalnızca belirli IP adreslerinden gelen bağlantıları kabul etmesini sağlamaktır. MongoDB yapılandırma dosyası /etc/mongod.conf içinde bulunur.

sudo nano /etc/mongod.conf

Bu dosyada bindIp satırını bulun. Varsayılan olarak genellikle 127.0.0.1 veya 0.0.0.0 olarak ayarlanmıştır.

# network interfaces
net:
  port: 27017
  bindIp: 127.0.0.1  # Yalnızca localhost'tan erişime izin verir

Eğer MongoDB sunucunuzla aynı makinede çalışan uygulamalarınız varsa, 127.0.0.1 (localhost) yeterlidir. Bu ayar, yalnızca sunucunun kendisinin MongoDB’ye erişmesine izin verir. Başka bir sunucudan veya belirli bir IP adresinden erişim sağlamanız gerekiyorsa, o IP adresini de virgülle ayırarak ekleyebilirsiniz:

bindIp: 127.0.0.1,192.168.1.100 # localhost ve belirli bir iç IP'den erişime izin verir

Uyarı: bindIp değerini 0.0.0.0 olarak ayarlamak, MongoDB’nin tüm IP adreslerinden gelen bağlantıları dinlemesine neden olur. Bu, sunucunuzun güvenlik duvarı tarafından korunmadığı sürece son derece güvensizdir.

Değişiklikleri kaydedin ve düzenleyiciden çıkın (Nano’da Ctrl+X, Y ve Enter).

Kimlik Doğrulamayı Etkinleştirme

MongoDB’ye kullanıcı adı ve parola ile erişimi zorunlu kılmak için kimlik doğrulamayı etkinleştirmemiz gerekir. Yine /etc/mongod.conf dosyasını açın:

sudo nano /etc/mongod.conf

security: bölümünü bulun ve authorization: enabled satırını ekleyin (veya yorum satırından çıkarın):

security:
  authorization: enabled

Değişiklikleri kaydedin ve düzenleyiciden çıkın.

MongoDB Servisini Yeniden Başlatma

Yapılandırma dosyası değişikliklerinin etkili olması için MongoDB servisini yeniden başlatmanız gerekir:

sudo systemctl restart mongod

Servisin durumunu kontrol edin:

sudo systemctl status mongod

Hala active (running) olduğunu görmelisiniz.

Yönetici Kullanıcısı Oluşturma

Kimlik doğrulama artık etkin olduğundan, veritabanına erişmek için bir kullanıcı oluşturmamız gerekiyor. İlk kullanıcıyı oluşturmak için, kimlik doğrulama etkinleştirildikten sonra geçici olarak kimlik doğrulaması olmadan bağlanabiliriz.

mongo

MongoDB kabuğuna girdikten sonra, yönetici veritabanına geçin ve yönetici kullanıcısını oluşturun:

use admin
db.createUser(
   {
     user: "adminUser",
     pwd: "CokGucluParola123", // Güçlü bir parola kullanın!
     roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase", "dbAdminAnyDatabase" ]
   }
)

Bu komut, adminUser adında, admin veritabanında userAdminAnyDatabase, tüm veritabanlarında readWriteAnyDatabase ve dbAdminAnyDatabase rollerine sahip bir kullanıcı oluşturur. userAdminAnyDatabase rolü, kullanıcının diğer kullanıcıları oluşturmasına ve yönetmesine izin verir. readWriteAnyDatabase tüm veritabanlarında okuma/yazma, dbAdminAnyDatabase ise tüm veritabanlarında yönetim hakları sağlar.

Kullanıcı oluşturulduktan sonra MongoDB kabuğundan çıkın:

exit

Kimlik Doğrulama ile Bağlantıyı Test Etme

Şimdi yeni oluşturduğumuz yönetici kullanıcısını kullanarak kimlik doğrulama ile MongoDB’ye bağlanmayı deneyelim:

mongo -u adminUser -p --authenticationDatabase admin

Parolanızı girmeniz istendiğinde, CokGucluParola123 (veya belirlediğiniz parola) girin. Başarılı bir şekilde bağlanırsanız, artık MongoDB’niz kimlik doğrulamalı olarak çalışıyor demektir.

Kimlik doğrulama olmadan bağlanmaya çalışırsanız (mongo komutuyla), veritabanına erişiminiz kısıtlanacaktır. Bir veritabanı veya koleksiyon üzerinde işlem yapmaya çalıştığınızda hata alırsınız.

Güvenlik Duvarı Yapılandırması (UFW)

MongoDB’nin ağ erişimini bindIp ile kısıtlamanın yanı sıra, sunucunuzun güvenlik duvarını da yapılandırmak önemlidir. Ubuntu’da UFW (Uncomplicated Firewall) yaygın olarak kullanılır.

Eğer UFW kurulu değilse:

sudo apt install ufw -y

UFW’yi etkinleştirin ve SSH erişimine izin verin (aksi takdirde kendinizi sunucudan kilitleyebilirsiniz):

sudo ufw enable
sudo ufw allow OpenSSH

Şimdi, yalnızca belirli IP adreslerinden veya ağlardan MongoDB portuna (varsayılan 27017) erişime izin verin. Örneğin, yalnızca belirli bir dahili IP adresinden erişime izin vermek için:

sudo ufw allow from 192.168.1.10 to any port 27017

Eğer uygulamanız aynı sunucuda çalışıyorsa, harici erişime izin vermenize gerek yoktur. Eğer farklı bir sunucudan erişim gerekiyorsa, o sunucunun IP adresini belirtmelisiniz. Asla sudo ufw allow 27017 komutunu tek başına kullanmayın, çünkü bu, internetteki herkesin veritabanınıza erişmesine izin verir.

Güvenlik duvarı durumunu kontrol edin:

sudo ufw status

Çıktı, izin verilen kuralları göstermelidir.

MongoDB Yönetimi ve Doğrulama

Kurulum ve güvenlik yapılandırması tamamlandıktan sonra, MongoDB servisini nasıl yöneteceğinizi bilmeniz önemlidir.

MongoDB Servisini Başlatma, Durdurma ve Yeniden Başlatma

MongoDB servisini yönetmek için systemctl komutunu kullanabilirsiniz:

  • Başlatma:
    sudo systemctl start mongod
  • Durdurma:
    sudo systemctl stop mongod
  • Yeniden Başlatma:
    sudo systemctl restart mongod
  • Durum Kontrolü:
    sudo systemctl status mongod

Günlükleri Kontrol Etme

Herhangi bir sorunla karşılaştığınızda, MongoDB’nin günlük dosyalarını kontrol etmek faydalıdır. Varsayılan olarak, günlükler /var/log/mongodb/mongod.log adresinde bulunur:

sudo tail -f /var/log/mongodb/mongod.log

Bu komut, günlük dosyasının sonunu gerçek zamanlı olarak gösterir ve sorun giderme için önemli bilgiler sağlar.

Sonuç ve Sıkça Sorulan Sorular (SSS)

Bu rehberde, Ubuntu 16.04 sunucunuza MongoDB’yi nasıl kuracağınızı ve temel güvenlik önlemlerini nasıl alacağınızı öğrendiniz. bindIp ayarını yaparak ağ erişimini kısıtlamak, kimlik doğrulamayı etkinleştirmek ve güçlü kullanıcılar oluşturmak, veritabanınızın güvenliğini sağlamanın temel adımlarıdır. Ayrıca, sunucunuzun güvenlik duvarını (UFW) yapılandırmak, ek bir koruma katmanı sağlar.

Unutmayın ki güvenlik sürekli bir süreçtir. Düzenli yedeklemeler almak, veritabanı performansını izlemek ve MongoDB’nin ve sunucunuzun en son güvenlik yamalarıyla güncel olduğundan emin olmak, uzun vadede veri güvenliğiniz için kritik öneme sahiptir.

Sıkça Sorulan Sorular (SSS)

S1: MongoDB hangi portu kullanır?
C1: MongoDB’nin varsayılan portu 27017’dir. Replica Set’ler (replika kümeleri) için 27017, 27018 ve 27019 portları kullanılabilir.

S2: bindIp ayarı ne işe yarar?
C2: bindIp ayarı, MongoDB’nin hangi IP adreslerinden gelen bağlantıları dinleyeceğini belirtir. Bu, veritabanına erişimi yalnızca belirli kaynaklarla sınırlayarak önemli bir güvenlik katmanı sağlar. 127.0.0.1 yalnızca yerel erişime izin verirken, belirli bir IP adresi veya virgülle ayrılmış IP listesi, uzaktan erişime izin verilen kaynakları tanımlar.

S3: MongoDB’yi güncelledikten sonra ne yapmalıyım?
C3: Eğer sürüm sabitleme yapmadıysanız ve MongoDB’yi güncellediyseniz, yeni sürümle birlikte gelen potansiyel yapılandırma değişikliklerini gözden geçirmelisiniz. Özellikle mongod.conf dosyasındaki güvenlik ayarlarının (bindIp, authorization) yeni sürümle uyumlu ve hala güvenli olduğundan emin olun. Ayrıca, yeni sürümle birlikte gelen herhangi bir yeni güvenlik özelliğini veya öneriyi araştırmanız önerilir.

S4: MongoDB parolamı unuttum, ne yapmalıyım?
C4: MongoDB parolanızı unutmanız durumunda, kimlik doğrulamayı geçici olarak devre dışı bırakarak ve ardından yeni bir yönetici kullanıcısı oluşturarak veya mevcut kullanıcının parolasını değiştirerek kurtarma yapmanız gerekebilir. Bu işlem genellikle mongod.conf dosyasındaki authorization: enabled satırını yorum satırı yaparak, servisi yeniden başlatarak, kimlik doğrulaması olmadan bağlanarak ve ardından parolayı sıfırlayarak yapılır. İşlem bittikten sonra kimlik doğrulamayı tekrar etkinleştirmeyi unutmayın.

S5: Ubuntu 16.04 için hangi MongoDB sürümü önerilir?
C5: Ubuntu 16.04 (Xenial Xerus) için MongoDB’nin 3.6 veya 4.0 sürümleri genellikle uyumludur ve resmi olarak desteklenir. Bu rehberde 3.6 sürümünü kullandık çünkü bu, 16.04 üzerinde oldukça kararlı ve yaygın olarak kullanılan bir sürümdür. Daha yeni sürümler, bazı ek bağımlılıklar veya daha yeni glibc sürümleri gerektirebilir ki bu da eski bir işletim sisteminde sorun yaratabilir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.