Pull to refresh

Установка и настройка OpenVPN сервера в Debian 10 (Отзыв сертификатов)

Reading time5 min
Views17K

OpenVPN — это полнофункциональное открытое средство VPN SSL, которое поддерживает широкий диапазон конфигураций. В этом мануале вы научитесь настраивать сервер OpenVPN на вашем выделенном сервере Debian 10. 

Для начала нам необходимо установить сам OpenVPN сервер. Выполняем следующую команду и вводим пароль суперпользователя:

su -

Устанавливаем пакеты openvpn и easy-rsa. Выполняем следующую команду:

apt install openvpn easy-rsa

Для упрощения процедуры создания необходимых ключей и сертификатов традиционно используется утилита Easy-RSA, которая позволяет легко управлять локальным центром сертификации (CA) инфраструктуры открытых ключей (PKI).

Пакет успешно установлен.

Выходим из суперпользователя. Выполняем следующую команду:

exit

Копируем файлы easy-rsa в домашний каталог. Выполняем следующую команду:

cp -r /usr/share/easy-rsa

Переходим в каталог easy-rsa. Выполняем следующую команду:

cd easy-rsa

Выполняем инициализацию PKI. В каталоге EasyRSA есть скрипт easyrsa, который вызывается для выполнения задач, связанных с созданием и управлением CA. Запустите этот скрипт с параметром init-pki, чтобы инициировать инфраструктуру открытого ключа на сервере CA. Выполняем следующую команду:

./easyrsa init-pki

Генерируем сертификат корневого центра сертификации (CA). Выполняем следующую команду:

./easyrsa build-ca nopass

Вводим имя корневого центра сертификации, нажимаем enter чтобы продолжить.

Создаем сертификат для сервера OpenVPN. Выполняем следующую команду, где вместо <hostname> указываем доменное имя или IP-адрес вашего OpenVPN сервера, у меня 172.16.16.1:

./easyrsa build-server-full <hostname> nopass

Создаем сертификат для клиента OpenVPN. Выполняем следующую команду, где вместо <username> указываем произвольное имя для вашего клиента, у меня john:

./easyrsa build-client-full <username> nopass

Так же генерируем список отозванных сертификатов. Выполняем следующую команду:

./easyrsa gen-crl

Генерируем ключ DH.

Протокол Ди́ффи — Хе́ллмана (англ. Diffie–Hellman, DH) — криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи. Полученный ключ используется для шифрования дальнейшего обмена с помощью алгоритмов симметричного шифрования.

Выполняем следующую команду:

./easyrsa gen-dh
(Это замёт некоторое время, ждите окончания генерации)

После генерируем OpenVPN ta.key - подпись HMAC, чтобы усилить функции проверки целостности TLS.

Выполняем следующую команду:

/usr/sbin/openvpn --genkey --secret ta.key

Переходим в суперпользователя. Выполняем следующую команду и вводим пар:

su -

Создаем каталог для хранения ключевой информации OpenVPN сервера. Выполняем следующую команду:

mkdir /etc/openvpn/certs

Копируем сертификат корневого центра сертификации. Выполняем следующую команду:

cp /home/user/easy-rsa/pki/ca.crt /etc/openvpn/certs

Копируем сертификат OpenVPN сервера. Выполняем следующую команду:

cp /home/user/easy-rsa/pki/issued/172.16.16.1.crt /etc/openvpn/certs

Копируем закрытый ключ сертификата OpenVPN сервера. Выполняем следующую команду:

cp /home/user/easy-rsa/pki/private/172.16.16.1.key /etc/openvpn/certs

Копируем ключ DH. Выполняем следующую команду:

cp /home/user/easy-rsa/pki/dh.pem /etc/openvpn/certs

Копируем ключ ta. Выполняем следующую команду:

cp /home/user/easy-rsa/ta.key /etc/openvpn/certs

Копируем список отозванных сертификатов. Выполняем следующую команду:

cp /home/user/easy-rsa/pki/crl.pem /etc/openvpn/certs

Создаем файл конфигурации OpenVPN сервера. Выполняем следующую команду:

touch /etc/openvpn/server/server.conf

Открываем конфигурационный файл OpenVPN сервера любым редактором, например nano. Выполняем следующую команду:

nano -w /etc/openvpn/server/server.conf

