Какво е OpenVPN и как да го инсталирате на Ubuntu 18.04/20.04

01.09.2020 80 0

OpenVPN е софтуер с отворен код, отговорен за обработката на комуникации между клиент и сървър, които прилагат техники за виртуална частна мрежа за създаване на защитени връзки от точка до точка или от сайт към сайт. Той борави с криптиране и удостоверяване, осъществяващи се на слой 2 или слой 3 от OSI модела, като използва стандартното за индустрията SSL / TLS за криптиране. „Пакетирането“ се извършва със стандартизирани UDP или опционални TCP пакети.

Трите основни цели на VPN сигурността:

  • Поверителност
  • Надеждност
  • Наличност

OpenVPN обработва криптирането и удостоверяването с помощта на картографския протокол TLS (Transport Layer Security) / SSL (Secure Sockets Layer). TLS е изграден върху по-ранните SSL спецификации, разработени от Netscape. Протоколът TLS цели основно да осигури поверителност и цялост на данните. SSL / TLS използва една от най-добрите технологии за криптиране, наречена асиметрично криптиране, за да гарантира идентичността на VPN партньора. Всеки от двамата партньори притежава два ключа – един публичен и един частен.

OpenVPN използва драйвера TUN / TAP, който е и проект с отворен код, включен във всички съвременни дистрибуции на Linux / Unix, както и в Windows, Solaris и Mac OS X. Устройството TUN може да се използва като виртуална точка, точков интерфейс, а TAP устройството може да се използва като виртуален Ethernet адаптер.

Предимствата на OpenVPN

Някои от предимствата на използването на OpenVPN са:

  • Сигурност: използва 256-битови кодиращи ключове и висок клас шифри
  • Осигурява повече контрол върху връзките, тъй като използва TCP и UDP
  • OpenVPN работи на голям брой платформи Windows, MacOS, iOS, Android, Linux и други
  • Лесен е за настройка и употреба
  • Има активна общност
  • Може да се направи IPsec тунел през OpenVPN

Предварителни изисквания, за да може да следвате примера за инсталацията

Ще ви трябва VPS или виртуална машина с Ubuntu 18.04 / 20.04 за VPN сървъра и един компютър за клиента.

Преди да започнете да инсталирате пакети на вашия Ubuntu сървър, винаги препоръчваме да се уверите, че всички системни пакети са актуализирани:

root@test:~# apt update
root@test:~# apt upgrade

Превключете директорията (ако не сте там):

root@test:~# cd ~

Следващата стъпка е да инсталирате Easy RSA

root@test:/etc/openvpn/server# cd && wget https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.5/EasyRSA-nix-3.0.5.tgz

Когато изтеглянето завърши, извлечете архива

root@test:~# tar xzf EasyRSA-nix-3.0.5.tgz

Превключете директорията и копирайте файла

root@test:~# cd ~/EasyRSA-3.0.5/
root@test:~/EasyRSA-3.0.5# cp vars.example vars

Разкоментирайте и актуализирайте следните записи, за да съответстват на вашата информация:

root@test:~/EasyRSA-3.0.5# nano ~/EasyRSA-3.0.5/vars
set_var EASYRSA_REQ_COUNTRY "US"
set_var EASYRSA_REQ_PROVINCE "California"
set_var EASYRSA_REQ_CITY "San Francisco"
set_var EASYRSA_REQ_ORG "Copyleft Certificate Co"
set_var EASYRSA_REQ_EMAIL "me@example.net"
set_var EASYRSA_REQ_OU "My Organizational Unit"

Ctrl+o ; Ctrl + x # За да запазите и излезете от редактора

Първо, трябва да инициализираме нов PKI:

root@test:~/EasyRSA-3.0.5# ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
Using SSL: openssl OpenSSL 1.1.1f 31 Mar 2020
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /root/EasyRSA-3.0.5/pki

Сега можем да създадем сертификата за CA:

root@test:~/EasyRSA-3.0.5# ./easyrsa build-ca

Ще бъдете помолени да въведете парола и име (т.н. потребител, клиент, сървър):

Note: using Easy-RSA configuration from: ./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)
...............+++++
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:test
Your new CA certificate file for publishing is at:
/root/EasyRSA-3.0.5/pki/ca.crt

Сега инсталирате OpenVPN

root@test:~/EasyRSA-3.0.5# apt update
root@test:~/EasyRSA-3.0.5# apt install openvpn

