Найти тему

Настройка собственного сервера OpenVPN 2.4 с Easy-RSA-3

Оглавление

Иногда возникают задачи, которые требуют соединить между собой два обособленных подразделения общей сетью, при этом не имея локальной сети. В этом случае используем виртуальные сети, связывая клиенты по защищенным протоколам. Берем за основу Ubuntu Server 22, об установке системы можете прочитать тут:

Исходные данные:

Имя сервера: OpenVPN

Ubuntu Server 22.04

Источник: Яндекс.Картинки
Источник: Яндекс.Картинки

Процесс установки OpenVPN:

Что нам нужно?

Мы разворачиваем серверную часть программы и собственный центр сертификации на отдельном ПК

Сервер и удаленные клиенты будут взаимодействовать друг с другом посредством конфигов, сертификатов и секретов, которые знают только клиенты/сервер из сертификата

Начнем!

Обновляем список пакетов

sudo apt update

Ставим приложения:

sudo apt install openvpn easy-rsa

После установки копируем easy-rsa вместе со сценариями в другую папку, у нас установка произошла в /usr/share/easy-rsa

скопируем папку в /root

cp -Rp /usr/share/easy-rsa /root/easy-rsa-3
cd /root/easy-rsa-3

мы можем отредактировать файл vars.example, чтобы внести коррективы по создаваемым сертификатам

sudo nano vars.example

например можно изменить размер ключа, срок действия и тип шифрования:

set_var EASYRSA_KEY_SIZE 4096
set_var EASYRSA_CRL_DAYS 3650
set_var EASYRSA_DIGEST "sha512"

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

mv vars.example vars

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

./easyrsa init-pki

Теперь команда для сбора центра сертификации. Здесь мы можем использовать пароль или нет, в зависимости от необязательного параметра nopass:

./easyrsa build-ca [nopass]

Это сгенерирует все файлы, необходимые для управления нашим ЦС. Следующие файлы создаются предыдущими шагами и имеют особое значение:

/root/easy-rsa-3/pki
/root/easy-rsa-3/pki/ca.crt
/root/easy-rsa-3/pki/private/ca.key

Создаем сертификат сервера

Теперь, когда наш ЦС готов, давайте создадим сертификат для нашего сервера. Единственный параметр, который нам нужен здесь, это CN, и он будет запрошен во время процесса, вы можете использовать имя хоста вашего сервера или что угодно:

Сначала делаем запрос:

./easyrsa gen-req OpenVPN [nopass]

Затем подписываем собственный запрос:

./easyrsa sign-req server OpenVPN

Вы можете выполнить шаг запроса на любом другом компьютере и также перенести файлы на компьютер с нашими файлами CA, но для этого потребуется дополнительный шаг импорта.

Как и в предыдущем шаге, создаются некоторые файлы, обратите внимание на следующие файлы, допустим, мы использовали «openvpn» для нашего имени сервера:

/root/easy-rsa-3/pki/private/openvpn.key
/root/easy-rsa-3/pki/reqs/openvpn.req
/root/easy-rsa-3/pki/issued/openvpn.crt

Определение клиентов, получение сертификатов.

Этот шаг похож на предыдущий. но в этом случае сертификат предназначен для нашего клиента, предположим, что наш клиент называется «client1», это будут шаги для создания сертификата (замените client1 на желаемое имя):

Сначала делаем запрос:

./easyrsa gen-req client1 nopass

Затем подписываем собственный запрос:

./easyrsa sign-req client client1

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

Некоторые из сгенерированных файлов:

/root/easy-rsa-3/pki/private/client1.key
/root/easy-rsa-3/pki/reqs/client1.req
/root/easy-rsa-3/pki/выпущено/client1.crt

Обратите внимание, что этот шаг следует повторить для каждого клиента для повышения безопасности. Идея состоит в том, чтобы иметь разные сертификаты для каждого клиента.

Создание и очистка списка отозванных сертификатов.

Мы только что создали наш ЦС, и на данный момент, все наши сертификаты в безопасности, но в будущем это может измениться, например, в случае кражи одного из наших устройств или сертификата. Для решения таких ситуаций мы создаем пустой список отзыва сертификатов.

./easyrsa gen-crl

Список можно найти по следующему пути:

/root/easy-rsa-3/pki/crl.pem

Генерация параметров DH

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

mkdir /etc/openvpn/ssl -p

openssl dhparam -out /etc/openvpn/ssl/dh.pem 4096

Настройка серверной части OpenVPN

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

cp /root/easy-rsa-3/pki/ca.crt /etc/openvpn/ssl/
cp /root/easy-rsa-3/pki/issued/openvpn.crt /etc/openvpn/ssl/
cp /root/easy-rsa-3/pki/private/openvpn.key /etc/openvpn/ssl/
cp /root/easy-rsa-3/pki/crl.pem /etc/openvpn/ssl/

В случае с моим дистрибутивом файл конфигурации называется /etc/openvpn/server.conf и содержит следующие параметры:

client-to-client
persist-key
persist-tun
ca /etc/openvpn/ssl/ca.crt
cert /etc/openvpn/ssl/openvpn.crt
comp-lzo adaptive
dev tun
dh /etc/openvpn/ssl/dh.pem
ifconfig-pool-persist server-ipp.txt 0
keepalive 10 120
key /etc/openvpn/ssl/openvpn.key
tls-auth /etc/openvpn/ssl/ta.key 0
cipher AES-256-CBC
auth SHA512
tls-version-min 1.2
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
log /var/log/openvpn/server.log
port 1194
proto udp
server 192.168.10.0 255.255.255.0
verb 3
crl-verify /etc/openvpn/ssl/crl.pem
push "route 192.168.1.0 255.255.255.0"
push "redirect-gateway def1"
push "dhcp-option DNS 192.168.1.1"

Файрволлом разрешаем ходить траффику по порту

iptables -A INPUT -p udp --dport 1194 -i ${WAN} -j ACCEPT

Помимо открытия порта 1194, вы также должны выполнить следующие команды для маршрутизации пакетов от наших клиентов:

iptables -t nat -A POSTROUTING -s 192.168.10.0/24 -o eth0 -j MASQUERADE

Если вы доверяете всем своим клиентам, вы также можете запустить:

iptables -A INPUT -i tun+ -j ACCEPT
iptables -A FORWARD -i tun+ -j ACCEPT

Не забудьте сохранить правила iptables после внесения этих изменений. Вы можете проверить журнал в /var/log/openvpn/server.log в случае возникновения каких-либо проблем.

На этом настройка серверной части OpenVPN завершена. Подключение клиентов будет в следующей статье.

Статья дополняется и корректируется!

Читайте также:

❗ Если данный материал вам помог или понравился - подпишитесь на канал и участвуйте в обсуждении в комментариях.
🚀 Подпиской вы очень поможете каналу и стимулируете автора публиковать больше материалов
🔥 Не пропустите обновления и новые статьи!
💰 Поддержать проект