10.4 Настройка OpenVPN

1. Предварительная подготовка сервера
2. Генерация ключей и сертификатов
3 Перенос готовых сертификатов в /etc/openvpn
4. Настройка и запуск сервера
5. Настройка NAT в Firewalld
6. Генерация сертификата для OpenVPN-клиента
7. Подключение клиента к серверу OpenVPN
8. Отзыв сертификата

OpenVPN используется для создания зашифрованных каналов типа точка-точка или сервер-клиенты между компьютерами. OpenVPN позволяет устанавливать соединения между компьютерами, находящимися за NAT и сетевым экраном через один сетевой порт UDP или TCP.

1. Предварительная подготовка сервера

1.1 Переводим selinux в режим уведомлений

nano /etc/selinux/config

В файле замените текст SELINUX=enforcing на SELINUX=permissive
Выполните:

setenforce 0

Более подробно см.ссылку

1.2 Настройка Firewalld

Если Firewalld активен, то следует открыть порт для OpenVPN. По умолчанию OpenVPN работает на 1194 порту.

firewall-cmd --permanent --add-port=1194/udp
firewall-cmd —reload

1.3 Установка OpenVPN и Easy-RSA
Выполните команду:

yum install openvpn easy-rsa

1.4 Создание файла vars
Создадим файл vars, который будет использоваться как шаблон, чтобы упростить и ускорить процесс создания ключей. В нем указаны параметры для создаваемых ключей.
Перейдите в каталог cd /usr/share/easy-rsa/3
Создайте файл с именем varsниже приведен пример содержимого файла:

export KEY_COUNTRY="RU"
export KEY_PROVINCE="Moscow"
export KEY_CITY="Moscow"
export KEY_ORG="MyCompany"
export KEY_EMAIL="admin@example.com"
export KEY_CN="openvpnserver"
export KEY_OU="ITotdel"
export KEY_NAME="vpn.example.com"
export KEY_ALTNAMES="myopenvpn"

Данную информацию потом можно увидеть в свойствах сертификата ca.crt
Описание параметров:
KEY_COUNTRY — двух буквенная аббревиатура страны проживания;
KEY_PROVINCE — штат/область/регион;
KEY_CITY — город;
KEY_ORG — название вашей организации;
KEY_EMAIL — электронная почта, которая будет привязана к сертификату;
KEY_OU — Organizational Unit – название команды и отдела, для которого предназначен сертификат;
KEY_CN — название сервера;
KEY_NAME — адрес, по которому будет выполняться подключение (можно указать полное наименование сервера);
KEY_ALTNAMES — альтернативный адрес;

Значения данных полей используются при создании самоподписанного сертификата и никак в дальнейшем не повлияют на работу OpenVPN, однако, для удобства, лучше подставить реальные данные.

Для создания защищенного соединения между клиентами и сервером минимальный набор ключей и сертификатов будет состоять из следующего списка:

Сертификат УЦ (CA);
Сертификат сервера;
Закрытый ключ сервера;
Ключевая последовательность Диффи-Хеллмана;
Закрытый ключ УЦ;
Сертификат клиента;
Закрытый ключ клиента.

2 Генерация ключей и сертификатов

2.1 Инициализируем PKI (инфраструктура публичных ключей)
Перейдите в каталог cd /usr/share/easy-rsa/3 и выполните в нем команду:

./easyrsa init-pki


в текущем каталоге появится каталог pki.

2.2 Создание удостоверяющего центра  CA
Генерируем корневой сертификат (CA), им должны быть подписаны все сертификаты используемые OpepVPN сервером.
Выполните команду:

./easyrsa build-ca

На запрос "Enter New CA Key Passphrase" задайте пароль.
На запрос "Re-Enter New CA Key Passphrase"повторите пароль.
Этот пароль защищает приватный ключ удостоверяющего центра. Также пароль потребуется каждый раз, когда нужно будет подписывать в удостоверяющем центре сертификаты для серверов и клиентов OpenVPN. На запрос ввести "Common Name" можно просто нажать Enter.
Кроме этого имеется возможно сформировать CA и без ключа:

./easyrsa build-ca nopass

но это менее безопасно.
В результате выполнения команд будут созданы два ключа в каталоге pki:

./pki/private/ca.key
./pki/ca.crt

