Takip et

MongoDB Güvenliğini CentOS 8 Üzerinde Sağlama Rehberi

MongoDB Güvenliğini CentOS 8 Üzerinde Sağlama Rehberi MongoDB, modern uygulamalar için popüler bir NoSQL veritabanıdır. Esnekliği ve ölç

MongoDB Güvenliğini CentOS 8 Üzerinde Sağlama Rehberi

MongoDB, modern uygulamalar için popüler bir NoSQL veritabanıdır. Esnekliği ve ölçeklenebilirliği nedeniyle yaygın olarak tercih edilse de, varsayılan kurulumu genellikle güvenlik açısından zayıf noktalara sahiptir. Bu rehber, CentOS 8 işletim sistemi üzerinde çalışan bir MongoDB sunucusunu güvence altına almak için atmanız gereken temel adımları ve en iyi uygulamaları detaylı bir şekilde açıklayacaktır. Veri ihlallerini önlemek ve hassas verilerinizi korumak için bu adımları dikkatle uygulamanız kritik öneme sahiptir.

1. Giriş ve Ön Hazırlıklar

MongoDB sunucunuzu güvence altına alma süreci, işletim sistemi düzeyinde yapılan hazırlıklarla başlar. CentOS 8 sisteminizin güncel olması ve temel ağ güvenliği önlemlerinin alınmış olması, veritabanı güvenliğinin temelini oluşturur.

CentOS 8 Sistemini Güncelleme

Sisteminizin en son güvenlik yamaları ve yazılım güncellemeleriyle güncel olduğundan emin olun. Bu, bilinen güvenlik açıklarının kapatılmasına yardımcı olur.

sudo dnf update -y
sudo dnf upgrade -y
sudo reboot # Gerekliyse sistemi yeniden başlatın

Firewalld Servisini Yapılandırma

CentOS 8, varsayılan olarak firewalld güvenlik duvarını kullanır. MongoDB’ye dışarıdan erişimi kontrol etmek için bu güvenlik duvarını doğru şekilde yapılandırmanız gerekir. İlk olarak, firewalld servisinin çalıştığından emin olun:

sudo systemctl status firewalld

Eğer çalışmıyorsa başlatın ve önyüklemede etkinleştirin:

sudo systemctl start firewalld
sudo systemctl enable firewalld

Şimdilik, MongoDB’nin varsayılan portu olan 27017’ye erişimi kısıtlayacağız. Daha sonra bu kuralı yalnızca güvenilir IP adreslerinden erişime izin verecek şekilde güncelleyeceğiz.

sudo firewall-cmd --permanent --add-service=ssh # SSH erişimine izin ver (zaten açıksa sorun değil)
sudo firewall-cmd --reload # Güvenlik duvarı kurallarını yeniden yükle

Bu ön hazırlıklar tamamlandıktan sonra, MongoDB’nin kendi güvenlik mekanizmalarına odaklanabiliriz.

2. MongoDB Kimlik Doğrulama ve Yetkilendirme

MongoDB’nin en temel güvenlik önlemi, kimlik doğrulama (authentication) ve yetkilendirme (authorization) sistemini etkinleştirmektir. Varsayılan olarak, MongoDB kimlik doğrulaması devre dışıdır ve herhangi bir kullanıcı sunucuya tam erişimle bağlanabilir. Bu durumu değiştirmek, ilk ve en önemli adımdır.

Kimlik Doğrulamayı Etkinleştirme

Kimlik doğrulamayı etkinleştirmek için MongoDB yapılandırma dosyasını (mongod.conf) düzenlemeniz gerekir. CentOS 8 üzerinde bu dosya genellikle /etc/mongod.conf konumunda bulunur.

sudo vi /etc/mongod.conf

Dosyayı açtıktan sonra, security: bölümünü bulun veya ekleyin ve authorization: enabled satırını ekleyin:

# /etc/mongod.conf dosyasından bir kesit
security:
  authorization: enabled

Değişiklikleri kaydedip çıktıktan sonra MongoDB servisini yeniden başlatın:

sudo systemctl restart mongod
sudo systemctl status mongod

Bu adımdan sonra, MongoDB sunucusuna bağlanmaya çalıştığınızda kimlik doğrulama hatası alacaksınız, çünkü henüz bir kullanıcı oluşturmadık.

Yönetici Kullanıcı Oluşturma

Kimlik doğrulama etkinleştirildiğinde, veritabanına erişim için bir yönetici kullanıcı oluşturmanız gerekir. Bu işlemi yapmak için, geçici olarak kimlik doğrulaması olmadan mongo kabuğuna bağlanmanız ve yönetici kullanıcısını oluşturmanız gerekmektedir. Bu adımı, sadece ilk yönetici kullanıcıyı oluşturmak için yapın ve sonrasında bu yöntemi kullanmayın.

