Ubuntu'da OpenVPN Sunucu Kurulumu

Baştan belirtmeliyim ki, bu yazı, neden mevcut birçok VPN servis sağlayıcısı varken, ekstra eforla sunucu kurma yoluna gidilmelidir sorusuna cevap aramamaktadır, sadece ve sadece, başlıkta vaat ettiği gibi, basit bir Ubuntu sunucuya nasıl OpenVPN kuruluru anlatmayı amaçlamaktadır. 

Birçok kişi, kendi VPN sunucusunu kurmanın kompleks ve meşakkatli bir işlem olduğunu düşünse de, aslında bu işlem, düşünüldüğü kadar karmaşık değildir. 

Başlangıç olarak, bir sunucunuz olduğunu ve SSH ile bağlanabildiğinizi varsayıyorum. Eğer sunucunuz yoksa, aylık 5 dolara DigitalOcean'ı önerebilirim. Yine de hangi sağlayıcıdan sunucu kiralayacağınız tamamen size kalmış.

OpenVPN'i, Github üzerinden kaynak kodunu inceleyebileceğiniz, birçok komutu tek bir shell dosyasında toplayan ufak script'ten faydalanarak yükleyeceğiz. Bunun haricinde, sunucunun güvenliğini arttırmak için birkaç önlem alacağız.

OpenVPN'i, alttaki komut ile yükleyebilirsiniz. Birkaç soru soracak ki hepsi gayet açık, hepsini enter ile geçebilirsiniz, en sonunda, client'ın kullanabileceği, eğer adını değiştirmediyseniz client.ovpn dosyasını üretecek.
$ mkdir ~/openvpn
$ cd ~/openvpn && wget https://git.io/vpn -O openvpn-install.sh && bash openvpn-install.sh
Bunu yapınca yükleme işlemi bitiyor. Her farklı client (kullanıcı) için, tekrardan bash ~/openvpn/openvpn-install.sh komutunu çalıştırmanız ve karşınıza çıkan soruya 1 numaralı cevabı (Add a cert for a new user) vermeniz yeterli olacak.

Üretilen dosyayı kendi bilgisayarınıza kaydetmek için de scp'den faydalanabilirsiniz. Alttaki komut, biraz önce oluşturduğunuz ovpn uzantılı dosyayı, kendi bilgisayarınızda ~/Downloads/ konumuna kaydedecek.
$ scp SUNUCU_KULLANICI_ADINIZ@SUNUCU_IP_ADRESI:~/openvpn/client.ovpn ~/Downloads/
VPN'i kullanabilmek için kendi bilgisayarınızda da OpenVPN client'ını yüklemeniz gerekiyor.
$ sudo apt-get install openvpn
VPN'i başlatmak için de, alttaki komutu çalıştırmanız lazım. Çalıştığından emin olmak için, IP adresinizi ve ISP'nizi herhangi bir servisten kontrol edebilirsiniz.
$ sudo openvpn --config ~/Downloads/client.ovpn

Sık kullanacağınız için bunu alias olarak kaydedebilirsiniz.

$ nano ~/.bash_aliases

Karşınıza gelen dosyaya alttaki satırı ekleyip, CTRL + X ve Y ile kaydettikten sonra source ~/.bashrc komutunu çalıştırırsanız, terminalinizde vpn yazdığınızda VPN bağlantınız başlayacaktır.

alias vpn='sudo openvpn --config ~/Downloads/client.ovpn'

Son olarak, eğer DNS çözümlenemiyor gibi bir hata alırsanız, client dosyanıza, alttaki kısmı ekleyin.

script-security 2
up /etc/openvpn/update-resolv-conf
down /etc/openvpn/update-resolv-conf

Tekrar sunucu kısmına geri dönecek olursak, ki bu kısımları uygulayıp uygulamamanız tamamen opsiyoneldir, sunucunuzu biraz daha güvenli hale getirebilmek için fail2ban kurabilir, ufw'yi düzenleyip, aktifleştirebilirsiniz.

Sunucunuzu sadece VPN amacıyla kullanacağınızı düşünürsek, OpenVPN portu ile SSH portunu açık tutmanız yeterli olacaktır.

$ ufw allow ssh
$ ufw allow 1194/udp

Devamında nano /etc/default/ufw ile düzenleyeceğiniz dosyada, DEFAULT_FORWARD_POLICY="DROP" olarak düzenlenmiş satırı DEFAULT_FORWARD_POLICY="ACCEPT" olarak düzenlemelisiniz.

Son olarak da eklemeniz gereken birkaç ufw kuralı var. Bunun için de, nano /etc/ufw/before.rules ile dosyayı açıp, başına alttaki kısmı eklemeniz yeterli olacak.

# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES

Tüm bunların sonunda ufw enable ile ufw'yi başlatmanız yeterli olacak. Son olarak da fail2ban ile Brute-force saldırılarına karşı sunucumuzu biraz daha güvenli hale getirebiliriz.

$ sudo apt-get install fail2ban
$ sudo nano /etc/fail2ban/filter.d/openvpn.local

Burada yaptığımız işlem fail2ban için default olarak gelmeyen OpenVPN filterisini oluşturmak oluyor. İşleyiş mantığı da şu şekilde, eğer fail2ban OpenVPN loglarında alttakine benzer bir kayıt bulursa, bunların VPN'e yönelik atak olduğunu anlıyor ve bir sonraki adımda da direktifini ekleyeceğimiz üzere, bu IP'leri banlıyor.

[Definition]

failregex = ^ TLS Error: incoming packet authentication failed from \[AF_INET\]:\d+$
^ :\d+ Connection reset, restarting
^ :\d+ TLS Auth Error
^ :\d+ TLS Error: TLS handshake failed$
^ :\d+ VERIFY ERROR

ignoreregex =

Son olarak da bu direktifi fail2ban'a tanıtacağız.

$ sudo nano /etc/fail2ban/jail.d/openvpn

Dosyaya alttaki kısmı ekleyin.

[openvpn]
enabled = true
port = 1194
protocol = udp
filter = openvpn
logpath = /var/log/openvpn.log
maxretry = 3

Son olarak da fail2ban'ı sudo service fail2ban restart komutu ile tekrar başlatın, eğer yeşil bir ok yazısı görürseniz, herhangi bir probleminiz yok demektir.

Sonuç olarak, her ne kadar uğraşlı gibi görünse de, kendi VPN sunucunuzu kurmak en fazla 5-10 dakikanızı almaktadır. Burada başınıza gelebilecek tek olası problem Google'ın, kullanmış olduğunuz sunucuya ait IP adresini banlamış olması olabilir. Böyle bir durumda, VPN açık iken, Google aramalarınızda, Bilgisayar ağınızdan gelen olağan dışı trafik başlığı altında Sistemlerimiz, bilgisayar ağınızdan gelen sıra dışı bir trafik algıladı gibi bir mesaj ve CAPTCHA ile karşılaşmanız olabilir. Bu durumda bir başka sunucu ve IP adresini denemeniz gerekiyor, yani üstteki adımları bir başka sunucuda tekrarlayıp, yeni kurulum yapmanız lazım.