İnternet üzerinden her hangi bir yere bağlandığımızda (web sayfası, dosya
alış-verişi, sohbet vb.) aradaki veri akışı paketler halinde olur. Bu paketler
ağ şeklinde düzenlenmiş İnternet alt yapısı üzerinde bir çok nokta üzerinden
atlayarak gideceği yere varır. Bu noktaların her birinde paket içeriği
görüntülenebilir ve hatta içeriği değiştirilebilir.
Bankacılık gibi
parola girilmesi gereken ‘hassas’ sayfalarda bilgi güvenliğinin sağlanması amacı
ile SSL (Secure Socket Layer – Güvenli Bağlantı Katmanı) adı verilen bir sistem
kullanılır. Web tarayıcının adres çubuğunda kilit resminin göründüğü sayfalarda
bu sistem uygulanıyor ve bilgi güvenliğiniz sağlanıyordur. SSL sistemi gidip
gelen verilerin sadece gönderenin veya alanın açabileceği şekilde şifrelenmesini
ve böylece ara noktalarda verinin erişilememesi ilkesine dayalı
çalışır.
Yerel ağ birbirine yakın mesafedeki bilgisayarlar için
kullanılan bir kavramdır. Daha doğru bir tanımla cihazlar arasında verilerin
geçtiği bütün noktaların tüm erişim haklarının tek bir kişi/kurum tarafından
yönetildiği ağlara yerel ağ diyebiliriz. Yani aynı yerel ağda bulunan iki cihaz
arasında yapılan bilgi alış verişi (ağda bir sorun olmadığı sürece) yabancı
kişiler tarafından görülemez. Burada şu açıklamayı yapmam gerekiyor: Aynı yerel
ağda bulunan cihazlar İnternet üzerinden erişilebilecek sunucular üzerinden
bağlantı kurabilirler. Örneğin bir çok sohbet programı bu mantık ile çalışır. Bu
durumda bilgi ağ dışına çıktığı için görülebilir olmaktadır.
VPN kavramı
Virtual Private Network yani Sanal Özel Ağ, kısaca İnternet üzerinden
istediğiniz yerel ağa, şifreli ve güvenli olarak bağlanabilme kavramının adıdır.
Yani VPN kullanıldığında İnternet’e bağlı her hangi bir noktadan, ayarları daha
önce yapılmış olan, her hangi bir yerel ağa güvenli bir biçimde bağlanılabilir.
Böylece veri güvenliği kaygıları yaşamadan yerel ağın kaynaklarına (Ağ yazıcısı,
kurum içi web/dosya sunucusu, VoIP telefon sistemi v.b.) İnternet üzerinde her
hangi bir yerden erişilebilir.
VPN ile bir noktaya şifreli olarak
bağlandıktan sonra bütün İnternet bağlantılarınızı bağlandığınız cihaz üzerinden
yapabilirsiniz. Özellikle açık kablosuz bağlantı noktalarında güvenliğinizin
sağlanması için bu yöntemi seçebilirsiniz. Bu yöntemi kullandığınızda sizin
bilgisayarınız ile bağlandığınız cihaz arasında bir tünel oluşturulacak ve
İnternet’e sanki bu tünelin ucundan ulaşıyormuşsunuz gibi olacaktır. Yani
bağlandığınız noktaya kadar bütün veriler şifreli gidecek, eğer bağlanılan
sunucu, açılan sayfa şifreleme istemiyorsa, VPN ile bağlandığınız noktadan sonra
şifresiz olacaktır.
VPN kurmak için kullanılan yöntemlerden sık
kullanılan ikisi:
• IPSec (Internet Protokol Güvenliği)
•
SSL/TLS
İkisi arasındaki temel fark şifrelemenin gerçekleştirildiği
taşıma seviyesidir. Daha detaylı bilgi için [2] ‘ye bakabilirsiniz. Şu anda
söyleyebileceğim nadir de olsa IPSec paketlerinin bazı yönlendiriciler üzerinden
geçerken sorun çıkarabildiğidir.
VPN teknolojileri neredeyse bütün
işletim sistemleri için kullanılabilir durumdadır. Ubuntu için de bir çok
alternatif vardır. Bu alternatiflerden biri olan openVPN’i biraz inceleyelim.
openVPN Ubuntu’nun yanında neredeyse bütün işletim sistemlerinde
çalışmaktadır.
Kurulum
openVPN Ubuntu’nun universe
(katkı) depolarında bulunmaktadır. Bu depoyu kullanıyorsak uçbirimden;
$ apt-get install openvpn
komutunu vererek ya da
apt://openvpn bağlantısına tıklayarak openvpn’i
kurabiliriz.
openVPN Nasıl
Çalışır?
Çok fazla kuramsal bilgiye girmeden kısaca açıklamaya
çalışayım: openVPN’i kurduğunuz ve çalıştırdığınız zaman sisteminize tun0 adında
bir ağ ara birimi daha eklendiğini görürsünüz. Bu sanal bir ağ ara birimidir. Bu
ara birim üzerinden gönderilen paketler şifrelenerek kullanımda olan gerçek ağ
ara birimlerine aktarılırlar.
OpenVPN iki farklı veri katmanında çalışır:
Katman 2 ve katman 3. Biraz ileri düzeyde bilgi gerektiren bu kavramları kısaca
açıklamaya çalışayım. Katman 2 bir birine 1. dereceden (anahtar ya da hub
kullanarak) bağlı bilgisayarların bağlanma şeklidir. IP adresleri olmasına
karşın iletişim cihazlarının MAC yani fiziksel adresleri kullanılarak yapılır.
Katman 3 ise (bu uygulama özelinde) IP adreslerinin birbirine yönlendirilmesi
ile kurulan bir iletişim biçimidir. Örneğin yönlendiriciler birbirleri ile bu
katmanda haberleşirler. openVPN paketleri 2. ya da 3. katmandayken alıp
şifreleyebilir. Ne yaptığınızı bilmiyorsanız 3. katmanı kullanmanız tavsiye
edilir.
openVPN kurulumu sunucu – istemci ve noktadan noktaya (p2p) olmak
üzere iki şekilde yapılabilir. noktadan noktaya yalnızca iki cihaz arasında
güvenli bağlantı kurulmak isteniyorsa tercih edilebilir. TLS sertifikaları
oluşturulmadan, yalnızca bir parola ayarlanıp, bağlantının iki ucuna da
girilerek bağlantı kurulabilir. Sertifika kullanımından daha güvensizdir. Sunucu
– istemci modeli ise adından da anlaşılabileceği üzere bir sunucu ve birden
fazla istemciden oluşabilir. Böylece ikiden fazla cihazın birbirine güvenli
yoldan bağlanabilmesi sağlanır. İstemci olan bütün cihazlar sunucuya bağlanırlar
ve eğer izin verilirse aralarındaki iletişim sunucu üzerinden yapılır. Her
istemci ve sunucu arasında bağlantı yapılırken sertifika kontrolü
yapılır.
openVPN
ayarları
openVPN ayarları bir dosyaya düz metin halinde kaydedilir
ve program çalıştırılırken ayarları bu dosyadan alması söylenir. MS Windows
üzerinde ayarlar .ovpn soyadlı dosyalara kaydedilir.
Parola Korumalı
İlk olarak daha kolay
olan noktadan noktaya – p2p tünel oluşturmak için gerekli kısa ayarlara
bakalım.
Öncelikle iki cihazın birbirini tanımasını sağlayacak parolayı
(anahtarı) üretmemiz gerekiyor. Bunun için:
$ openvpn –genkey –secret parola.key
komutunu
veriyoruz. Bağlantı için gerekli olan parola parola.key dosyası içerisinde
oluşturuldu. parola.key dosyasını diğer bilgisayara güvenli bir şekilde
ulaştırmamız gerekiyor. Eğer bu dosya başka birinin eline geçerse güvenli
ağımıza dahil olabilecektir. Şimdi birbirine bağlanacak cihazlardan birini
sunucu, diğerini ise istemci olarak atamamız gerekiyor. Aşağıdaki ayarları birer
metin dosyasına yazıp, ilgili cihazlara ait parola.key dosyası ile aynı dizin
içerisine koymamız gerekiyor.
Sunucu olacak cihaz için ayar dosyası
(sunucu.conf):
dev tun
ifconfig 10.8.0.1 10.8.0.2
secret parola.key
istemci
olacak cihaz için ayar dosyası (istemci.conf):
remote sunucu.adresi
dev tun
ifconfig 10.8.0.2 10.8.0.1
secret parola.key
sunucu.adresi
‘ni sunucunun IP veya alan adı adresi ile değiştirmeniz gerekir. İstemci,
sunucuya UDP 1194 portundan erişmeye çalışacaktır. Eğer sunucu bir NAT, firewall
ya da ADSL modem arkasındaysa bu portun sunucuya yönlendirilmesi gerekmektedir.
Her bir ayar dosyasındaki ifconfig satırlarının ilki cihazın ip adresi, ikincisi
de karşıdaki cihazın ip adresi olarak atanacaktır. Sunucu üzerinde
$ openvpn sunucu.conf
komutunu, daha sonra
istemci üzerinde
$ openvpn istemci.conf
komutunu verdiğiniz zaman
iki cihazın birbirine bağlanması gerekir. İstemci üzerinden
$ ping 10.8.0.1
komutunu vererek bağlantıyı test
edebilirsiniz. (Eğer ping isteklerine yanıt gelirse, bağlantı çalışıyor
demektir.)
Daha fazla bilgi için: http://openvpn.net/index.php/documentation/miscellaneous/static-key-mini-howto.html
adresine bakmanızda fayda var.
Sertifikalı Bağlantı
Birden fazla
bilgisayarın birbirine bağlanabilmesini sağlamak ve güvenliği artırmak için
sertifikalı bağlantıların seçilmesi daha uygun olacaktır.
Sertifikalı
bağlantılar çalışma biçimleri özetle şöyle açıklanabilir: Her bir cihazın
sertifikası tek bir sertifika otoritesi (certificate authority – CA) tarafından
imzalanır. Bağlantı kuracak taraflar birbirlerine sertifikalarını gönderirler.
Sertifikayı alan taraf sertifika otoritesine bakarak sertifikanın gerçek olup
olmadığını anlar. Eğer sertifika gerçekse, bundan sonra gönderilen veriler bu
sertifika (kamu anahtarı) kullanılarak şifrelenir. Ve şifrelenmiş bu veriyi,
yalnızca sertifika sahibi yani özel anahtarı bulunduran kişi
açabilir.
Sertifika otoritesi olan kuruluşlar vardır. Özellikle
e-ticaret, bankacılık gibi uygulamalarda güvenliğin arttırılması için
sertifikalar bu tür kuruluşlara onaylatılmalıdır. Fakat bizim kuracağımız sistem
kontrolümüz altında olacağı için sertifika otoritesinin de biz olmamızda bir
sorun yoktur.
Yapacağımız işlemler:
• Sertifikalar için
parametreleri belirlemek
• Sertifika Otoritesi (CA) dosyasını
oluşturmak.
• Sunucu için sertifika oluşturma.
• İstemci için sertifika
oluşturma.
• Ayar dosyalarının düzenlenmesi.
openVPN içerisinde
sertifikaların daha kolay oluşturulabilmesi için hazırlanmış bazı kodlar vardır.
Bu kodlar Ubuntu içinde /usr/share/doc/openvpn/examples/easy-rsa/ dizininde
bulunurlar. 2.0 sürümünü aşağıdaki komut ile kendi dizininize kopyalayıp gerekli
anahtarları oluşturmaya başlayabilirsiniz.
(not: Dosyaların bütünlüğünün korunabilmesi açısından
bundan sonraki işlemlerin sunucuda gerçeklenmesi önerilir. Fakat şart
değildir.)
$ cp /usr/share/doc/openvpn/examples/easy-rsa/2.0 ~/easy-rsa
$ cd ~/easy-rsa
(not: bu noktadan sonra yapacaklarımızı dizinin
içindeki README dosyasından da takip edebilirsiniz)
Dosyalar
kopyalandıktan sonra easy-rsa dizinine giriyoruz. vars
dosyasını bir metin düzenleyici ile açarak gerekli değişiklikleri yapıyoruz. Bir
çok ayarı değiştirmeniz gerekmez. Dosyayı gözden geçirin, eğer özel bir
durumunuz yoksa yalnızca dosyanın sonundaki ön tanımlı değerleri değiştirmeniz
yeterli olacaktır. Bu değerler her bir sertifikanın içine gömülecek verilerin
daha hızlı girilebilmesine yardımcı olurlar. Her bir sertifika için farklı
bilgiler girebilirsiniz. Değişiklikleri yaptıktan sonra kaydedin ve
çıkın.
$ . vars
$ ./clean-all
komutlarını vererek,
değişkenleri işler hale getiriyoruz ve anahtar dizinimizi oluşturuyoruz. Anahtar
dizini, eğer vars dosyasını değiştirmediyseniz, ~/easy-rsa/keys dizini olacaktır. Bundan sonra üreteceğimiz
bütün dosyaları (anahtarlar ve sertifikalar) bu dizinde bulacağız. Şunu
aklımızda tutmakta fayda var: Bu dizin içinde oluşturulacak .key soyadlı
dosyalar gizli ve hususi dosyalardır, özel anahtarları ihtiva ederler. .crt
soyadlı dosyalar ise dağıtılabilirler.
Sırası ile aşağıdaki komutları
veriyoruz.
$ ./build-dh
$ ./pkitool –initca
$ ./pkitool –server iyiSunucu
$ ./pkitool istemci1
Verdiğimiz
komutları açıklayayım:
Sertifikaları ve anahtarları oluşturmadan önce karşılıklı şifrelemenin
gerçekleşebilmesi için bazı parametrelerin belirlenmesi gerekmektedir. Bu
değişim parametreleri Diffie Hellman adı verilen teknik ile sağlanmaktadır.
CA sertifikasını ve anahtarını oluşturur.
Sunucu için gerekli sertifika/anahtar çiftini oluşturur. Sunucumuzun adı
bundan sonra iyiSunucu olarak anılır.
istemci1 istemcisi için gerekli sertifika/anahtar çiftini
oluşturur.
Böylece, CA, sunucu ve istemci için sertifika/anahtarı
oluşturmuş olduk. Bundan sonra her hangi bir istemci için sertifika/anahtar
üretmek için:
$ . vars
$ ./pkitool istemciAdı
komutlarını
vermek yeterli olacaktır. Dikkat edilmesi gereken oluşturma işlemi sırasında
keys dizini altında ca.key ve ca.crt dosyalarının bulunmasıdır. Bütünlüğü bozmamak ve
dosyaların taşınarak güvenliklerinin tehlikeye atılmaması için bütün oluşturma
işlemlerinin tek bir bilgisayar üzerinde yapılması tavsiye
edilir.
Ayar
Dosyaları
Sertifikalar oluşturulduktan sonra bu sertifika ve
anahtarları kullanacak ayar dosyalarının da yaratılması gerekmektedir. Örnek
ayar dosyalarının birer kopyasını /usr/share/doc/openvpn/examples/sample-config-files/
dizininde bulabilirsiniz. client.conf ve server.conf.gz dosyalarını uygun bir dizine kopyalayıp,
gz’yi açtıktan sonra server.conf dosyasını sunucu.conf ve client.conf
dosyasını istemci1.conf olarak kopyalayalım ve sunucu.conf dosyasını ayarlamakla işe başlayalım.
$ mkdir ~/openvpn
$ cd ~/openvpn
$ cp /usr/share/doc/openvpn/examples/sample-config-files/{client.conf,server.conf.gz} .
$ gunzip server.conf.gz
$ cp {server,sunucu}.conf
$ cp {client,istemci1}.conf
Aşağıda
sunucu.conf dosyası içerisinde mutlaka bulunması gereken satırları yazıyorum.
Bunun dışındaki satırlar için dosya içinde bulunan yorumlara ve açıklamalara
başvurabilirsiniz.
sunucu.conf:
port 1194
proto udp
dev tun
ca ca.crt
cert iyiSunucu.crt
key iyiSunucu.key
dh dh1024.pem
server 10.8.0.0 255.255.255.0
openVPN’e
şöyle dedik:
UDP protokolünün 1194 nolu portundan gelen bağlantıları kabul et.
Katman 3 bir tünel oluştur (dev tun).
CA sertifikası ca.crt, sunucu sertifikan iyiSunucu.crt ve sunucu anahtarın
iyiSunucu.key dosyasındadır.
Diffie-Hellman için dh1024.pem dosyasını
kullan.
Ağdaki IP adreslerini 10.8.0.0 – 10.8.0.254 arasında dağıt kendine de
10.8.0.1 adresini al.
Ek olarak şu ayarları
yapabilirsiniz:
Sunucuya bağlanan bilgisayarların IP adreslerini
korunması ve her seferinde aynı kalması için aşağıdaki komutu
verebilirsiniz.
ifconfig-pool-persist ipp.txt
Bağlanan istemcilerin
birbirini görebilmesi için:
client-to-client
bağlantılarda sıkıştırma kullanılması
için:
comp-lzo
Sürekli kendini terkarlayan mesajların
susturulması için:
mute 20
Ayar dosyası ile çalıştırmak için aşağıdaki
bölüme bakabilirsiniz. Şimdi istemci cihazın da ayar dosyasını
yapalım.
istemci.conf:
client
dev tun
proto udp
remote sunucu.adresi 1194
ca ca.crt
cert istemci1.crt
key istemci1.key
yani
şöyle dedik;
sen istemcisin. Bağlanmaya çalış ve ayarların bir kısmını bağlandıktan sonra
al.
sunucu.adresi adresindeki sunucunun 1194 numaralı portuna UDP protokolü ile
bağlan.
Katman 3 bir tünel oluştur (dev tun).
CA sertifikası ca.crt, sertifikan istemci1.crt ve anahtarın istemci1.key
dosyasındadır.
ek olarak;
eğer sunucuda sıkıştırma
açıldı ise;
comp-lzo
Sürekli kendini terkarlayan mesajların
susturulması için:
mute 20
komutları kullanılabilir.
Programın Çalıştırılması
Ubuntu’nun
paket deposundan yüklediğinizde program daemon olarak çalışmaya başlar. Ve
kendini her açılışta çalıştırmak üzere ayarlar. Otomatik olarak başlarken
okuması gereken ayar dosyalarını /etc/openvpn/ dizini
altına koyabilirsiniz. Böylece her açılışta doğru ayarlar ile başlayacaktır. Şu
anda cihazı açıp kapatma gibi bir lüksümüz olmadığı için öncelikle deamon’ı
sonlandıralım.
$ sudo /etc/init.d/openvpn stop
Şimdi deneme
amaçlı başlatacağımız ve belki çıkacak sorunları çözmemiz gerekeceği için
programı;
$ sudo openvpn ayarDosyasi.conf
komutunu vererek
başlatalım. Böylece programın üreteceği çıktılar direk olarak ekrana yazılacak,
böylece log dosyalarını takip etmemiz gerekmeyecektir. Öncelikle sunucuyu etkin
hale getirmemiz gerekiyor.
$ sudo openvpn sunucu.conf
komutunu verdiğimizde
sunucu ayarlamalarını yapacak, gerekli dosyaları okuyacak ve UDP 1194 potunu
dinlemeye başlayacaktır. Kalabalık çıktıları okumaya çalışın. Eğer en
sonda
Initialization Sequence Completed
yazısını
görürseniz sorun yok demektir. Eğer bu satırı göremediyseniz, dosyalarınızın
yerlerini ve ayar dosyalarınızı tekrar kontrol edin. Kalabalık yazılar arasında
sorunun nedeni yazacaktır.
Şimdi de istemci tarafına geçip buradaki
dosyayı çalıştıralım:
$ sudo openvpn istemci1.conf
Yine kalabalık olan
çıktılar arasında aşağıdaki satırları görürseniz işlem tamamlanmış
demektir.
Peer Connection Initiated with sunucu.adresi:1194
…
Initialization Sequence Completed
Bu
sırada sunucu tarafındaki ekranı da takip ederseniz bağlantı detaylarının ekrana
yazıldığını görebilirsiniz. İstemci tarafında yeni bir uçbirim açıp;
$ ifconfig
komutunu verirseniz tun0 arabirimi
için atanmış bir inet adresi görmeniz gerekir. Yukarıdaki ayarları aynen
uyguladı iseniz bu adres büyük olasılıkla 10.8.0.6 olacaktır. İstemciden
sunucu’ya yani 10.8.0.5 adresine (*) ping atarak;
$ ping 10.8.0.5
bağlantıyı test edebilirsiniz.
Aklınızda bulunsun, testin çalışabilmesi için sunucunun ping isteklerine cevap
vermesi gereklidir.
(*) openVPN Ubuntu üzerinde çalışırken adresleri
teker teker dağıtmamakta her bir istemci için bir alt-ağ oluşturabilmektedir. Bu
yüzden bağlanan her bir istemcinin adresinin 1 eksiği sunucunun adresi
olacaktır. Detaylar için yönlendirme tablosuna (route
komutu ile) bakabilirsiniz.
Son ayarlar ve
toparlama
Eğer aradaki bağlantıyı sorunsuz olarak kurabildiyseniz,
çalıştığı ekranlarda Ctrl – C ile openVPN uygulamalarını kapatabilirsiniz.
İsterseniz her bağlanma için komutları yukarıda tarif edilen şekilde
verebilirsiniz. Fakat sunucu için bu pek uygun olmayacaktır. Sunucu tarafında
bulunan sunucu.conf dosyasını /etc/openvpn/ dizininin
altına kopyalayalım. ca.crt, sunucu.key, sunucu.crt ve dh1024.pem dosyalarını da /root/openvpn dizinine kopyalayalım. İlgili dizin için de
görünürlüğü kısıtlayalım. Yeri değişen dosyalar için conf dosyamızı ayarlayalım.
openVPN’in yetkilerini düşürelim. Böylece güvenliğimizi artıralım. Sonra da
sunucumuzu yeniden başlatalım.
Sunucu üzerinde;
sunucu.conf dosyasının son hali:
port 1194
proto udp
dev tun
ca /root/openvpn/ca.crt
cert /root/openvpn/iyiSunucu.crt
key /root/openvpn/iyiSunucu.key
dh /root/openvpn/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
$ sudo cp sunucu.conf /etc/openvpn/
$ sudo mkdir /root/openvpn
$ sudo chmod 600 /root/openvpn
$ sudo mv ca.crt iyiSunucu.crt iyiSunucu.key dh1024.pem /root/openvpn
$ sudo /etc/init.d/openvpn restart
Hayırlı
olsun.
Notlar
Eğer her bir sertifika içine farklı bilgiler gömmek isterseniz pkitool
komutlarını –interact parametresi ile çalıştırabilirsiniz.
İstemcilerin bütün İnternet trafiklerinin sunucu üzerinden olmasını
istiyorsanız, sunucu ayarları içine
push “redirect-gateway”
komutunu koymanız gerekir. Bu
durumda sunucu üzerinden İnternet’e çıkış ayarlarını da ayrıca yapmanız
gerekir.
“redirect-gateway” komutu bütün trafiği yönlendirdiği için DHCP adresi
alamama gibi sorunlara da yol açabilmektedir.
VPN’in IP adresleri ile yerel ağ bağlantılarının adreslerinin çakışmamasına
(aynı alt ağda olmamasına) dikkat ediniz.
IPv4 ve yönelnedirmeler hakkında biraz bilgi edinmeniz işinizi
kolaylaştıracaktır.
Leave a comment