# Geçici olarak kimlik doğrulamasını devre dışı bırakın
sudo vi /etc/mongod.conf

security:

authorization: enabled

Satırını yorum satırı yapın veya silin

sudo systemctl restart mongod

Şimdi kimlik doğrulaması olmadan bağlanın

mongo

admin veritabanına geçiş yapın

use admin

Yönetici kullanıcı oluşturun

db.createUser( { user: "mongoAdmin", pwd: "ÇokGüçlüBirŞifreBuraya!", # Gerçek bir parola kullanın roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase", "dbAdminAnyDatabase", "clusterAdmin" ] } )

Çıkış yapın

exit

Yönetici kullanıcıyı oluşturduktan sonra, hemen mongod.conf dosyasını tekrar düzenleyin ve security.authorization: enabled satırını tekrar etkinleştirin.

sudo vi /etc/mongod.conf

security:

authorization: enabled

Satırının yorum satırını kaldırın veya ekleyin

sudo systemctl restart mongod

Şimdi yeni oluşturduğunuz yönetici kullanıcı ile bağlanmayı deneyin:

mongo -u mongoAdmin -p --authenticationDatabase admin

Parolanızı girmeniz istendiğinde, belirlediğiniz parolayı girin. Başarılı bir şekilde bağlanabiliyorsanız, kimlik doğrulama doğru şekilde etkinleştirilmiştir.

Veritabanı Kullanıcıları Oluşturma

mongoAdmin kullanıcısı, tüm veritabanlarında tam yetkiye sahiptir. Uygulamalarınızın veya diğer kullanıcılarınızın bu kadar geniş yetkiye sahip olmaması önemlidir. Her uygulama veya kullanıcı için, yalnızca ihtiyaç duyduğu veritabanı ve koleksiyonlara erişebilen ayrıcalığı en az olan kullanıcılar oluşturun.

Örneğin, myappdb adında bir veritabanı için myappuser adında bir kullanıcı oluşturalım:

mongo -u mongoAdmin -p --authenticationDatabase admin

use myappdb

db.createUser(
  {
    user: "myappuser",
    pwd: "UygulamaŞifresiBuraya!", # Uygulamanız için güçlü bir parola kullanın
    roles: [ { role: "readWrite", db: "myappdb" } ]
  }
)

exit

readWrite rolü, myappdb veritabanında okuma ve yazma yetkisi verir. MongoDB’nin sunduğu çeşitli yerleşik roller (örneğin read, dbOwner, userAdmin) ve özel rollerle yetkilendirmeyi daha da detaylandırabilirsiniz.

3. Ağ Güvenliği ve Şifreleme

Kimlik doğrulama ve yetkilendirme, MongoDB güvenliğinin temelini oluştururken, ağ güvenliği ve veri şifrelemesi de kritik öneme sahiptir. Bu bölümde, veritabanınıza ağ üzerinden erişimi nasıl kısıtlayacağınızı ve verileri aktarım sırasında nasıl şifreleyeceğinizi ele alacağız.

Bağlantı Adreslerini Sınırlama (Bind IP)

MongoDB’nin yalnızca belirli IP adreslerinden gelen bağlantıları dinlemesini sağlamak, yetkisiz erişimi engellemenin ilk adımıdır. mongod.conf dosyasındaki net.bindIp ayarını kullanarak bunu yapabilirsiniz.

sudo vi /etc/mongod.conf

net: bölümünü bulun ve bindIp satırını aşağıdaki gibi güncelleyin:

# /etc/mongod.conf dosyasından bir kesit
net:
  port: 27017
  bindIp: 127.0.0.1,,

* 127.0.0.1: Yalnızca sunucunun kendisinden gelen bağlantılara izin verir (localhost).
* : MongoDB sunucunuzun kendi özel veya genel IP adresidir.
* : MongoDB’ye bağlanacak olan uygulama sunucularınızın veya diğer güvenilir istemcilerin IP adresleridir.

Birden fazla IP adresi virgülle ayrılabilir. Bu ayar, MongoDB’nin yalnızca belirtilen IP adreslerinden gelen bağlantı isteklerini kabul etmesini sağlar. Değişiklikleri kaydedip çıktıktan sonra MongoDB servisini yeniden başlatın:

sudo systemctl restart mongod

Firewalld Kuralları

bindIp ayarı dahili bir MongoDB kontrolü sağlarken, firewalld da işletim sistemi düzeyinde bir güvenlik katmanı ekler. Yalnızca güvendiğiniz IP adreslerinin 27017 numaralı porta erişmesine izin vermelisiniz.

Örneğin, 192.168.1.100 IP adresine sahip bir uygulama sunucusundan MongoDB’ye erişime izin vermek için:

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.100" port port="27017" protocol="tcp" accept'
sudo firewall-cmd --reload

Eğer birden fazla güvenilir IP adresiniz varsa, her biri için ayrı bir kural ekleyebilir veya bir IP aralığı belirtebilirsiniz.

TLS/SSL Şifrelemesini Etkinleştirme

Veritabanı ile istemci arasındaki iletişimi şifrelemek, ağ üzerinde veri dinlemeyi (eavesdropping) önlemek için hayati öneme sahiptir. MongoDB, TLS/SSL (Transport Layer Security/Secure Sockets Layer) kullanarak iletişimi şifreleyebilir.

İlk olarak, bir TLS/SSL sertifikasına ihtiyacınız olacaktır. Üretim ortamlarında bir Sertifika Yetkilisinden (CA) alınmış geçerli bir sertifika kullanmanız önerilir. Geliştirme veya test ortamları için kendinden imzalı bir sertifika oluşturabilirsiniz.

Kendinden İmzalı Sertifika Oluşturma (Örnek):

# Özel anahtar oluştur
sudo openssl genrsa -out /etc/ssl/mongodb.key 2048

Sertifika imzalama isteği (CSR) oluştur

sudo openssl req -new -key /etc/ssl/mongodb.key -out /etc/ssl/mongodb.csr \ -subj "/C=TR/ST=Istanbul/L=Istanbul/O=MyCompany/OU=IT/CN=your_mongodb_hostname"

Kendinden imzalı sertifika oluştur (365 gün geçerli)

sudo openssl x509 -req -days 365 -in /etc/ssl/mongodb.csr -signkey /etc/ssl/mongodb.key -out /etc/ssl/mongodb.crt

Anahtar ve sertifikayı tek bir .pem dosyasına birleştir

sudo cat /etc/ssl/mongodb.key /etc/ssl/mongodb.crt > /etc/ssl/mongodb.pem

İzinleri ayarla

sudo chown mongod:mongod /etc/ssl/mongodb.pem sudo chmod 600 /etc/ssl/mongodb.pem

Ardından, mongod.conf dosyasını düzenleyerek TLS/SSL’yi etkinleştirin:

sudo vi /etc/mongod.conf

net: bölümüne aşağıdaki satırları ekleyin:

# /etc/mongod.conf dosyasından bir kesit
net:
  port: 27017
  bindIp: 127.0.0.1,,
  ssl:
    mode: requireSSL # Tüm bağlantılar SSL kullanmalı
    certificateFile: /etc/ssl/mongodb.pem
    privateKeyFile: /etc/ssl/mongodb.pem
    #CAFile: /etc/ssl/ca.pem # Eğer bir CA kullanıyorsanız

* mode: requireSSL: Tüm istemcilerin TLS/SSL kullanarak bağlanmasını zorunlu kılar. (preferSSL ile hem şifreli hem de şifresiz bağlantılara izin verebilirsiniz, ancak requireSSL daha güvenlidir).
* certificateFile: Sertifika dosyanızın yolu.
* privateKeyFile: Özel anahtar dosyanızın yolu.

Değişiklikleri kaydedip çıktıktan sonra MongoDB servisini yeniden başlatın:

sudo systemctl restart mongod

Şimdi istemcileriniz, TLS/SSL kullanarak bağlanmak zorunda kalacaktır:

mongo -u myappuser -p --authenticationDatabase myappdb --ssl --sslAllowInvalidCertificates # Kendinden imzalı sertifika için

Üretim ortamında geçerli bir sertifika kullanıyorsanız --sslAllowInvalidCertificates kullanmamalısınız.

4. Sistem Güvenliği ve En İyi Uygulamalar

MongoDB’nin kendi güvenlik ayarlarının yanı sıra, işletim sistemi düzeyinde ve genel yönetim uygulamalarında da güvenlik bilinciyle hareket etmek önemlidir.

Ayrıcalıklı Olmayan Kullanıcı ile Çalıştırma

MongoDB, varsayılan olarak mongod adında ayrıcalıklı olmayan bir sistem kullanıcısı altında çalışır. Bu, potansiyel güvenlik açıklarının sistem genelinde yayılmasını engeller. Bu yapılandırmayı değiştirmeyin ve MongoDB’nin root kullanıcısı altında çalışmadığından emin olun.

Dosya Sistemi İzinleri

MongoDB veri ve günlük dosyalarının bulunduğu dizinlerin doğru izinlere sahip olması, yetkisiz erişimi engeller. Veri dizini (/var/lib/mongo) ve günlük dizini (/var/log/mongodb) yalnızca mongod kullanıcısı tarafından okunabilir ve yazılabilir olmalıdır.

sudo chown -R mongod:mongod /var/lib/mongo
sudo chown -R mongod:mongod /var/log/mongodb
sudo chmod -R 700 /var/lib/mongo
sudo chmod -R 700 /var/log/mongodb

Bu komutlar, dizinlerin ve içindeki dosyaların yalnızca mongod kullanıcısı tarafından erişilebilir olmasını sağlar.

Güvenlik Güncellemeleri ve Yama Yönetimi

Hem CentOS 8 işletim sisteminizi hem de MongoDB yazılımınızı düzenli olarak güncel tutmak, bilinen güvenlik açıklarına karşı korunmanın en etkili yollarından biridir. MongoDB, güvenlik yamalarını ve iyileştirmelerini yeni sürümlerle yayınlar.

sudo dnf update -y # İşletim sistemi güncellemeleri

MongoDB için de sürüm notlarını takip ederek güncel ve güvenli bir sürüm kullandığınızdan emin olun.

Denetim (Auditing) ve Günlükleme

MongoDB Community sürümü gelişmiş denetim özelliklerine sahip olmasa da, mongod.log dosyasını düzenli olarak izlemek ve analiz etmek önemlidir. Bu günlük dosyası, bağlantı denemeleri, kimlik doğrulama hataları ve diğer önemli olaylar hakkında bilgi sağlar.

Enterprise sürümü, veritabanı etkinliklerini detaylı bir şekilde denetleme imkanı sunar. Eğer hassas verilerle çalışıyorsanız ve mevzuat uyumluluğu gerekiyorsa, Enterprise sürümünün denetim özelliklerini araştırmanız faydalı olabilir.

Yedekleme ve Kurtarma Stratejileri

Güvenli bir yedekleme ve kurtarma stratejisi, veri kaybını önlemenin yanı sıra, olası bir güvenlik ihlali durumunda verilerinizi geri yükleyebilmenizi sağlar. Yedeklerinizi şifreleyerek ve güvenli, ayrı bir konumda saklayarak güvence altına alın. mongodump ve mongorestore araçları, MongoDB yedeklemesi için temel araçlardır.

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

MongoDB’yi CentOS 8 üzerinde güvence altına almak, tek seferlik bir işlemden ziyade sürekli bir süreçtir. Kimlik doğrulama, ağ güvenliği, şifreleme ve sistem düzeyinde en iyi uygulamaların bir kombinasyonu, veritabanınızın güvenliğini önemli ölçüde artıracaktır. Unutmayın ki hiçbir sistem %100 güvenli değildir, bu yüzden sürekli tetikte olmak ve güvenlik politikalarınızı düzenli olarak gözden geçirmek önemlidir.

Sıkça Sorulan Sorular (SSS)

MongoDB’yi neden güvence altına almalıyım?

MongoDB’yi güvence altına almak, hassas verilerinizin yetkisiz erişim, veri ihlalleri ve kötü niyetli saldırılardan korunmasını sağlar. Verilerinizi şifrelemek, kimlik doğrulaması uygulamak ve ağ erişimini kısıtlamak, yasal uyumluluk gereksinimlerini karşılamanıza ve iş itibarınızı korumanıza yardımcı olur.

mongod.conf dosyasını nerede bulabilirim?

CentOS 8 üzerinde MongoDB’nin yapılandırma dosyası genellikle /etc/mongod.conf konumunda bulunur.

TLS/SSL sertifikalarını nasıl oluşturabilirim?

Üretim ortamları için bir Sertifika Yetkilisinden (CA) sertifika almanız önerilir. Geliştirme veya test ortamları için openssl komut satırı aracıyla kendinden imzalı sertifikalar oluşturabilirsiniz. Örneğin, openssl genrsa ve openssl req komutları ile özel anahtar ve sertifika imzalama isteği oluşturabilir, ardından openssl x509 ile kendinden imzalı sertifikayı üretebilirsiniz.

MongoDB kimlik doğrulaması çalışmıyorsa ne yapmalıyım?

İlk olarak, /etc/mongod.conf dosyasında security.authorization: enabled satırının doğru şekilde etkinleştirildiğinden emin olun. MongoDB servisini yeniden başlattığınızdan emin olun. Kullanıcı adı ve parolanın doğru olduğundan ve doğru --authenticationDatabase parametresini kullandığınızdan emin olun. MongoDB günlük dosyalarını (genellikle /var/log/mongodb/mongod.log) kontrol ederek hata mesajlarını inceleyin.

Hangi MongoDB versiyonunu kullanmalıyım?

Her zaman MongoDB’nin en son kararlı sürümünü kullanmanız önerilir. Yeni sürümler genellikle güvenlik yamaları, performans iyileştirmeleri ve yeni özellikler içerir. Eski sürümlerde bilinen güvenlik açıkları olabilir ve desteklenmeyebilirler.

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.