[Nasıl] 16.04 üzerinde OpenVPN kurulumu ve temel yapılandırma

Başlatan FireSwords, 03 Mayıs 2017 - 12:49:07

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

FireSwords

Giriş

İnternet yasaklarından bıktınız mı? Düzgün çalışan VPN bulmaya çalışmaktan, para verdiğiniz VPN servisinin engellenmesinden bıktınız mı? İnternette kendinizi güvenli hissetmiyor musunuz?

O zaman mükemmel bir çözüm var, kendi VPN hizmetimizi yapmak! Hem de ayda sadece 5 dolara!


Gerekenler:

- Orta düzey Linux bilgisi
- Ubuntu 16.04 yüklü bir Linux sunucu
- Ve biraz sabır

Sunucu konusunda size tavsiye edeceğim şirket Linode. Sadece aylık 5 dolara 1 GB RAM, 1 CPU, 20 GB SSD ve 1 TB aylık aktarım veri aktarım hakkı alabiliyorsunuz. Ayrıca performans olarak piyasadaki en iyisi.


Bölüm 1: Temel Linux sistem yapılandırması

İlk olarak sunucumuza ssh ile bağlanalım. Windows kullanıcılarının PuTTY kurması gerekiyor. Mac kullanıcılarının ekstra bir işlem yapması gerekmiyor. macOS'te OpenSSH yüklü geliyor. Linux tarafında ise kullandığınız dağıtıma bağlı. Paket yöneticinizden openssh pakedini(paket adı dağıtımdan dağıtıma değişiklik gösterebilir) kurmanız gerekebilir.

Mac ve Linux'ta root kullanıcısı olarak sunucumuza bağlanırken kullanacağımız komut şudur:

ssh root@sunucu_ip_adresi

Çıkan uyarıyı yes diyerek geçin ve root şifrenizi girin. Eğer sorun yoksa şöyle bir ekran gelmiş olmalı.

Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.9.15-x86_64-linode81 x86_64)

* Documentation:  https://help.ubuntu.com
* Management:     https://landscape.canonical.com
* Support:        https://ubuntu.com/advantage
Last login: Mon May  1 07:08:56 2017 from xx.x.xx.xxx
root@localhost:~#


Tebrikler! Şu anda sizden kilometrelerce uzaktaki Linux yüklü bir makinenin konsoluna bağlanmış durumdasınız!

İlk iş olarak kullanıcı oluşturacağız. Birazcık Linux bilginiz varsa, root kullanıcısını kullanmanın tehlikeli olduğunu biliyorsunuzdur.

Kullanıcı oluşturmak için aşağıdaki komutu kullanıyoruz. Siz istediğiniz ismi koyabilirsiniz, ben forumdaki kullanıcı adımı kullanmak istedim.
adduser fireswords

Kullanıcı oluşturduktan ve şifre belirledikten sonra root izinlerini verelim. Bunun için kullanıcımızı sudo grubuna eklememiz gerekiyor.

usermod -aG sudo fireswords

Root kullanıcısından çıkış yapıp oluşturduğumuz kullanıcıya geliş yapalım.

exit

komutu ile SSH'den çıkış yapıyoruz. Aşağıdaki komut ile istediğimiz kullanıcı ile giriş yapıyoruz.
ssh kullanici_adiniz@sunucu_ip_adresi


Giriş yaptıysanız güvenlik duvarını ayarlamaya başlayabiliriz. İlk olarak OpenSSH'yi izin verilen uygulamalara ekleyelim ki SSH bağlantısı engellenmesin.
sudo ufw allow OpenSSH

Güvenlik duvarını etkinleştirelim.
sudo uwf enable

Tebrikler. Linux yapılandırması bu kadardır. OpenVPN kurulumuna geçebiliriz.

Bölüm 2: OpenVPN Kurulumu

İlk olarak paket veritabanını güncelleyelim.
sudo apt-get update

Gerekli paketleri kuralım.
sudo apt-get install openvpn easy-rsa

Kısacık OpenVPN kurulumu bu kadar. Ancak daha çok işimiz var. Sertifika ayarlamalarını yapmamız gerekiyor.

Bölüm 3: Sertifika Ayarlamaları

OpenVPN bağlantıları TLS/SSL kullanarak şifrelenir. TLS/SSL kullanabilmek için sertifikaya ihtiyacımız var. Bunun için kendi sertifika otoritemizi(CA) oluşturup sertifika yayınlayabilmemiz gerekiyor. Kulağa çok karışık bir şey gibi geliyor, ama inanın çok basit.  :D