ca.key — приватный(секретный) ключ центра CA, остается на сервере и никому не передается.
ca.crt — открытый файл сертификата УЦ, он вместе с пользовательскими сертификатами передается клиентам.

2.3 Создание ключа Диффи-Хеллмана
Файл Диффи-Хелмана используется для безопасного получения общего секретного ключа в незащищенных каналах связи, применяется для обеспечения защиты трафика от расшифровки между клиентом и сервером.

./easyrsa gen-dh

при этом будет создан файл /usr/share/easy-rsa/3/pki/dh.pem

2.4 Создание сертификата сервера
Для создания сертификата сервера необходимо сначала создать файл запроса.
Файл запроса для сервера создадим без пароля с помощью опции nopass, иначе придется вводить пароль с консоли при каждом запуске сервера.
Находясь в каталоге cd /usr/share/easy-rsa/3/выполните команду:

./easyrsa gen-req vpn-server nopass

на запрос ввода Common Name нажимаем Enter
В результате будет создан файл запроса /usr/share/easy-rsa/3/pki/reqs/vpn-server.req и файл приватного ключа /usr/share/easy-rsa/3/pki/private/vpn-server.key
Теперь необходимо подписать запрос на получение сертификата у нашего CA:

./easyrsa sign-req server vpn-server

После ввода команды подтверждаем правильность данных, введя yes
Confirm request details: yes
Далее вводим пароль, который указывали при создании корневого сертификата.
В результате сформируется сертификат сервера /usr/share/easy-rsa/3/pki/issued/vpn-server.crt

2.5 Создание TA ключа
Для активации tls-auth необходимо сгенерировать дополнительный секретный ключ.
Сделать это можно с помощью команды:

openvpn --genkey --secret pki/ta.key

Tls-auth добавляет использование еще одной подписи HMAC к handshake-пакетам SSL/TLS, инициируя дополнительную проверку целостности. Теперь пакет, не имеющий такой подписи, будет сразу отбрасываться. Это обеспечит дополнительный уровень безопасности протокола SSL/TLS, защищая систему от таких атак, как:

— Сканирование прослушиваемых VPN-сервером портов
— Инициация SSL/TLS-соединения несанкционированной машиной (tls-auth отсекает их на значительно более раннем этапе, чем при использовании OpenVPN без tls-auth)
— DoS-атаки и флуд на порты OpenVPN
— Переполнение буфера SSL/TLS

3. Перенос готовых сертификатов в /etc/openvpn

Сертификаты сервера готовы и находятся в каталоге pki. В /etc создадим новый каталог, в котором будем хранить сертификаты:

mkdir -p /etc/openvpn/server/keys

Переходим в каталог pki:

cd /usr/share/easy-rsa/3/pki/

Копируем в /etc/openvpn/server/keys следующие сертификаты:

cp ca.crt issued/vpn-server.crt private/vpn-server.key dh.pem ta.key /etc/openvpn/server/keys/

4 Настройка и запуск сервера

4.1 Создаем конфигурационный файл для сервера openvpn

nano /etc/openvpn/server/server.conf

Содержимое файла server.conf

local 10.10.0.2
# Сетевой порт сервера
port 1194
# Работа по протоколу UDP
proto udp
dev tun
ca keys/ca.crt
cert keys/vpn-server.crt
key keys/vpn-server.key
dh keys/dh.pem
tls-auth keys/ta.key 0
# Область Ip-адресов виртуальных хостов
server 192.168.10.0 255.255.255.0
# Назначение шлюза клиентам
push "redirect-gateway def1"
push "route-gateway 10.10.1.1"
# Указывается DNS
push "dhcp-option DNS 1.1.1.1"
ifconfig-pool-persist ipp.txt
keepalive 10 120
max-clients 15
client-to-client
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log-append /var/log/openvpn/openvpn.log
verb 0
mute 20
daemon
mode server
tls-server
# Компрессия трафика
comp-lzo yes
# Алгоритм шифрования трафика
cipher BF-CBC

4.2 Запуск сервера
Перед запуском создадим каталог для «лог-файлов» сервера:

mkdir /var/log/openvpn

Разрешаем автоматический старт сервиса OpenVPN:

systemctl enable openvpn-server@server

Запускаем openvpn-server:

systemctl start openvpn-server@server

5. Настройка NAT в Firewalld

Если необходимо, чтобы клиенты могли выходить через vpn в интернет, то для этого настроим NAT

nano /etc/sysctl.conf

