Установка и настройка OpenVPN сервера в Debian 10 (Отзыв сертификатов)
OpenVPN — это полнофункциональное открытое средство VPN SSL, которое поддерживает широкий диапазон конфигураций. В этом мануале вы научитесь настраивать сервер OpenVPN на вашем выделенном сервере Debian 10.
Для начала нам необходимо установить сам OpenVPN сервер. Выполняем следующую команду и вводим пароль суперпользователя:
Устанавливаем пакеты openvpn и easy-rsa. Выполняем следующую команду:
apt install openvpn easy-rsa
Для упрощения процедуры создания необходимых ключей и сертификатов традиционно используется утилита Easy—RSA, которая позволяет легко управлять локальным центром сертификации (CA) инфраструктуры открытых ключей (PKI).
Выходим из суперпользователя. Выполняем следующую команду:
Копируем файлы easy-rsa в домашний каталог. Выполняем следующую команду:
Переходим в каталог easy-rsa. Выполняем следующую команду:
Выполняем инициализацию PKI. В каталоге EasyRSA есть скрипт easyrsa, который вызывается для выполнения задач, связанных с созданием и управлением CA. Запустите этот скрипт с параметром init-pki, чтобы инициировать инфраструктуру открытого ключа на сервере CA. Выполняем следующую команду:
Генерируем сертификат корневого центра сертификации (CA). Выполняем следующую команду:
Вводим имя корневого центра сертификации, нажимаем enter чтобы продолжить.
Создаем сертификат для сервера OpenVPN. Выполняем следующую команду, где вместо указываем доменное имя или IP-адрес вашего OpenVPN сервера, у меня 172.16.16.1:
./easyrsa build-server-full nopass
Создаем сертификат для клиента OpenVPN. Выполняем следующую команду, где вместо указываем произвольное имя для вашего клиента, у меня john:
./easyrsa build-client-full nopass
Так же генерируем список отозванных сертификатов. Выполняем следующую команду:
Протокол Ди́ффи — Хе́ллмана (англ. Diffie–Hellman, DH) — криптографический протокол, позволяющий двум и более сторонам получить общий секретный ключ, используя незащищенный от прослушивания канал связи. Полученный ключ используется для шифрования дальнейшего обмена с помощью алгоритмов симметричного шифрования.
Выполняем следующую команду:
./easyrsa gen-dh
(Это замёт некоторое время, ждите окончания генерации)
После генерируем OpenVPN ta.key — подпись HMAC, чтобы усилить функции проверки целостности TLS.
Выполняем следующую команду:
/usr/sbin/openvpn —genkey —secret ta.key
Переходим в суперпользователя. Выполняем следующую команду и вводим пар:
Создаем каталог для хранения ключевой информации OpenVPN сервера. Выполняем следующую команду:
Копируем сертификат корневого центра сертификации. Выполняем следующую команду:
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 сервера. Выполняем следующую команду:
Открываем конфигурационный файл 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
Переходим к настройке клиентской части, на другой машине. Выполняем команду:
Устанавливаем OpenVPN. Выполняем следующую команду:
Создаем каталог для хранения ключевой информации OpenVPN клиента. Выполняем следующую команду:
Далее нам необходимо перенести ключевую информацию, я использую scp (у меня сконфигурирован ssh). А именно файлы: ta.key, john.key, john.crt, ca.crt
Вместо сертификатов на клиента c CN john и его закрытого ключа может быть любой ваш, который вы генерировали (но не сертификат сервера)
Далее переношу ключевую информацию в каталог /etc/openvpn/certs, используя команду mv.
Создаем конфигурационный файл OpenVPN клиента. Выполняя следующую команду:
Открываем конфигурационный фал 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 любым редактором и документируем строчку содержащую:
Выходим из редактора и применяем параметры используя команду:
Настраиваем NAT
Выполняем следующую команду, где enp2s0 это имя вашего интерфейса смотрящего в сеть:
iptables -t nat -A POSTROUTING -o enp2s0 -j MASQUERADE
Сохраняем правила фаервола. Выполняем команду:
Открываем файл /etc/network/interfaces любым редактором например nano, и добавляете:
Что означает автоматическое восстановление правил фаервола. Либо можно сделать через системд сервис который будет запускать скрипт до старта таргета сети
Редактируем конфиг OpenVPN сервера любым редактором, добавляя туда параметры:
push “redirect-gateway def1 bypass-dhcp”
Первый параметр означает то что при старте OpenVPN клиента будет создаваться дефолтный маршрут через туннель. Второй опцией мы можем назначить DNS сервер.
Так же мы можем использовать опцию push для анонсирования маршрутов:
push “route 192.168.88.0 255.255.255.0”
Анонсирует маршрут 192.168.88.0 через туннель.
Отзыв сертификатов
Необходимая вещь для того чтобы отобрать у клиента вашего впн сервера доступ к нем. Выполняем команду:
где john это CN сертификата, т. е. имя клиента которые вы указали
Генерируем список отозванных сертификатов. Выполняя команду:
Переходим в суперпользователя
Копируем список отозванных сертификатов в каталог с ключевой информацией OpenVPN сервера и перезагружаем его.
Видим что клиент не подключается, т.к его сертификат отозван
Спасибо за прочтение данной статьи. Подписывайтесь на YouTube канал, здесь мы на стримах настраиваем Linux, Windows, Cisco. Отдельное Спасибо Роману Заиике за помощь .