Приводим конфигурационный файл к следующему виду. Вместо 172.16.16.1 необходимо вписать свое доменное имя или IP адрес если вы указывали иное при генерации сертификата. Так же можете поменять порт или пул выдаваемых адресов, если хотите.

Запускаем OpenVPN сервер. Выполняем следующую команду:

systemctl start openvpn-server@server

Проверяем работоспособность. Выполняем следующую команду:

systemctl status openvpn-server@server

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

systemctl enable openvpn-server@server

Переходим к настройке клиентской части, на другой машине. Выполняем команду:

su -

Устанавливаем OpenVPN. Выполняем следующую команду:

apt install openvpn

Создаем каталог для хранения ключевой информации OpenVPN клиента. Выполняем следующую команду:

mkdir /etc/openvpn/certs

Далее нам необходимо перенести ключевую информацию, я использую scp (у меня сконфигурирован ssh). А именно файлы: ta.key, john.key, john.crt, ca.crt

Вместо сертификатов на клиента c CN john и его закрытого ключа может быть любой ваш, который вы генерировали (но не сертификат сервера)

Далее переношу ключевую информацию в каталог /etc/openvpn/certs, используя команду mv.

Создаем конфигурационный файл OpenVPN клиента. Выполняя следующую команду:

touch /etc/openvpn/client/client.conf

Открываем конфигурационный фал OpenVPN клиента любым редактором, например nano. Выполняя следующую команду:

nano -w /etc/openvpn/client/client.conf

Приводим конфигурационный файл OpenVPN клиента к следующему виду. Если вы изменяли какие-либо параметры их надо изменить и на клиенте

Вместо 172.16.16.1 ваш IP адрес или доменное имя которые вы указывали и порт вместо 1194 если указывали, так же путь к клиентскому сертификату если файл называется по другому

Запускаем OpenVPN клиент. Используем следующую команду:

systemctl start openvpn-client@client

Проверим состояние OpenVPN клиента. Используем следующую команду:

systemctl status openvpn-client@client

Как видим подключение прошло успешно

Проверим связность внутри туннеля выполнив пинг

Так же клиент можно добавить в автозагрузку. Выполнив команду

systemctl enable openvpn-client@client

Настройка доступа к интернету через OpenVPN туннель

Открываем файл /etc/sysctl.conf любым редактором и документируем строчку содержащую:

net.ipv4.ip_forward=1

Выходим из редактора и применяем параметры используя команду:

sysctl -p

Настраиваем NAT

Выполняем следующую команду, где enp2s0 это имя вашего интерфейса смотрящего в сеть:

iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE

Сохраняем правила фаервола. Выполняем команду:

iptables-save > ~/ipt.save

Открываем файл /etc/network/interfaces любым редактором например nano, и добавляете:

pre-up iptables-restore < /root/ipt.save

Что означает автоматическое восстановление правил фаервола. Либо можно сделать через системд сервис который будет запускать скрипт до старта таргета сети

Редактируем конфиг OpenVPN сервера любым редактором, добавляя туда параметры:

push “redirect-gateway def1 bypass-dhcp”

push “dhcp-option DNS 1.1.1.1”

Первый параметр означает то что при старте OpenVPN клиента будет создаваться дефолтный маршрут через туннель. Второй опцией мы можем назначить DNS сервер.

Так же мы можем использовать опцию push для анонсирования маршрутов:

push “route 192.168.88.0 255.255.255.0”

Анонсирует маршрут 192.168.88.0 через туннель.

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

Необходимая вещь для того чтобы отобрать у клиента вашего впн сервера доступ к нем. Выполняем команду:

./easyrsa revoke john

где john это CN сертификата, т. е. имя клиента которые вы указали

Сертификат отозвался.

Генерируем список отозванных сертификатов. Выполняя команду:

./easyrsa gen-crl

Переходим в суперпользователя

Копируем список отозванных сертификатов в каталог с ключевой информацией OpenVPN сервера и перезагружаем его.

Видим что клиент не подключается, т.к его сертификат отозван

Связности тоже нет

Спасибо за прочтение данной статьи. Подписывайтесь на YouTube канал, здесь мы на стримах настраиваем Linux, Windows, Cisco. Отдельное Спасибо Роману Заиике за помощь .

Tags:
Hubs:
Total votes 12: ↑2 and ↓10-6
Comments13

Articles