22 Aralık 2011 Perşembe

Postgresql SSL Kurulumu

postgresql bağlantı ayarları kısmında SSL özelliğinin var olduğunu göreceksiniz. Şimdi burda bu SSL'i neden ve nasıl kullanacağımızı bilmek mühim. Ben burda basit olarak  sorgularınızın network üzerinde (client dan postgresql server'ınıza) şifreleyerek nasıl göndereceğinizden bahsedeceğim.

ilk olarak SSL kullanmadığımız bir bağlantıyı izleyip neler olup bittiğini görelim. ben network'u izlemek için tcpdump kullanacağım siz istediğiniz bir yazılımla ortamı dinleyebilirsiniz.

tcpdump -i eth0 -X -s 3000 host 10.22.22.76
malumunuz burdaki 10.22.22.76 no'lu adres, gelen paketleri izleyeceğimiz veritabanı server makinasının adresi.

daha sonra neler olup bittiğini görmek için aynı makinaya psql ile local makinamdan bağlanıp, çeşitli sorgular yollayacağım. bu arada gözünüz bir yandan da tcpdump çıktısında olsun.

psql -U postgres -d test -h 10.22.22.76
-- test için bir tablo yaratalım 
create table foo (id integer,password varchar(32));
-- şimdi bir satır girelim ve tcpdump ile bu girdiğimiz veriyi izleyelim
insert into foo values (1,'en gizlisinden password');

eğer girdiğimiz datayı tcpdump ile takip ettiysek şöyle bir çıktı görmeniz gerekiyor.


farkettiyseniz orada bir yerlerde bizim gönderdiğimiz sorgu ve dönüşünde postgres'in bize verdiği
yanıtı görebilirsiniz. Bunu biraz düşünün neler olabilir. Eğer tehlikeli olabileceğini düşünüyorsanız okumaya devam.

peki gelelim SSL kurulumuna.

ilk olarak bir SSL sertifikası yaratmamız gerekiyor. sırasıyla aşağıdakileri uygularsak eğer tamamdır,

#openSSL paketlerinin kurulu olduğunu varsayıyorum tabi ki.
openssl genrsa -des3 -out server.key 1024
#CRT dosyasını çıkaralım
openssl rsa -in server.key -out server.key
openssl req -new -key server.key -x509 -out server.crt
# istediğiniz encryption algoritmasını kullanabilirsiniz. (man openssl) 

bunları yaptıktan sonra yarattığımız bu iki dosyayı (server.key,server.crt)
$PGDATA klasörünün altına taşımamız gerekiyor.

Daha sonra $PGDATA/postgresql.conf içinde SSL = off kısmını on olarak değiştirip
server a restart attığımızda aynı sorguları tekrar denersek

burda mutlaka ama mutlaka atlamamız gereken bir kısım var, yarattığımız dosyaların
sahibi (owner) mutlaka postgres olmalı ve izinler 0600 olaral verilmeli.
chown postgres server.*
chmod 0600 server.*

psql -U postgres -d test -h 10.22.22.76
-- şimdi bir satır girelim ve tcpdump ile bu girdiğimiz veriyi izleyelim
insert into foo values (1,'en gizlisinden password');

tcpdump çıktısında şöyle şeyler göreceğiz.


gördüğümüz gibi artık bağlantılarımızda dışardan birisi dinlediğinde anlamsız veriler görecektir. tabi bu çok basit bir çözüm ( en ufak yapılması gereken diyelim) bunun dışında her bir client ile de sertifika paylaşımı sağlamak gibi daha iyi çözümler var. bunlarıda daha sonra anlatacağım.

Hiç yorum yok:

Yorum Gönder