Ubuntu OpenVPN Kurulumu

Son Güncelleme: 15 Şubat 2020

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. Ben bu yazıda Digitalocean VPN kurulumu işlemini baştan sona tüm adımları ile anlatacağım; ancak aynı işlemleri başka sağlayacılarda da aynı şekilde gerçekleştirebilirsiniz. Bu yazının sonunda Ubuntu sunucuya nasıl OpenVPN kurulur sorusunun cevabını öğrenmiş olacaksınız.

DigitalOcean VPN Kurulumu

Eğer DigitalOcean aracılığı ile VPN kurmak istiyorsanız burada anlatacağım adımları takip edebilirsiniz. Eğer DigitalOcean üyeliğiniz yoksa, ilk kez kayıt olduğunuzda size 60 gün içinde harcayabileceğiniz karşılıksız 100 dolar veren kayıt olma linki aracılığı ile DigitalOcean'a üye olabilirsiniz. DigitalOcean'a kayıt olduktan sonra, sağ üstte yer alan Create butonuna basıp, Ardından Droplets yazısına tıklayarak droplet oluşturma kısmına gelebilirsiniz.

Droplet Oluştur
DigitalOcean Droplet Oluşturma

Droplet oluşturma sayfasında, 2023 yılına kadar desteklenecek bir Ubuntu sürümü olan Ubuntu 18.04'i seçip, altta yer alan planların yer aldığı sliderdan en düşük plan olan 5 dolarlık planı seçebilirsiniz. Daha iyi bir planı seçmek size kalmış, ama VPN performansı açısından çok bir şey değiştirmeyecektir.

Sunucu Seçimi
DigitalOcean Sunucu Planı Seçimi

Ardından, VPN kurulumu yapacağınız lokasyonu seçmeniz gerekiyor. Bu lokasyon seçiminin önemi şu, eğer ABD IP'si ile işlem yapmak istiyorsanız, doğal olarak lokasyon seçimini ABD'den yapmalısınız. Eğer Avrupa'dan seçim yapacaksanız 2020 yılında Amsterdam, Londra veya Frankfurt seçenekleri mevcut.

VPN Lokasyonu Seçimi
DigitalOcean VPN Lokasyonu Seçimi

Son olarak en altta yer alan Create Droplet butonuna basarak VPN'i kuracağımız sunucuyu oluşturabilirsiniz. Siz dropleti oluşturduktan sonra, email adresinize sunucunun IP adresi ve root kullanıcısı için şifre gelecektir.

OpenVPN Kurulumu

VPN kurulumu için öncelikle mail adresinize gelen sunucu IP adresi ve şifre ile sunucuya bağlanmanız gerekmektedir. Eğer halihazırda Linux tabanlı bir işletim sistemi kullanıyorsanız, direkt olarak terminal aracılığı ile SSH bağlantısı yapabilirsiniz.

$ ssh ro[email protected]_IP_ADRESI

Eğer Windows kullanıyorsanız PuTTY kurulumu yaparak aynı işlemleri yapabilirsiniz. Eğer nasıl yapacağınız konusunda çok fikriniz yoksa, öncelikle PuTTY'yi bu link aracılığı ile indirebilirsiniz. Programı yükledikten sonra, sunucunuza bağlanmak için, Host Name for IP address kısmına sunucu IP'nizi yazıp Open butonuna basmalısınız. Ardından karşınıza çıkan pencerede Yes'e basıp, karşınıza gelecek komut isteminde login as kısmına root yazıp Enter'a basmalısınız. Sonrasında PuTTY size şifrenizi soracaktır. Bu aşamada şifrenizi de yazıp Enter'a basmanızın ardından sunucuya bağlanmış olacaksınız. Eğer bunlar biraz karışık geldiyse, YouTube'da yer alan şu videoyu seyredebilirsiniz.

Suncuya bağlandıysanız eğer artık OpenVPN kurulumu aşamasına geçebiliriz. 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

DNS sızıntısı yaşamamak için ufak bir ayar daha yapmamız lazım.

$ nano /etc/openvpn/server/server.conf

Alttaki kısmı eklemeniz yeterli olacaktır.

push "dhcp-option DOMAIN-ROUTE ."

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. 

Eğer Linux tabanlı bir işletim sistemi kullanıyorsanız, VPN'e bağlanırken gerekli olan bu client dosyasını bilgisayarınıza kaydetmek için alttaki komutu çalıştırın (~/Downloads klasörüne kayıt edecektir).

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

Eğer Windows kullanıyorsanız ve PuTTY ile bağlandıysanız VPN'e bağlanırken gerekli olan client dosyasının içeriğini görüntülemek için alttaki komutu çalıştırın. Ardından karşınıza çıkacak olan çıktının client kısmından en alta kadar olan kısmını kopyalayarak (sol mouse click ardından seçmeniz gerekli olan kısmı seçin), kopyalanan içeriği kendi bilgisayarınızda oluşturacağınız client.ovpn adlı bir dosyaya yapıştırabilirsiniz.

$ cat ~/client.ovpn

OpenVPN Kullanımı

Eğer Windows tabanlı bir işletim sistemi kullanıyorsanız, Windows için OpenVPN Client programını indirebilirsiniz. Programın oldukça basit bir arayüzü var, programı açtıktan sonra Import From File kısmına basıp, bir önceki aşamada oluşturduğunuz client.ovpn dosyasını seçmeniz gerekiyor.

Eğer Ubuntu'da VPN'i kullanacaksanız, VPN'i kullanabilmek için öncelikle kendi bilgisayarınızda OpenVPN client'ını yüklemeniz gerekiyor.

$ sudo apt install openvpn openvpn-systemd-resolved

Ve bu bilgisayardaki client dosyasına alttaki ayarları eklemeniz lazım.

script-security 2
up /etc/openvpn/update-systemd-resolved
down /etc/openvpn/update-systemd-resolved
down-pre

Eğer Ubuntu 18.04 ve üzeri bir işletim sistemi kullanıyorsanız bir ekstra ayar daha yapmanız lazım. OpenVPN Ubuntu DNS resolution diye aratırsanız birçok farklı sonuç ile karşılacaksınız. Açıkçası benim de bu hatanın çözümünü bulmam çok kolay olmadı. Sorunu anlatan ve çözümü sunan şu yazıyı okuyabilirsiniz; çözüm için alttaki komut yeterli olacak. DNS'i kontrol etmek içinse systemd-resolve --status komutundan faydalanabilirsiniz.

$ cd /etc/ && sudo rm resolv.conf && sudo ln -s /run/systemd/resolve/resolv.conf

VPN'i başlatmak için, 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'

Tüm bu işlemler sunucunda VPN düzgün çalışıyor olmalı ve tüm adımları eksiksiz takip ettiyseniz DNS hatası almamalısınız.

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.

$ apt install fail2ban
$ 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.

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

Dosyaya alttaki kısmı ekleyin ve fail2ban'ı 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.

Burak Özdemir

Burak Özdemir

Fethiye'de doğdum, Çanakkale Fen Lisesi ve İTÜ Bilgisayar Mühendisliği mezunuyum. Web geliştirme ile uğraşıyorum.