İlk olarak easy-rsa şablon klasörünü ev dizinimize kopyalayalım.

make-cadir ~/openvpn-ca

Klasöre girelim.
cd ~/openvpn-ca

CA'mızın kullaacağı değerleri belirlemek için vars dosyasını düzenleyelim.

nano vars

Dosyanın alt kısımlarında aşağıdaki değerlerin olduğu bir kısım olacak.

export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"


Bu değerleri istediğiniz gibi düzenleyin, ama boş bırakmayın.

export KEY_COUNTRY="TR"
export KEY_PROVINCE="TR"
export KEY_CITY="Herhangibirşehiradı"
export KEY_ORG="Ubuntu-TR"
export KEY_EMAIL="epostaadresi@sallayin.bitane"
export KEY_OU="Rastgelebirşeyyazın"


Düzenlediğimiz değişkenlerin hemen altında KEY_NAME değeri olacak. Bu rehberde bu değeri "server" olarak ayarlayacağız.

export KEY_NAME="server"

F3 ile kaydedin. F2 ile çıkın

Artık sertifika otoritemizi inşa edebiliriz.

Aşağıdaki komut ile ayarladığımız değişkenleri yükleyelim.
source vars

Aşağıdaki çıktıyı almanz gerekiyor.
NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/sammy/openvpn-ca/keys


Temizlik yapalım.
./clean-all

Ve CA'mızı inşa edelim. Sorulan tüm soruları enter tuşu ile geçin.
./build-ca

CA'mızı inşa ettiğimize göre sunucu sertifikası oluşturabiliriz. İlk olarak şu komutu girelim. Şifre isterse boş bırakın. Sorulan soruları y ile onaylayın. :
./build-key-server server

Ekstra güvenlik için Diffie-Hellman anahtarlarını oluşturalım. Birkaç dakika sürebilir.

./build-dh

Ve son olarak aşağıdaki komutu girelim.
openvpn --genkey --secret keys/ta.key

Tebrikler! Sunucu sertifikası tamamlandı. Şimdi VPN'ye bağlanacak cihazlar için sertifika oluşturalım. Şifre isterse boş bırakalım..

./build-key cihaz1

Tebrikler! Artık OpenVPN yapılandırmasına geçebiliriz!

Bölüm 4: OpenVPN yapılandırması

İlk olarak oluşturduğumuz dosyaların olduğu klasöre girelim.

cd ~/openvpn-ca/keys

Bu dosyaları /etc/openvpn dizinine kopyalayalımç

sudo cp ca.crt ca.key server.crt server.key ta.key dh2048.pem /etc/openvpn

Örnek bir OpenVPN yapılandırma dizini oluşturalım:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf

Yapılandırma dosyamızı açalım.

sudo nano /etc/openvpn/server.conf

Satırı bulalım ve başındaki ; işaretini silelim:
tls-auth ta.key 0

Değiştirdiğimiz satırın sonuna şu satırı ekleyelim:

key-direction 0

Satırı bulalım ve başındaki ; işaretini silelim:
cipher AES-128-CBC

Değiştirdiğimiz satırın sonuna şu satırı ekleyelim:

auth SHA256

Aşağıdaki satırları bulalım ve yine başlarındaki ; işaretini silelim:
user nobody
group nogroup


VPN'imizin kullanacağı DNS sunucularını belirleyelim.

Satırı bulalım ve başındaki ; işaretini silelim.
push "redirect-gateway def1 bypass-dhcp"

Satırın biraz altında aşağıdaki satırlar olacak. Onların başındaki ; işaretini de kaldıralım.
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"


Son olarak aşğıdaki satırı bulun ve başındaki ; işaretini kaldırın. Bu işlem sayesinde aynı sertifika ile aynı anda birden fazla istemciden VPN'e bağlanabilirsiniz:

duplicate-cn

F3 ile kaydedin. F2 ile çıkın.

Tebrikler. OpenVPN yapılandırması bu kadar. Sunucuyu OpenVPN için yapılandırmaya geçebiliriz.


Bölüm 5: Sunucu Yapılandırması

İlk olarak sunucmuza trafiği yönlendirebilmesi için izin vermeliyiz. VPN'in çalışması için bu izni vermemiz hayati önem taşıyor.

