Ubuntu'da OpenVPN Sunucu Kurulumu

Birçok kişi, kendi VPN sunucusunu kurmanın kompleks bir işlem olduğunu düşünse de, düşünüldüğü kadar karmaşık değildir. Ancak 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ğini sunmayı amaçlamaktadır.

Başlangıç olarak, bir sunucunuz olduğunu ve SSH ile bağlanabildiğinizi varsayıyorum. Eğer ki 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 ki 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.conf

Burada yaptığımız işlem fail2ban için default olarak gelmeyen OpenVPN filterisini oluşturmak oluyor. İşleyiş mantığı da şu şekilde, eğer ki 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 = :\d{1,5} TLS Auth Error
    :\d{1,5} VERIFY ERROR:
    :\d{1,5} TLS Error: TLS handshake failed
    :\d{1,5} [ECONNREFUSED]: Connection refused

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

$ cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local && nano /etc/fail2ban/jail.local

Dosyanın en altına alttaki kısmı ekleyin.

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

Son olarak da fail2ban'ı /etc/init.d/fail2ban restart komutu ile tekrar başlatın, eğer ki 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.