Генериране на ключ Diffie-Hellman (размяната на ключове Diffie-Hellman беше едно от най-важните разработки в криптографията с публичен ключ). Ще отнеме известно време, за да се инсталира и копира в директорията openvpn:

root@test:~/EasyRSA-3.0.5# ./easyrsa gen-dh
root@test:~/EasyRSA-3.0.5# cp ~/EasyRSA-3.0.5/pki/dh.pem /etc/openvpn/

Генериране на HMAC (Hash-базиран код за удостоверяване на съобщението (HMAC) е механизъм за изчисляване на код за удостоверяване на съобщение, включващ хеш функция в комбинация със секретен ключ.):

root@test:~/EasyRSA-3.0.5# openvpn --genkey --secret ta.key
root@test:~/EasyRSA-3.0.5# cp ~/EasyRSA-3.0.5/ta.key /etc/openvpn/

Сега трябва да създадем сертификат за сървър и частен ключ (ще трябва да въведете парола)

root@test:~/EasyRSA-3.0.5# ./easyrsa gen-req test-server nopass
root@test:~/EasyRSA-3.0.5# cp ~/EasyRSA-3.0.5/pki/private/test-server.key /etc/openvpn/
root@test:~/EasyRSA-3.0.5# ./easyrsa sign-req server test-server
root@test:~/EasyRSA-3.0.5# cp ~/EasyRSA-3.0.5/pki/private/test-server.crt /etc/openvpn/

Сменете директорията и копирайте файловете crt и ca:

cd issued/
cp test-server.crt /etc/openvpn/
cd ..
cp ca.crt /etc/openvpn/

Копирайте примерния конфигурационен файл:

sh -c "gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/server1.conf"

Отворете файла с nano редактора:

nano /etc/openvpn/server1.conf

Разкоментирайте и заменете с правилните данни за вашия сървър по-долу редовете:

cert server1.crt # коригирайте името на crt файлът
key server1.key # коригирайте името на key файлът
dh dh.pem
push "redirect-gateway def1 bypass-dhcp" (разкоментирайте - махнете ;)
push "dhcp-option DNS 208.67.222.222" (разкоментирайте - махнете ;)
push "dhcp-option DNS 208.67.220.220" (разкоментирайте - махнете ;)
user nobody (remove the ;)
group nogroup (remove the ;)

Добавете в долната част на файла (това ще промени алгоритъма за удостоверяване (HMAC) от SHA1 на SHA256)

auth SHA256

Сега трябва да активиратe, старирате и проверите статуса на OpenVPN

root@test:~/EasyRSA-3.0.5# systemctl enable openvpn
root@test:~/EasyRSA-3.0.5# systemctl start openvpn
root@test:~/EasyRSA-3.0.5# systemctl status openvpn
â— openvpn.service - OpenVPN service
Loaded: loaded (/lib/systemd/system/openvpn.service; enabled; vendor preset: enabled)
Active: active (exited) since Thu 2020-08-06 17:15:34 EEST; 7s ago
Process: 48692 ExecStart=/bin/true (code=exited, status=0/SUCCESS)
Main PID: 48692 (code=exited, status=0/SUCCESS)
Aug 06 17:15:34 test systemd[1]: Starting OpenVPN service...
Aug 06 17:15:34 test systemd[1]: Finished OpenVPN service.

Сега трябва да променим маршрута и да отворим портовете на защитната стена.

Можете да видите текущата конфигурация с:

# ip a show tun0

Трябва да редактирате файла sysctl.conf

root@test:~# nano /etc/sysctl.conf

Разкоментирайте реда по-долу, запазете файла и излезете от него. След това приложите промените.

net.ipv4.ip_forward=1

root@test:~# sysctl -p

Проверете интерфейса:

root@test:~# ip -o -4 route show to default | awk '{print $5}'
eth0

Редактирайте този файл, като промените правилата по подразбиране на „ACCEPT“ – запазете файла и излезте

root@test:~# nano /etc/default/ufw

DEFAULT_FORWARD_POLICY="ACCEPT"

Редактирайте файла before.rules:

root@test:~# nano /etc/ufw/before.rules

Добавете в долната част на файла:

# NAT правила
*nat
:POSTROUTING ACCEPT [0:0]

# Пренасочване на трафика през eth0 (в моя случай интерфейсът е eth0, трябва да го замените с вашия)
-A POSTROUTING -s 10.8.0.0/16 -o eth0 -j MASQUERADE