sudo nano /etc/sysctl.conf


Aşağıdaki satırın başındaki # işaretini silin.

net.ipv4.ip_forward=1


F3 ile kaydedin. F2 ile çıkın.

Yeni ayarların yürürlüğe girmesi için aşağıdaki komutu girelim:
sudo sysctl -p


Ardından güvenlik duvarını yapılandıralım. İlk olarak aşağıdaki komut ile ağ arayüzünü öğrenelim.
ip route | grep default


Çıktıda dev kelimesinin yanındaki ifade sunucumuzun kullandığı ağ arayüzü. Diyelim ki çıktı böyle:

default via xxx.yyy.zzz.1 dev eth0 onlink

Burada eth0 kullanılan ağ arayüzü oluyor.

Güvenlik duvarımızın kural dosyasını açalım:

sudo nano /etc/ufw/before.rules

Aşağıdaki satırları dosyamızın başına ekleyelim:

# OPENVPN KURALLARI
# NAT tablo kuralları
*nat
:POSTROUTING ACCEPT [0:0]
# Eğer sunucunuzun kullandığı ağ arayüzü eth0'dan farklı bir değerse eth0'ı onunla değiştirin!
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# OPENVPN KURALLARININ SONU



F3 ile kaydedin. F2 ile çıkın.

sudo nano /etc/default/ufw

Bulun:
DEFAULT_FORWARD_POLICY="DROP"
Değiştirin
DEFAULT_FORWARD_POLICY="ACCEPT"


F3 ile kaydedin. F2 ile çıkın.

Güvenlik duvarının OpenVPN portlarına izin vermesini sağlayalım:
sudo ufw allow 1194/udp
sudo ufw allow OpenSSH


Güvenlik duvarını yeniden başlatalım:
sudo ufw disable
sudo ufw enable


Güvenlik duvarını ayarladığımıza ve sunucu yapılandırmasını tamamladığımıza göre OpenVPN'yi başlatabiliriz.

OpenVPN'yi başlatalım.
sudo systemctl start openvpn@server


OpenVPN'nin kullandığı tun0 arayüzünün aktif olup olmadığını kontrol edelim:

ip addr show tun0

Eğer aşağıdaki gibi bir çıktı alabiliyorsanız OpenVPN sorunsuz bir şekilde çalışıyor demektir.

4: tun0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN group default qlen 100
    link/none
    inet 10.8.0.1 peer 10.8.0.2/32 scope global tun0
       valid_lft forever preferred_lft forever


Her şey yolunda gittiyse OpenVPN kurulumu tamamlanmış demektir.

Aşağıdaki komut ile her açılışta OpenVPN'nin aktif hale gelmesini sağlayalım:

sudo systemctl enable openvpn@server

Şu anda OpenVPN aktif ve çalışıyor. Kullandığımız cihazlar için birkaç ayarlama yapmamız gerekiyor.

Bölüm 6: İstemci Yapılandırması

İlk olarak istemci konfigürasyon dosyalarının saklanacağı bir klasör yapısı oluşturmamız gerek.

mkdir -p ~/client-configs/files


Güvenlik için izinleri sınırlandıralım:
chmod 700 ~/client-configs/files


Örnek yapılandırma dosyasını kopyalayalım.
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf


Yapılandırma dosyamızı açalım:

nano ~/client-configs/base.conf


remote ayarını bulalım. Aşağıdaki şekilde değiştirelim:
# The hostname/IP and port of the server.
# You can have multiple remote entries
# to load balance between the servers.
remote sunucu_ip_adresi 1194


Aşağıdaki satırları bulalım ve başlarındaki ; işaretini silelim:
user nobody
group nogroup