добавить строку:

net.ipv4.ip_forward=1

Применяем настройки sysctl:

sysctl -p /etc/sysctl.conf

Добавим правила в firewalld. eth0 — внешний, tun0 — внутренний интерфейс OpenVPN:

firewall-cmd --direct --permanent --add-rule ipv4 nat POSTROUTING 0 -o eth0 -j MASQUERADE
firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i tun0 -o eth0 -j ACCEPT
sudo firewall-cmd --direct --permanent --add-rule ipv4 filter FORWARD 0 -i eth0 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT

6. Создание сертификата для OpenVPN-клиента

Для настройки клиента необходимо на сервере создать пользовательские сертификаты, а на клиентском компьютере установить программу OpenVPN и настроить ее. На сервере генерируем сертификаты для клиента.

6.1 Создание клиентского сертификат
Для этого переходим в каталог easy-rsa:

cd /usr/share/easy-rsa/3

Формирование запрос на клиентский сертификат:

./easyrsa gen-req client1 nopass

Подпись запроса:

./easyrsa sign-req client client1

На запрос подтверждение выпустить сертификат — вводим yes:
Confirm request details: yes
В результате создастся сертификат client1.ca и закрытый ключ client1.key
Для удобства переноса пользовательских ключей на клиентский компьютер, скопируйте на сервере эти ключи во временную директорию (/tmp/keys), выполнив последовательно 3 команды:

mkdir /tmp/keys
cp pki/issued/client1.crt pki/private/client1.key pki/dh.pem pki/ca.crt pki/ta.key /tmp/keys
chmod -R a+r /tmp/keys

6.2 Сборка единого конфигурационного файла для подключения клиентов к OpenVPN
Единый файл .ovpn содержит в себе настройки клиента для подключения к OpenVPN серверу, а также все необходимые сертификаты. Для подключению к OpenVPN серверу, достаточно импортировать этот файл и подключение к vpn будет настроено.
Создаем каталог:

mkdir /etc/openvpn/keyovpn

переходим в каталог:

cd /etc/openvpn/keyovpn

Создаем файл:

nano /etc/openvpn/keyovpn/base-client.conf

Пример содержимого файла base-client.conf:

client
resolv-retry infinite
nobind
# Адрес OpenVPN сервера
remote 10.10.0.2 1194
proto udp
dev tun
comp-lzo yes
tls-client
key-direction 1
float
keepalive 10 120
persist-key
persist-tun
verb 0
# Алгоритм шифрования
cipher BF-CBC

Создадим скрипт автоматической сборки файла *.ovpn

nano /etc/openvpn/keyovpn/make_config.sh

Содержимое скрипта:

#!/bin/bash
#Каталог где лежать клиентские ключи
KEY_DIR=/tmp/keys
#каталог в котором будет создан файл *.ovpn
OUTPUT_DIR=/etc/openvpn/keyovpn/
#Клиентский конфигурационный файл
BASE_CONFIG=./base-client.conf

cat ${BASE_CONFIG} \
<(echo ) \
<(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
chmod +x make_config.sh

Запускаем скрипт:

./make_config.sh client1

client1 — имя клиентского сертификата
На выходе будет создан файл client1.ovpn, который содержит все необходимые настройки, ключи и сертификаты для подключения.

7. Подключение клиента к серверу OpenVPN

Для подключения клиента к VPN серверу передайте файл client1.ovpn на клиентский ПК. В свойствах сетевого подключения импортируйте файл client1.ovpn, при это будут импортированы настройки подключения к серверу OpenVPN, а также сертификаты и ключи.

8. Отзыв сертификата

В нашем примере мы создали сертификат client1, теперь сделаем отзыв этого сертификата. Переходим в каталог:

cd /usr/share/easy-rsa/3

Отзываем сертификат командой:

./easyrsa revoke client1

Подтверждаем действия: Continue with revocation: yes

и вводим пароль от центра сертификации.

После этого создаем/обновляем файл crl.pem:

./easyrsa gen-crl

во время выполнения команды, необходимо будет ввести пароль центра сертификации.

Копируем файл crl.pem в каталог openvpn:

cp pki/crl.pem /etc/openvpn/server/keys/

Перезагружаем сервис openvpn:

systemctl restart openvpn-server@server

 

Если вы нашли ошибку, выделите текст и нажмите Ctrl+Enter.

Print Friendly, PDF & Email