Firma dışındayken firma sunucularına ve uygulamalarına bağlanmak ya da herkese açık internet kullanırken bilgisayar ve bağlantılarınızın özellikle Wi-Fi güvenliğini artırmak için VPN kullanmak gayet doğru bir karardır. OpenVPN kendini kanıtlamış, sağlam ve son derece esnek yapısıyla şifreleme, kimlik doğrulama ve sertifikasyon özelliklerine sahip tek bir TCP/UDP port üzerinden çalışan güvenilir bir IP tünel uygulamasıdır. O yüzden bu kolay kurulum ve yönetimiyle tercih sebebidir.
Bu yazıda anlatılan sistem 32 bit Linux Centos 6.5 VPS üzerinde çalışan OpenVPN 2.3.3 sürümü içindir.
Bu sunucuyu kendi firma ağı içerisine kuracağınız gibi özellikle yurtdışından bir VPS bilgisayarı kiralayarak da kullanabilirsiniz. OpenVPN çok fazla CPU ve bellek kullanmadığından en basit konfigürasyonlarda çalıştırabilirsiniz. Bunun için Digital Ocean, Linode ya da Ramnode firmalarında güvenilir ve ucuz VPS bulmak mümkün.
Kurulum
VPS ya da kendimizin kurduğu Centos Linux’a root olarak login oluyoruz. Eğer bir VPS kiralamışsak, tedarikçi firmanın ayarlarla ilgili ekranından TUN özelliğinin açık (enable) olmasına dikkat ediyoruz. Aşağıdaki komutla da doğrulamasını yapabiliriz:
cat /dev/net/tun
Eğer bu komutun sonucu;
cat: /dev/net/tun: File descriptor in bad state
şeklindeyse TUN arabirimi aktif haldedir. Devam edebiliriz.
Sistemimizi açtıktan sonra yapacağımız ilk iş EPEL deposunu (Extra Packages for Enterprise Linux) yüklemek olacak. Bunu aşağıdaki komutla yapıyoruz:
yum install epel-release
ya da
wget http://mirror.pnl.gov/epel/6/i386/epel-release-6-8.noarch.rpm yum install epel-release-6-8.noarch.rpm
Hemen ardından OpenVPN’i kuruyoruz:
yum install openvpn
Eğer vi yerine nano kullanmak istiyorsanız:
yum install nano
OpenVPN kurulumu bitmiştir. Şimdi ayarlar kısmına geçebiliriz.
Ayarlar
OpenVPN ile beraber gelen örnek konfigürasyon dosyasını OpenVPN’in olduğu klasöre kopyalıyoruz:
cp /usr/share/doc/openvpn-2.3.2/sample/sample-config-files/server.conf /etc/openvpn/ cd /etc/openvpn/
Daha sonra bu dosyayı nano ya da vi editörüyle açıyoruz
nano server.conf
Bu dosyanın içindeki ayarları sırasıyla değiştirmeye başlıyoruz. Öncelikle TCP ya da UDP protokollerinden birini seçmemiz gerekiyor. TCP daha kontrollü ama yavaş iken UDP daha serbest -ve bu yüzden hızlı- bir protokol olduğundan genelde UDP tercih edilir.
# TCP or UDP server? ; proto tcp proto udp
Bütün trafiğimiz bu VPN suncusu üzerinden gitsin istiyorsak aşağıdaki komutu konfigürasyon dosyası içerisinde yer almalı:
push redirect-gateway def1 bypass-dhcp
DNS sunucuları olarak örneğin OpenDNS’in sunucularını kullanabilirsiniz (istediğiniz DNS sunucularını yazabilirsiniz):
push 'dhcp-option DNS 208.67.222.222' push 'dhcp-option DNS 208.67.220.220'
Sertifika dosyalarınız ve bulundukları yer için aşağıdakileri yazıyoruz:
ca /etc/openvpn/easy/keys/ca.crt cert /etc/openvpn/easy/keys/server.crt key /etc/openvpn/easy/keys/server.key
Diffie-Hellman parametrelerini 2048 bit olacak şekilde yazıyoruz:
dh /etc/openvpn/easy/keys/dh2048.pem
Sunucu güvenliği için OpenVPN’i en düşük yetkilerle çalıştırmak için:
user nobody
group nobody
Sunucu IP adresini eğer ağınız ile çakışmıyorsa aşağıdaki gibi yapın:
server 10.8.0.0 255.255.255.0
Diğer ayarlar varsayılan haliyle kalabilir.
Sertifikalar
Öncelikle RSA servisini kuruyoruz:
yum install easy-rsa mkdir -p /etc/openvpn/easy/keys cd /usr/share/easy-rsa/2.0 cp -r * /etc/openvpn/easy/
Daha sonra RSA servisinin ayarlarına bakalım:
cd /etc/openvpn/easy/ nano vars
Aşağıdaki değişiklikleri yapın:
export KEY_COUNTRY="TR" export KEY_PROVINCE="TR" export KEY_CITY="Istanbul" export KEY_ORG="XX" export KEY_EMAIL="me@myhost.mydomain" export KEY_OU=""
Şimdi sunucu sertifikalarını oluşturabiliriz:
. ./vars ./clean-all /build-ca ./build-key-server server
Diffie Helmann anahtarını oluşturun
./build-dh
Bu komutlarla sunucumuzun sertifikalarını oluşturmuş olduk.
IP işleri
Kurulu değilse iptables servisini kurun.
yum install iptables-services -y
IP yönlendirmesi için aşağıdakileri yapalım:
nano /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p
Iptables komutları (xen ve KMZ ise)
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE
Eğer sunucumuz OpenVZ ise
iptables -t nat -A POSTROUTING -o venet0 -j SNAT --to-source sunucu_IP iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT --to-source sunucu_IP service iptables save
Selinux varsa kapatalım
nano /etc/selinux/config
Buradaki enforcing ayarını disabled yapalım:
SELINUX=disabled
Sunucu her başladığında OpenVPN ve iptables servisleri de başlasın.
chkconfig openvpn on chkconfig iptables on
OpenVPN’i artık başlatabilirsiniz
service openvpn start
Kullanıcılar için key ve sertifika dosyaları oluşturmak
Aşağıdaki komutları sırasıyla çalıştırıyoruz, kullanıcı_adı kısmına ilgili kullanıcının adını yazıyoruz:
cd /etc/openvpn/easy . ./vars ./build-key kullanıcı_adı
Kulllanıcılara config dosyasını kopyalamak:
Kendi (Linux) bilgisayarımızdan aşağıdaki komutlarla sunucu ve kullanıcı sertifikalarını kopyalıyoruz, örneğimizde sunucu_adı olarak server seçmiştik:
scp root@vpn_sunucusu:/etc/openvpn/easy/keys/kullanıcı_adı.key . scp root@vpn_sunucusu:/etc/openvpn/easy/keys/kullanıcı_adı.crt . scp root@vpn_sunucusu:/etc/openvpn/easy/keys/sunucu_adi.crt .
Kullanıcının OpenVPN Config dosyası: sunucu_adı.ovpn
client dev tun proto udp remote sunucu_adı_veya_IP 1194 nobind persist-key persist-tun comp-lzo ca sunucu_adı.crt cert kullanıcı_adı.crt key kullanıcı_adı.key script-security 2 system redirect-gateway pull verb 2 mute-replay-warnings nobind resolv-retry infinite route-delay 2
Bu dosyayı ve kopyaladığımız diğer sertifika ve anahtar dosyalarını kullanıcı bilgisayarına kopyalayıp/gönderip kullanılabiliriz.
İşin sonuna geldik. Artık bu dosyalar ile Windows, Mac, Android ya da iOS işletim sistemlerinden OpenVPN Client kullanarak, OpenVPN sunucusuna erişebiliriz.
OpenVPN kullanıcı uygulamaları:
Windows için OpenVPN sitesinden,
Mac için Tunnelblick,
Androd için OpenVPN Connect,
iOS için OpenVPN Connect
Bu uygulamaları kurduktan sonra, hazırladığımız dosyaları kendi cihazımıza transfer edip kullanmaya başlayabiliriz.