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.
İ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.1f 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) [Easy-RSA CA]:vpnserver
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/etc/openvpn/easy-rsa/pki/ca.crt
```
4-) Server Sertifika ve Key Dosyalarını Oluşturun
Şimdi sunucu anahtarını oluşturmak için gen-req komutunu ve ardından ortak adı kullanmanız gerekecek.
> ./easyrsa gen-req vpnserver nopass
Aşağıdaki gibi bir çıktı alacaksınız:
```
Note: using Easy-RSA configuration from: /etc/openvpn/easy-rsa/vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
Generating a RSA private key
.......................................................+++++
....+++++
writing new private key to '/etc/openvpn/easy-rsa/pki/easy-rsa-1428.Angtmh/tmp.C9prw4'
-----
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) [vpnserver]:
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/pki/reqs/vpnserver.req
key: /etc/openvpn/easy-rsa/pki/private/vpnserver.key
```
Ardından CA sertifikanızı kullanarak vpnserver anahtarını imzalamanız gerekecek. Aşağıdaki komutla yapabilirsiniz:
> ./easyrsa sign-req server vpnserver
Aşağıdaki gibi bir çıktı alacaksınız:
```
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'vpnserver'
Certificate is to be certified until Feb 6 14:38:52 2022 GMT (365 days)
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.1f 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) [vpnclient]:
Keypair and certificate request completed. Your files are:
req: /etc/openvpn/easy-rsa/pki/reqs/vpnclient.req
key: /etc/openvpn/easy-rsa/pki/private/vpnclient.key
```
Client anahtarını girin:
> ./easyrsa sign-req client vpnclient
Aşağıdaki gibi bir çıktı alacaksınız:
```
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'vpnclient'
Certificate is to be certified until Feb 6 14:43:18 2022 GMT (365 days)
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: tun0: 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 tun0
valid_lft forever preferred_lft forever
inet6 fe80::153d:f29:39a2:571a/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 SHA512
auth-nocache
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
resolv-retry infinite
compress lz4
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 [vpnserver]: 'PUSH_REQUEST' (status=1)
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: tun0: 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 tun0
valid_lft forever preferred_lft forever
inet6 fe80::9206:94d7:8fb2:6b21/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.
Bu kılavuz ile Debian 10 üzerinde OpenVPN sunucusu kurulumunu başarıyla gerçekleştirebilirsiniz. İyi çalışmalar!
Comments