Debian 10 OpenVPN Server Konfigürasyonu ve Kurulumu

VPN NEDİR ? OPENVPN NEDİR ?


Sanal özel ağ (VPN), iki ağ ve bireysel kullanıcılar arasında internet bağlantınızı ve çevrimiçi gizliliğinizi koruyan güvenli ve şifreli bir bağlantıdır. OpenVPN, yönlendirilmiş konfigürasyonlarda noktadan noktaya güvenli bağlantı oluşturmak için kullanılan açık kaynaklı bir VPN protokolüdür.

Bu yazımızda Debian 10 üzerinde OpenVPN server kurulumu ve konfigürasyonu yapacağız.

1. Server Olarak Kullanacağımız Makineye Giriş Yapın ve Paketleri Güncelleyin


Başlamadan önce Debian OS paketlerimizin yüklü ve güncel olduğundan emin olun.

apt -y update apt -y upgrade

2. OpenVPN ve EasyRSA Yükleyin


Standart olarak OpenVPN Debian repolarında mevcuttur. Aşağıdaki komut ile yükleyebilirsiniz.

apt -y install openvpn

OpenVPN yüklendikten sonra sisteminize EasyRSA yüklemeniz gerekiyor.

EasyRSA, bir PKI CA'sı oluşturmak için bir komut satırı yardımcı programıdır. Birden çok türde sertifika oluşturmanıza olanak tanır. Bir kök sertifika yetkilisi oluşturmak, OpenVPN için sertifika istemek ve imzalamak için kullanılır.

Aşağıdaki komut ile Git reposu üzerinden indirebilirsiniz.

wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz

İndirme işlemi tamamlandıktan sonra tar yardımıyla arşivden dosyaları çıkartın.

tar -xvzf EasyRSA-3.0.8.tgz

Çıkarttığınız dizini OpenVPN dizinine kopyalayın.

cp -r EasyRSA-3.0.8 /etc/openvpn/easy-rsa

Bu adımdan itibaren EasyRSA server'ınıza yüklenmiş olacaktır.

3. Sertifika Yetkilisini Oluşturun

Şimdi sıra geldi OpenVPN için sertifika yetkilisi (CA) oluşturmaya. İlk olarak EasyRSA dizinine aşağıdaki komut ile girin.

cd /etc/openvpn/easy-rsa

Ardından bu dizin içinde bir vars dosyası oluşturmanız gerekecek. Vars dosyası, Easy-RSA'nın yapılandırma için kaynak sağlayacağı basit bir dosyadır.

Aşağıdaki komut ile oluşturun.

nano vars

İhtiyacınıza göre değiştirerek aşağıdaki satırları ekleyin.

                                                                                                                set                                                                                                          _var EASYRSA                                                                                                                           "$PWD"                                                                                                          
set _var EASYRSA_PKI "$EASYRSA/pki"
set _var EASYRSA_DN "cn_only"
set _var EASYRSA_REQ_COUNTRY "TURKEY"
set _var EASYRSA_REQ_PROVINCE "ISTANBUL"
set _var EASYRSA_REQ_CITY "ISTANBUL"
set _var EASYRSA_REQ_ORG "PC CERTIFICATE AUTHORITY"
set _var EASYRSA_REQ_EMAIL "admin@example.com"
set _var EASYRSA_REQ_OU "PC EASY CA"
set _var EASYRSA_KEY_SIZE 2048
set _var EASYRSA_ALGO rsa
set _var EASYRSA_CA_EXPIRE 7500
set _var EASYRSA_CERT_EXPIRE 365
set _var EASYRSA_NS_SUPPORT "no"
set _var EASYRSA_NS_COMMENT "PC CERTIFICATE AUTHORITY"
set _var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set _var EASYRSA_SSL_CONF "$EASYRSA/openssl-easyrsa.cnf"
set _var EASYRSA_DIGEST "sha256"


CTRL+X ile kaydedip çıkın.

Ardından aşağıdaki komutla ortak anahtar altyapısını başlatın.

./easyrsa init-pki

Aşağıdaki gibi bir çıktı alacaksınız:

      Note: using Easy-RSA configuration                                                                                                           from                                                                                                          :                                                                                                           /etc/                                                                                                          openvpn                                                                                                          /easy-rsa/                                                                                                          vars

init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/ openvpn /easy-rsa/ pki


Ardından ca.crt ve ca.key dosyası oluşturmak için build-ca komutunu çalıştırmanız gerekecek. Aşağıdaki komutla çalıştırabilirsiniz:

./easyrsa build-ca nopass

Aşağıdaki gibi bir çıktı alacaksınız ve bir kaç soru sorulacak:

      Note: using Easy                                                                                                          -RSA                                                                                                           configuration from: /etc/openvpn/easy                                                                                                          -rsa                                                                                                          /vars
Using SSL: openssl OpenSSL 1.1 .1 f 31 Mar 2020

Enter New CA Key Passphrase:
Re -Enter New CA Key Passphrase:
Generating RSA private key, 2048 bit long modulus ( 2 primes)
... +++++
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .+++++
e is 65537 ( 0x010001 )
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.' , the field will be left blank.
-----
Common Name (eg: your user, host, or server name) or server name " target=" _blank "> Easy -RSA CA 365 days" target= "_blank" > vpnserver

Write out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy -rsa /pki/issued/vpnserver.crt

5. Tüm Sertifika ve Anahtar Dosyalarını Kopyalayın

Tüm sertifika ve anahtar dosyasını /etc/openvpn/server/ dizinine kopyalamanız gerekecek. Aşağıdaki komutu kullanarak kopyalayabilirsiniz:

cp pki/ca.crt /etc/openvpn/server/ cp pki/dh.pem /etc/openvpn/server/ cp pki/private/vpnserver.key /etc/openvpn/server/ cp pki/issued/vpnserver.crt /etc/openvpn/server/

6. Client Sertifika ve Anahtar Dosyasını Oluşturun

Ardından istemci sistemi için bir sertifika ve anahtar dosyası oluşturmanız gerekecektir.

Aşağıdaki komut ile oluşturabilirsiniz:

./easyrsa gen-req vpnclient nopass

Aşağıdaki gibi bir çıktı almalısınız:

                        Note:                                                                                                                             using                                                                                                           Easy-RSA configuration                                                                                                           from                                                                                                          : /etc/openvpn/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1 . 1 f 31 Mar 2020
Generating a RSA private key
....+++++
.................................+++++
writing new private key to '/etc/openvpn/easy-rsa/pki/easy-rsa-1563.TeOf5v/tmp.i4YxLz'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Common Name (eg: your user, host, or server name) 365 days " target=" _blank "> vpnclient

Write
out database with 1 new entries
Data Base Updated

Certificate created at: /etc/openvpn/easy-rsa/pki/issued/vpnclient.crt

Ardından tüm client sertifika ve anahtar dosyalarını /etc/openvpn/client dizinine kopyalayın.

cp pki/ca.crt /etc/openvpn/client/ cp pki/issued/vpnclient.crt /etc/openvpn/client/ cp pki/private/vpnclient.key /etc/openvpn/client/

7. OpenVPN Server'ı Konfigüre Edin.

Bu noktada hem client hem de server sertifikası ve anahtarı hazır. Şimdi bir OpenVPN yapılandırma dosyası oluşturmamız ve tüm sertifikaları ve anahtarları tanımlamamız gerekiyor.

nano /etc/openvpn/server.conf

Aşağıdaki Satırları Ekleyin:

      port                                                                                                           1194                                                                                                          
proto udp
dev tun
ca /etc/ openvpn /server/ ca.crt
cert /etc/ openvpn /server/ vpnserver.crt
key /etc/ openvpn /server/ vpnserver.key
dh /etc/ openvpn /server/ dh.pem
server 10.8 . 0.0 255.255 . 255.0
push "redirect-gateway def1"

push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
duplicate-cn
cipher AES- 256 -CBC
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES- 256 -GCM-SHA384:TLS-DHE-RSA-WITH-AES- 256 -CBC-SHA256:TLS-DHE-RSA-WITH-AES- 128 -GCM-SHA256:TLS-DHE-RSA-WITH-AES- 128 -CBC-SHA256
auth SHA512
auth-nocache
keepalive 20 60
persist-key
persist-tun
compress lz4
daemon
user nobody
group nogroup
log- append /var/ log/openvpn.log
verb 3

Dosyayı kaydedip kapatın ve ardından OpenVPN server servisini başlatın.

systemctl start openvpn@server systemctl enable openvpn@server

Her şey yolunda gittiyse yeni bir arayüz oluşturulmuş olması gerekiyor. Aşağıdaki komut ile kontrol edebilirsiniz:

ip a show tun0

Aşağıdaki gibi bir çıktı alacaksınız:

                                                                                                                4                                                                                                          : tun                                                                                                          0                                                                                                          :  mtu                                                                                                           1500                                                                                                           qdisc fq_codel state UNKNOWN group default qlen                                                                                                           100                                                                                                          
