Установка и настройка OpenVPN (клиента и сервера) и Easy-RSA 3 в CentOS 7
OpenVPN - бесплатное решение для создания виртуальных частных сетей (VPN), позволяющее организовывать зашифрованные каналы типа точка-точка или сервер-клиенты. Программа поддерживает множество операционных систем, включая Windows, MAC, Linux, Android и iOS. Easy-RSA — программа для создания и ведения инфраструктуры открытых ключей (PKI) в openVPN
Установка необходимого софта
Добавляем репозиторий EPEL и обновляемся
1
2
$ sudo yum install epel-release -y
$ sudo yum update -y
Устанавливает OpenVPN 2.4
и Easy-RSA 3
1
$ sudo yum install openvpn easy-rsa -y
Проверим их версии
1
2
$ sudo openvpn --version
$ sudo ls -lah /usr/share/easy-rsa/
Проверка версий OpenVPN и Easy-RSA
Настройка Easy-RSA 3
Скопируем скрипты easy-rsa
в каталог /etc/openvpn/
1
$ sudo cp -r /usr/share/easy-rsa /etc/openvpn/
Переходим в каталог /etc/openvpn/easy-rsa/3/
и создаем там файл vars
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ sudo cd /etc/openvpn/easy-rsa/3/
$ sudo nano vars
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "Moscow"
set_var EASYRSA_REQ_CITY "Moscow"
set_var EASYRSA_REQ_ORG "My Organisation"
set_var EASYRSA_REQ_EMAIL "[email protected]"
set_var EASYRSA_REQ_OU "IT department"
set_var EASYRSA_KEY_SIZE 4096
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 3650
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openssl-1.0.cnf"
set_var EASYRSA_DIGEST "sha512"
Делаем файл исполняемым
1
$ sudo chmod +x vars
Создание ключа и сертификата для OpenVPN Сервера
Прежде чем создавать ключ, нам нужно инициализировать каталог PKI
и создать ключ CA
.
1
2
3
4
5
6
7
8
$ cd /etc/openvpn/easy-rsa/3/
$ sudo ./easyrsa init-pki
Note: using Easy-RSA configuration from: ./vars
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/3/pki
$ sudo ./easyrsa build-ca
На этом необходимо придумать пароль для своего CA-ключа, чтобы сгенерировались файлы ca.crt
и ca.key
в каталоге pki
Этот пароль нам потребуется дальше
Создадим ключ сервера (название сервера srv-openvpn
)
1
$ sudo ./easyrsa gen-req srv-openvpn nopass
- опция
nopass
- отключение пароля дляsrv-openvpn
Подпишем ключ srv-openvpn
используя наш CA-сертификат
1
$ sudo ./easyrsa sign-req server srv-openvpn
В процессе у нас спросят пароль, который мы задавали ранее
Подписываем ключ, используя CA-сертификат
Проверим файлы сертификата, что бы убедится, что сертификаты сгенерировались без ошибок
1
2
$ sudo openssl verify -CAfile pki/ca.crt pki/issued/srv-openvpn.crt
pki/issued/srv-openvpn.crt: OK
Все сертификата OpenVPN сервера созданы.
- Корневой сертификат расположен:
pki/ca.crt
- Закрытый ключ сервера расположен:
pki/private/srv-openvpn.key
- Сертификат сервера расположен:
pki/issued/srv-openvpn.crt
Создание ключа клиента
Сгенерируем ключ клиента client-01
1
$ sudo ./easyrsa gen-req client-01 nopass
Теперь подпишем ключ client-01
, используя наш CA сертификат
1
$ sudo ./easyrsa sign-req client client-01
В процессе у нас спросят пароль, который мы задавали ранее
Подписываем ключ клиента, используя корневой сертификат
Проверим файлы сертификата
1
2
$ sudo openssl verify -CAfile pki/ca.crt pki/issued/client-01.crt
pki/issued/client-01.crt: OK
Дополнительная настройка OpenVPN сервера
Сгенерируем ключ Диффи-Хеллмана
1
$ sudo ./easyrsa gen-dh
Генерация ключа Диффи-Хеллмана
Если мы в дальнейшем планируем отзывать клиентские сертификаты, нам необходимо сгенерировать CRL ключ
1
$ sudo ./easyrsa gen-crl
В процессе у нас спросят пароль, который мы задавали ранее
Для того, что бы отозвать сертификат надо выполнить команду:
1
$ sudo ./easyrsa revoke client-02
где
client-02
имя сертификата, который мы отзываем
Все необходимые сертификаты созданы, теперь их надо скопировать в директории
Копируем сертификаты сервера
1
2
3
$ sudo cp pki/ca.crt /etc/openvpn/server/
$ sudo cp pki/issued/srv-openvpn.crt /etc/openvpn/server/
$ sudo cp pki/private/srv-openvpn.key /etc/openvpn/server/
Копируем сертификаты клиента
1
2
3
$ sudo cp pki/ca.crt /etc/openvpn/client/
$ sudo cp pki/issued/client-01.crt /etc/openvpn/client/
$ sudo cp pki/private/client-01.key /etc/openvpn/client/
Копируем ключи DH
и CRL
1
2
$ sudo cp pki/dh.pem /etc/openvpn/server/
$ sudo cp pki/crl.pem /etc/openvpn/server/
Проверить, надо ли перегенерировать
CRL
и заново копировать его в каталог/etc/openvpn/server/
после отзыва сертификата
Настройка OpenVPN сервера
Создадим файл конфигурации server.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
$ cd /etc/openvpn/
$ sudo nano server.conf
# OpenVPN Port, Protocol and the Tun
port 1194
proto udp
dev tun
# OpenVPN Server Certificate - CA, server key and certificate
ca /etc/openvpn/server/ca.crt
cert /etc/openvpn/server/srv-openvpn.crt
key /etc/openvpn/server/srv-openvpn.key
# DH and CRL key
dh /etc/openvpn/server/dh.pem
crl-verify /etc/openvpn/server/crl.pem
# Network Configuration - Internal network
# Redirect all Connection through OpenVPN Server
server 10.10.1.0 255.255.255.0
push "redirect-gateway def1"
# Using the DNS from https://dns.watch
push "dhcp-option DNS 84.200.69.80"
push "dhcp-option DNS 84.200.70.40"
# Enable multiple client to connect with same Certificate key
duplicate-cn
# TLS Security
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
# Other Configuration
keepalive 20 60
persist-key
persist-tun
comp-lzo yes
daemon
user nobody
group nobody
# OpenVPN Log
log-append /var/log/openvpn.log
verb 3
Настройка Firewalld
Активируем модуль ядра port-forwarding
1
2
3
$ echo 'net.ipv4.ip_forward = 1' | sudo tee -a /etc/sysctl.conf
$ sudo sysctl -p
net.ipv4.ip_forward = 1
Добавим службу openvpn
в firewall, и интерфейс tun0
в доверенную зону
1
2
$ sudo firewall-cmd --permanent --add-service=openvpn
$ sudo firewall-cmd --permanent --zone=trusted --add-interface=tun0
Активируем MASQUERADE
для доверенной зоны Firewall
1
$ sudo firewall-cmd --permanent --zone=trusted --add-masquerade
Активируем NAT
1
2
$ sudo SERVERIP=$(ip route get 84.200.69.80 | awk 'NR==1 {print $(NF-2)}')
$ sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.10.1.0/24 -o $SERVERIP -j MASQUERADE
Перезапустим Firewall
1
$ sudo firewall-cmd --reload
Запустим OpenVPN и добавим его в автозагрузку
1
2
$ sudo systemctl start openvpn@server
$ sudo systemctl enable openvpn@server
Проверим
1
2
$ sudo netstat -plntu
$ sudo systemctl status openvpn@server
Настройка OpenVPN клиента
Создадим файл конфигурации client-01.ovpn
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
$ cd /etc/openvpn/client
$ sudo nano client-01.ovpn
client
dev tun
proto udp
remote xx.xx.xx.xx 1194
ca ca.crt
cert client-01.crt
key client-01.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 lzo
nobind
persist-key
persist-tun
mute-replay-warnings
verb 3
В строке remote xx.xx.xx.xx 1194
надо прописать IP-адрес вместо xx.xx.xx.xx
Теперь для надо заархивировать сертификаты ca.crt
и client-01.crt
, ключ клиента client-01.key
, файл конфигурации client-01.ovpn
, и передать их на ПК, который будет подключаться к OpenVPN серверу
Установим архиватор zip
и создадим архив с файлами
1
2
3
$ sudo yum install zip unzip -y
$ sudo cd /etc/openvpn/
$ sudo zip client/client-01.zip client/*
Пробуем подключиться с другого ПК к OpenVPN серверу и смотрим лог:
1
$ sudo tail -f /var/log/openvpn.log