Şu satırları bulalım ve ca, cert ve key değerlerinin başına diyez(#) işareti ekleyelim:

# SSL/TLS parms.
# See the server config file for more
# description.  It's best to use
# a separate .crt/.key file pair
# for each client.  A single ca
# file can be used for all clients.
#ca ca.crt
#cert client.crt
#key client.key


Dosyanın sonuna şu satırları ekleyelim
cipher AES-128-CBC
auth SHA256
key-direction 1



F3 ile kaydedelim, F2 ile çıkalım.

Sunuu yapılndırması hazırlamak için ufak bir betik hazırlamamız gerek. Şu dizinde bir dosya oluşturalım:
nano ~/client-configs/make_config.sh

Ve içeriğine şunu yapıştıralım:
#!/bin/bash

# First argument: Client identifier

KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf

cat ${BASE_CONFIG} \
    <(echo -e '<ca>') \
    ${KEY_DIR}/ca.crt \
    <(echo -e '</ca>\n<cert>') \
    ${KEY_DIR}/${1}.crt \
    <(echo -e '</cert>\n<key>') \
    ${KEY_DIR}/${1}.key \
    <(echo -e '</key>\n<tls-auth>') \
    ${KEY_DIR}/ta.key \
    <(echo -e '</tls-auth>') \
    > ${OUTPUT_DIR}/${1}.ovpn


Çalıştırılabilir hale getirelim:
chmod 700 ~/client-configs/make_config.sh

Betiği çalıştıralım:

cd ~/client-configs
./make_config.sh cihaz1


Eğer her şey yolunda gittiyse ~/client-configs/files dizininde cihaz1.ovpn diye bir dosya oluşması gerek. Teyit edelim:
ls ~/client-configs/files


Ve bu dosyayı SFTP(SSH üzerinden FTP) kendimize aktaralım. Windows kullanıcıları FileZilla kullanabilir. Mac ve Linux kullanıcıları aşağıdaki komut ile dosyayı indirebilir.

sftp kullanici_adiniz@sunucu_ip_adresi:client-configs/files/cihaz1.ovpn ~/

Bu komut cihaz1.ovpn dosyasını ev dizininize indirmenizi sağlayacaktır.

Bölüm 7: İstemci Yapılandırmasını Kurmak

Linux

Paket yöneticinizden OpenVPN paketini kurun. Ve aşağıdaki komutu çalıştırın:

ls /etc/openvpn

Eğer şu isimde bir dosya varsa bazı düzenlemeler yapmamız gerekecek:

update-resolve-conf


Yapılandırma dosyamızı açalım
nano ~/cihaz1.ovpn

Dosyanın sonuna şu satırları ekleyin:

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

UYARI: EĞER update-resolve-conf DOSYASI YOKSA KESİNLİKLE BU İŞLEMLERİ YAPMAIYN, DİREKT KONFİGÜRASYON DOSYASINI ÇALIŞTIRIN.

Son olarak aşağıdaki komut ile VPN sunucunuza bağlanıyoruz:

sudo openvpn --config ~/cihaz1.ovpn

macOS
Tunnelblick isimli yazılımı indirin. cihaz1.ovpn dosyasını içe aktarın. Ve bağlanın.

Windows

Aşağıdaki linkten OpenVPN'yi kurun:

https://openvpn.net/index.php/open-source/downloads.html

cihaz1.openvpn dosyasını aşağıdaki dizine atın:

C:\Program Files\OpenVPN\config


Bu kadar.

Android

OpenVPN for Android uygulamasını indirin:

https://play.google.com/store/apps/details?id=de.blinkt.openvpn

cihaz1.ovpn dosyasını cihazınıza atın. İndirdiğiniz uygulamada başlıkta artı işaretinin yanında bir buton olacak. Ona basın ve ovpn dosyanızı içe aktarın ve bağlanın.



Kısacık OpenVPN kurulumumuz bu kadar.  :D

cmlykl

Herşeyi tıpatıp aynı şekilde yaptım ancak bağlanırken aşağıdkai koddaki gibi bir sorunla karşılaşıyorum. İnternetten araştırdım. 1194 portu yerine 443 kullanmam gerektiği gördüm. Onu da denedim ancak ondada olmadı. Sanırım linux bilgimin az olması sebebiyle bir yerde hata yapıyorum.

Sun Jun 04 01:01:03 2017 OpenVPN 2.3.16 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on May 19 2017
Sun Jun 04 01:01:03 2017 Windows version 6.2 (Windows 8 or greater) 64bit
Sun Jun 04 01:01:03 2017 library versions: OpenSSL 1.0.2k  26 Jan 2017, LZO 2.10
Enter Management Password:
Sun Jun 04 01:01:03 2017 MANAGEMENT: TCP Socket listening on [AF_INET]127.0.0.1:25341
Sun Jun 04 01:01:03 2017 Need hold release from management interface, waiting...
Sun Jun 04 01:01:03 2017 MANAGEMENT: Client connected from [AF_INET]127.0.0.1:25341
Sun Jun 04 01:01:03 2017 MANAGEMENT: CMD 'state on'
Sun Jun 04 01:01:03 2017 MANAGEMENT: CMD 'log all on'
Sun Jun 04 01:01:03 2017 MANAGEMENT: CMD 'hold off'
Sun Jun 04 01:01:03 2017 MANAGEMENT: CMD 'hold release'
Sun Jun 04 01:01:03 2017 MANAGEMENT: CMD 'proxy NONE  '
Sun Jun 04 01:01:04 2017 Control Channel Authentication: tls-auth using INLINE static key file
Sun Jun 04 01:01:04 2017 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Sun Jun 04 01:01:04 2017 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Sun Jun 04 01:01:04 2017 Socket Buffers: R=[65536->65536] S=[65536->65536]
Sun Jun 04 01:01:04 2017 UDPv4 link local: [undef]
Sun Jun 04 01:01:04 2017 UDPv4 link remote: [AF_INET]X.X.X.X:1194
Sun Jun 04 01:01:04 2017 MANAGEMENT: >STATE:1496527264,WAIT,,,
Sun Jun 04 01:02:00 2017 MANAGEMENT: CMD 'signal SIGHUP'
Sun Jun 04 01:02:00 2017 SIGHUP[hard,] received, process restarting
Sun Jun 04 01:02:00 2017 MANAGEMENT: >STATE:1496527320,RECONNECTING,SIGHUP,,
Sun Jun 04 01:02:00 2017 OpenVPN 2.3.16 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [PKCS11] [IPv6] built on May 19 2017
Sun Jun 04 01:02:00 2017 Windows version 6.2 (Windows 8 or greater) 64bit
Sun Jun 04 01:02:00 2017 library versions: OpenSSL 1.0.2k  26 Jan 2017, LZO 2.10
Sun Jun 04 01:02:00 2017 Restart pause, 2 second(s)
Sun Jun 04 01:02:02 2017 MANAGEMENT: CMD 'proxy NONE  '
Sun Jun 04 01:02:03 2017 Control Channel Authentication: tls-auth using INLINE static key file
Sun Jun 04 01:02:03 2017 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Sun Jun 04 01:02:03 2017 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Sun Jun 04 01:02:03 2017 Socket Buffers: R=[65536->65536] S=[65536->65536]
Sun Jun 04 01:02:03 2017 UDPv4 link local: [undef]
Sun Jun 04 01:02:03 2017 UDPv4 link remote: [AF_INET]X.X.X.X:1194
Sun Jun 04 01:02:03 2017 MANAGEMENT: >STATE:1496527323,WAIT,,,
Sun Jun 04 01:03:03 2017 TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity)
Sun Jun 04 01:03:03 2017 TLS Error: TLS handshake failed
Sun Jun 04 01:03:03 2017 SIGUSR1[soft,tls-error] received, process restarting
Sun Jun 04 01:03:03 2017 MANAGEMENT: >STATE:1496527383,RECONNECTING,tls-error,,
Sun Jun 04 01:03:03 2017 Restart pause, 2 second(s)
Sun Jun 04 01:03:05 2017 MANAGEMENT: CMD 'proxy NONE  '
Sun Jun 04 01:03:06 2017 Socket Buffers: R=[65536->65536] S=[65536->65536]
Sun Jun 04 01:03:06 2017 UDPv4 link local: [undef]
Sun Jun 04 01:03:06 2017 UDPv4 link remote: [AF_INET]X.X.X.X:1194
Sun Jun 04 01:03:06 2017 MANAGEMENT: >STATE:1496527386,WAIT,,,
Sun Jun 04 01:03:37 2017 SIGTERM[hard,] received, process exiting
Sun Jun 04 01:03:37 2017 MANAGEMENT: >STATE:1496527417,EXITING,SIGTERM,,

pugilista

çok güzel bir paylaşım yapmışsınız elinize sağlık ancak bir problem yaşıyorum " sudo systemctl start openvpn@server " dan sonra başlatmıyo servisi
Alıntı YapJob for openvpn@server.service failed because the control process exited with error code. See "systemctl status openvpn@server.service" and "journalctl -xe" for details.

bu hatayı alıyorum sebebi ne olabilir ?

edit: key direction da bir yazım hatası yapmışım ondan kaynaklanmış. Daha sonrasında dediklerinizi adım adım uyguladım bağlanmada sorun yaşıyorum bende yardımcı olabilir misiniz?