link /none
inet 10.8.0.1 peer 10.8.0.2 / 32 scope global tun 0
valid_lft forever preferred_lft forever
inet6 fe 80 :: 153 d:f 29 : 39 a 2 : 571 a/ 64 scope link stable-privacy
valid_lft forever preferred_lft forever

8. IP Yönlendirmeyi Etkinleştirin

IP yönlendirme, işletim sisteminizin gelen ağ paketlerini kabul etmesini ve diğer ağa iletmesini sağlar. Aşağıdaki komutla etkinleştirin:

nano /etc/sysctl.conf

net.ipv4.ip_forward = 1

Dosyayı kaydedip kapatın ve değişiklikleri uygulamak için aşağıdaki komutu kullanın:

sysctl -p

9. OpenVPN Client Yükleyin ve Konfigüre Edin

Buraya kadar geldiyseniz artık farklı bir sisteme OpenVPN client kurulumu gerçekleştirip konfigüre etmeniz gerekmektedir.

İlk olarak aşağıdaki komut ile OpenVPN yükleyin:

apt -y install openvpn

Yüklendikten sonra tüm client sertiifka ve anahtar dosyalarını OpenVPN serverdan çekmemiz gerekiyor. Aşağıdaki komut ile alabilirsiniz:

scp -r root@vpn-server-ip:/etc/openvpn/client .

Ardından dizini client olarak değiştirin ve Client konfigürasyon dosyası oluşturun:

cd client nano client.ovpn

Aşağıdaki satırları ekleyin:

                                                                                                                client                                                                                                          
dev tun
proto udp
remote vpn-server-ip 1194
ca ca.crt
cert vpnclient.crt
key vpnclient.key
cipher AES- 256 -CBC
auth SHA 512
auth -nocache
tls -version-min 1 . 2
tls -cipher TLS-DHE-RSA-WITH-AES- 256 -GCM-SHA 384 :TLS-DHE-RSA-WITH-AES- 256 -CBC-SHA 256 :TLS-DHE-RSA-WITH-AES- 128 -GCM-SHA 256 :TLS-DHE-RSA-WITH-AES- 128 -CBC-SHA 256
resolv -retry infinite
compress lz 4
nobind
persist -key
persist -tun
mute -replay-warnings
verb 3

Kaydedip kapatın ve ardından konfigürasyon dosyanız ile OpenVPN server'ınıza bağlanın:

openvpn --config client.ovpn

Bağlantı sağlandığında aşağıdaki gibi bir çıktı alacaksınız:

      Sat Feb                                                                                                            6                                                                                                                                                                                                                     14                                                                                                          :                                                                                                          53                                                                                                          :                                                                                                          50                                                                                                                                                                                                                     2021                                                                                                           SENT CONTROL                                                                                                           1                                                                                                                                                                                              " target="                                                                                        _blank                                                                                        ">    vpnserver                                                                                                                                                                                     
Sat Feb
6 14 : 53 : 50 2021 PUSH : Received control message: 'PUSH_REPLY,redirect-gateway def1,dhcp-option DNS 208.67.222.222,dhcp-option DNS 208.67.220.220,route 10.8.0.1,topology net30,ping 20,ping-restart 60,ifconfig 10.8.0.6 10.8.0.5,peer-id 0,cipher AES-256-GCM'
Sat Feb
6 14 : 53 : 50 2021 OPTIONS IMPORT : timers and/or timeouts modified
Sat Feb
6 14 : 53 : 50 2021 OPTIONS IMPORT : --ifconfig/up options modified
Sat Feb
6 14 : 53 : 50 2021 OPTIONS IMPORT : route options modified

Aşağıdaki komut ile bağlantıyı doğrulayabilirsiniz:

ip a show tun0

Aşağıdaki gibi bir çıktı alacaksınız:

                                                                                                                4                                                                                                          : tun                                                                                                          0                                                                                                          :  mtu                                                                                                           1500                                                                                                           qdisc pfifo_fast state UNKNOWN group default qlen                                                                                                           100                                                                                                          
link /none
inet 10.8.0.6 peer 10.8.0.5 / 32 scope global tun 0
valid_lft forever preferred_lft forever
inet6 fe 80 :: 9206 : 94 d 7 : 8 fb 2 : 6 b 21 / 64 scope link stable-privacy
valid_lft forever preferred_lft forever

Yukarıdaki çıktıyı alıyorsanız bağlantı tamamlanmış ve sorun yok anlamına gelmektedir.