# не изтривайте реда „COMMIT“ или тези правила няма да бъдат обработвани
COMMIT

Сега трябва да отворим порта за VPN и да разрешим OpenSSH:

root@test:~# ufw allow 1194/udp
root@test:~# ufw allow OpenSSH
root@test:~# ufw disable
root@test:~# ufw enable
root@test:~# iptables -nvL POSTROUTING -t nat
Chain POSTROUTING (policy ACCEPT 9 packets, 670 bytes)
pkts bytes target prot opt in out source destination
1190 135K MASQUERADE all -- * eth0 10.8.0.0/16 0.0.0.0/0

Създайте OpenVPN директория за клиентските файлове

Създайте директориите:

root@test:~# mkdir -p ~/openvpn-clients/{configs,base,files}

Копирайте файловете ta.key и ca.crt:

root@test:~# cp ~/EasyRSA-3.0.5/ta.key ~/openvpn-clients/base/
root@test:~# cp /etc/openvpn/ca.crt ~/openvpn-clients/base/

Копирайте примерната конфигурацията на клиента в основната директория и я редактирайте:

root@test:~# cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/openvpn-clients/base/
root@test:~# nano ~/openvpn-clients/base/client.conf

Заменете YOUR_SERVER_IP с IP адреса на сървъра ви

remote YOUR_SERVER_IP 1194

Коментирайте по-долу редовете:

ca ca.crt
cert client.crt
key client.key

Добавете в края на файла:

auth SHA256

Запазете файла и излезте.

Създаване на първия клиентски сертификат

Отидете в EasyRSA директорията и генерирайте Key файл с името на клиента:

root@test:~# cd ~/EasyRSA-3.0.5/
root@test:~/EasyRSA-3.0.5# ./easyrsa gen-req client1 nopass
root@test:~/EasyRSA-3.0.5# cp ~/EasyRSA-3.0.5/pki/private/client1.key ~/openvpn-clients/files/

Генерирайте crt сертификат:

root@test:~/EasyRSA-3.0.5# ./easyrsa sign-req client client1
root@test:~/EasyRSA-3.0.5# cp ~/EasyRSA-3.0.5/pki/issued/client1.crt ~/openvpn-clients/files/

Mожете да създадете потребителски ovpn файл със скрипт.

Отидете в директорията /root/openvpn-clients/ и направете файл с текстовият редактор:

# cd /root/openvpn-clients/
# nano ~/openvpn-clients/gen_config.sh

Поставете редовете по-долу във файла:

#!/bin/bash
FILES_DIR=$HOME/openvpn-clients/files
BASE_DIR=$HOME/openvpn-clients/base
CONFIGS_DIR=$HOME/openvpn-clients/configs

BASE_CONF=${BASE_DIR}/client.conf
CA_FILE=${BASE_DIR}/ca.crt
TA_FILE=${BASE_DIR}/ta.key

CLIENT_CERT=${FILES_DIR}/${1}.crt
CLIENT_KEY=${FILES_DIR}/${1}.key

# Test for files
for i in "$BASE_CONF" "$CA_FILE" "$TA_FILE" "$CLIENT_CERT" "$CLIENT_KEY"; do
if [[ ! -f $i ]]; then
echo " The file $i does not exist"
exit 1
fi
if [[ ! -r $i ]]; then
echo " The file $i is not readable."
exit 1
fi
done

# Generate client config
cat > ${CONFIGS_DIR}/${1}.ovpn <<EOF
$(cat ${BASE_CONF})
<key>
$(cat ${CLIENT_KEY})
</key>
<cert>
$(cat ${CLIENT_CERT})
</cert>
<ca>
$(cat ${CA_FILE})
</ca>
<tls-auth>
$(cat ${TA_FILE})
</tls-auth>
EOF

* скриптът е взет от тук!

Направете файла изпълним:

root@test:~/openvpn-clients# chmod u+x ~/openvpn-clients/gen_config.sh

Генерирайте файла:

root@test:~/openvpn-clients# ./gen_config.sh client1

Файлът се намира в ~ / openvpn-clients / configs:

root@test:~/openvpn-clients/configs# ls ~/openvpn-clients/configs

Вземете текста и го копирайте във файл на клиентската машина с разширение .ovpn

root@test:~/openvpn-clients/configs# cat client1.ovpn

Можете да намерите полезни команди и повече информация за сертификатите тук!

Вашият коментар

Вашият имейл адрес няма да бъде публикуван.