Basit bir e-ticaret sitesi hayal edin. Başlangıçta birkaç yüz ürün, günde birkaç sipariş ve standart bir MySQL veritabanı işinizi fazlasıyla görür. Ancak işler büyüdüğünde; karmaşık sorgular, coğrafi veri analizleri, eşzamanlı binlerce JSON tabanlı istek devreye girdiğinde o tanıdık mimari yavaşça nefessiz kalmaya başlar. İşte o an, birçok geliştirici rotasını PostgreSQL’in sunduğu sağlam ve standartlara bağlı yapıya çevirir.
Plesk, çoğumuz için LAMP veya LEMP yığınlarını tek tıkla yönettiğimiz konforlu bir liman. Fakat iş PostgreSQL’e geldiğinde, arayüzün arkasındaki mekanizmayı biraz daha yakından tanımak, çarkların nasıl döndüğünü bilmek gerekir. Bu yazıda, küçük bir ihtiyaçtan yola çıkıp Plesk üzerinde PostgreSQL’i nasıl ayağa kaldıracağımızı ve onu dış dünyanın tehlikelerine karşı nasıl zırhlandıracağımızı adım adım inceleyeceğiz.
Panelin Arkasındaki Motoru Çalıştırmak
Plesk kontrol panelinizde PostgreSQL simgesini görmüyor oluşunuz, sunucunuzun bu gücü desteklemediği anlamına gelmez. Plesk, modüler bir yapıya sahiptir ve kaynak tüketimini optimize etmek adına PostgreSQL sunucusunu varsayılan kurulumda genellikle pasif bırakır.
İlk adımımız oldukça basit. Plesk panelinize admin yetkileriyle giriş yapın. Sol menüden Araçlar ve Ayarlar (Tools & Settings) sekmesine, oradan da Güncellemeler (Updates) bölümüne geçin. Açılan Plesk Installer penceresinde “Bileşen Ekle/Kaldır” (Add/Remove Components) seçeneğini tıklayın.
Veritabanı barındırma bileşenleri altında PostgreSQL server seçeneğini bulun ve kurulumu başlatın. Paket yöneticisi arka planda işletim sisteminize uygun (Ubuntu/Debian üzerinde APT, RHEL/AlmaLinux üzerinde DNF/YUM) resmi PostgreSQL paketlerini indirip servis olarak yapılandıracaktır. Birkaç dakika içinde temel motorumuz hazır hale gelir.
Kurulum bittiğinde Plesk, bu sunucuyu yerel bir veritabanı motoru olarak otomatikman tanır. Ancak henüz hiçbir şey bitmedi; asıl işimiz, bu taze kurulumu varsayılan güvensiz halinden kurtarmakta.
Kimlik Doğrulama Katmanını Yeniden Örmek: pg_hba.conf
PostgreSQL’in güvenlik kalbi tek bir dosyada atar: pg_hba.conf. HBA, “Host-Based Authentication” yani ana makine tabanlı kimlik doğrulama anlamına gelir. Bir istemcinin sunucuya nereden, hangi kullanıcıyla ve hangi yöntemle bağlanabileceğini bu dosya belirler.
Sunucunuza SSH üzerinden bağlanın. Dağıtımınıza göre bu dosya genellikle /etc/postgresql/X.X/main/pg_hba.conf veya /var/lib/pgsql/data/pg_hba.conf dizininde yer alır. Varsayılan yapılandırmada bazı yerel bağlantılar trust ya da md5 olarak ayarlanmış olabilir. Günümüz standartlarında trust ölümcül bir güvenlik açığıdır; md5 ise artık eskimiş bir şifreleme standardıdır.
Modern bir güvenlik mimarisinde hedefimiz, bağlantıları scram-sha-256 yöntemine geçirmektir. Bu protokol, şifrenin ağ üzerinden ve sunucu belleğinden doğrudan geçmesini engelleyen kriptografik bir meydan okuma-yanıt mekanizması kullanır.
Yapılandırma dosyanızdaki kritik satırları şu mantık çerçevesinde düzenleyin:
- Yerel Soket Bağlantıları:
local all all scram-sha-256şeklinde ayarlanmalı, şifresiz geçişe izin verilmemelidir. - Loopback IPv4/IPv6 Bağlantıları:
host all all 127.0.0.1/32 scram-sha-256vehost all all ::1/128 scram-sha-256olarak sınırlandırılmalıdır. - Gereksiz Ağ İzinleri: Dışarıdan doğrudan veritabanı erişimi gerekmiyorsa, genel IP bloklarına (0.0.0.0/0) asla izin verilmemelidir.
Bu değişiklikleri yaptıktan sonra PostgreSQL ana yapılandırma dosyası olan postgresql.conf içerisinde password_encryption = scram-sha-256 direktifinin aktif olduğundan emin olun ve servisi systemctl restart postgresql komutuyla yeniden başlatın.
Dış Dünyaya Kalkan Çekmek: Port ve Bellek Güvenliği
PostgreSQL varsayılan olarak 5432 portunu dinler. Saldırgan botlar interneti tararken bu portu bir fener gibi ararlar. Eğer projeleriniz Plesk sunucusu ile aynı fiziksel makinede barınıyorsa, PostgreSQL’in dış IP üzerinden dinleme yapmasına kesinlikle gerek yoktur.
postgresql.conf dosyasını açın ve listen_addresses parametresini bulun. Burayı genel ağa açık bırakmak yerine yalnızca yerel bağlantıları kabul edecek şekilde sınırlandırın:
listen_addresses = 'localhost'
Bu tek satırlık müdahale, sunucunuzun PostgreSQL portunu dış dünyanın tarama ve kaba kuvvet (brute-force) saldırılarına tamamen kapatır. Plesk üzerindeki PHP, Node.js veya Python uygulamalarınız veritabanına sorunsuzca localhost üzerinden erişmeye devam edecektir.
Eğer uygulamanız farklı bir sunucudaysa ve PostgreSQL’e uzaktan bağlanmak zorundaysa, portu herkese açmak yerine Linux güvenlik duvarını (UFW veya Firewalld) kullanarak sadece istemci sunucunun statik IP adresine yetki verin. Plesk Güvenlik Duvarı (Plesk Firewall) eklentisi bu kuralı arayüz üzerinden saniyeler içinde tanımlamanıza olanak tanır.
Sistem Kaynakları ve İzolasyon: Büyük Resmi Görmek
Tek bir veritabanı kurup içine veri yazmak işin en kolay kısmıdır. Asıl mühendislik refleksi, o veritabanının sunucudaki diğer siteleri boğmasını engellemek ve verinin bütünlüğünü garanti altına almaktır.
Plesk paylaşımlı veya çok müşterili bir yapı sunar. Bu ortamda kötü yazılmış tek bir SQL sorgusunun tüm RAM’i tüketip sunucuyu kilitlemesini istemezsiniz. postgresql.conf içinde yer alan work_mem, maintenance_work_mem ve max_connections değerlerini sunucunuzun donanım kapasitesine göre rasyonel biçimde sınırlandırın. Yüzlerce gereksiz eşzamanlı bağlantıya izin vermek, her an patlamaya hazır bir bellek sızıntısına davetiye çıkarmaktır.
Tüm bu güvenlik ve performans katmanlarını oturttuktan sonra son halka, düzenli yedekleme stratejisidir. Plesk’in dahili Yedekleme Yöneticisi (Backup Manager), PostgreSQL veritabanlarını sorunsuz bir şekilde rutin yedekleme döngüsüne dahil edebilir. Günlük artımlı (incremental) ve haftalık tam yedekleri uzak bir bulut depolama alanına (S3, FTP) aktarmak, yapılandırdığınız bu güvenli kaleyi gerçek anlamda yenilmez kılacaktır.
Güvenlik durağan bir durum değil, sürekli yürütülen bir disiplindir; sunucunuzdaki PostgreSQL motorunu bugün bu bakış açısıyla gözden geçirmeye ne dersiniz?