Иногда возникают задачи, которые требуют соединить между собой два обособленных подразделения общей сетью, при этом не имея локальной сети. В этом случае используем виртуальные сети, связывая клиенты по защищенным протоколам. Берем за основу 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 завершена. Подключение клиентов будет в следующей статье.
Статья дополняется и корректируется!
Читайте также:
❗ Если данный материал вам помог или понравился - подпишитесь на канал и участвуйте в обсуждении в комментариях.
🚀 Подпиской вы очень поможете каналу и стимулируете автора публиковать больше материалов
🔥 Не пропустите обновления и новые статьи!
💰 Поддержать проект