Ubuntu'da OpenVPN Sunucu Kurulumu

9 Ekim 2016

Son Güncellenme: 28 Mart 2019

Bu yazı, neden mevcut birçok VPN servis sağlayıcısı varken, ekstra eforla sunucu kurma yoluna gidilmelidir sorusuna cevap aramamakta olup, sadece ve sadece, başlıkta vaat ettiği gibi 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 ki bu yazıyı takip ederek Digitalocean VPN kurulumu işlemini başarı ile tamamlayabilirsiniz. Yine de hangi sağlayıcıdan sunucu kiralayacağınız tamamen size kalmış.

OpenVPN Kurulumu

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, değiştirmek istediğiniz bir şey yoksa, 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.

VPN Kullanımı

VPN'i kullanabilmek için öncelikle kendi bilgisayarınızda da OpenVPN client'ını yüklemeniz gerekiyor.

$ sudo apt install openvpn

Bir önceki aşamada üretilen client dosyası ise kendi kurmuş olduğunuz VPN sunucusuna bağlanabilmenizi sağlamaktadır. Üretilen dosyayı kendi bilgisayarınıza kaydetmek için scp'den faydalanabilirsiniz. Alttaki komut, kurulum aşamasında oluşturduğunuz ovpn uzantılı dosyayı, kendi bilgisayarınızda ~/Downloads/ konumuna kaydedecektir.

$ scp [email protected]_IP_ADRESI:~/client.ovpn ~/Downloads/

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'

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

Opsiyonel: Sunucu Güvenliği

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 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 ve 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.

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

Görüldüğü gibi, 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. Böyle bir şey ile karşılaşırsanız 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.