OpenVPN — это свободная реализация технолгии частной сети (VPN) с открытым исходым кодом, созданная, Джеймсом Йонаном. Она позволяет устанавливать защищённые соединения между компьютерами, находящимися за NAT и сетевыми экранами, без необходимости изменения их настроек. OpenVPN использует шифрование и аутентификацию для обеспечения конфиденциальности и целостности данных. Программа доступна для различных операционных систем, включая Android, iOS, Linux, macOS, Windows и другие.
Установка OpenVPN и Easy-RSA
Easy-RSA — это набор скриптов и утилит, предназначенных для управления инфраструктурой открытых ключей (PKI) и центрами сертификации (CA) в контексте настройки виртуальных частных сетей (VPN), в частности, OpenVPN. Он используется для генерации, управления и отзыва сертификатов серверов и клиентов VPN. Easy-RSA облегчает процесс создания и управления сертификатами, делая его более автоматизированным и безопасным.
Создадим новую директорию
Далее создадим символическую ссылку
Также можно скопировать файлы пакета
Создание PKI
Для инициализации PKI директории с помощью утилиты easyrsa выполним следующий шаги:
Перейдем в созданную дерикторию easy-rsa
Выполним команду для инициализации PKI директории
Далее переходим в каталог /etc/openvpn/easy-rsa/pki/ и создаем файл vars
В открытый файл добавляем следующие строки:
set_var EASYRSA "$PWD"
set_var EASYRSA_PKI "$EASYRSA/pki"
set_var EASYRSA_DN "cn_only"
set_var EASYRSA_REQ_COUNTRY "RU"
set_var EASYRSA_REQ_PROVINCE "Moscow"
set_var EASYRSA_REQ_CITY "Moscow"
set_var EASYRSA_REQ_ORG "MyOrg"
set_var EASYRSA_REQ_EMAIL "openvpn@mydomain.net"
set_var EASYRSA_REQ_OU "CA"
set_var EASYRSA_KEY_SIZE 2048
set_var EASYRSA_ALGO rsa
set_var EASYRSA_CA_EXPIRE 7500
set_var EASYRSA_CERT_EXPIRE 365
set_var EASYRSA_NS_SUPPORT "no"
set_var EASYRSA_NS_COMMENT "CERTIFICATE AUTHORITY"
set_var EASYRSA_EXT_DIR "$EASYRSA/x509-types"
set_var EASYRSA_SSL_CONF "$EASYRSA/openss-easyrsa.cnf"
set_var EASYRSA_DIGEST "sha256"
Cоздадим сертификаты CA и сервера
Перейдем в директорию /etc/openvpn/easy-rsa
И создадим CA сертификат
Важно! При создании CA-сертификата скрипт запросит ввод пароля минимум из 4 символов. Введенный пароль нужно запомнить.
Теперь создадим ключ сертификата сервера
Скопируем полученый ключ в /etc/openvpn/
И подпишем его
Cкрипт поинтересуется в нашей уверенности, отвечаем “Yes”. Затем запросит пароль, который был указан при создании CA-сертификата.
Проверим, подписался ли сертификат:
Скопируем подписанный сертификат
Создадим сертификат Диффи-Хеллман.
Протокол Диффи — Хеллмана — это криптографический метод, который позволяет двум или более сторонам создать общий секретный ключ, обмениваясь информацией по незащищённому каналу связи. Этот ключ может быть использован для шифрования и расшифровки сообщений с помощью симметричных алгоритмов.
В основе протокола лежит идея неполного обмена ключами, предложенная Ральфом Мерклом и реализованная Диффи и Хеллманом. Каждый участник генерирует свой закрытый ключ и использует его вместе с открытыми параметрами для вычисления открытого ключа. Затем участники обмениваются открытыми ключами и используют их вместе со своими закрытыми ключами и общими параметрами для вычисления общего секретного ключа.
Протокол Диффи — Хеллмана применяется в различных областях, включая VPN, SSH, TLS и другие протоколы защищённой коммуникации. Он обеспечивает безопасный обмен ключами между сторонами, не требуя предварительного обмена ключами или доверенной третьей стороны.#
Cоздан файл dh.pem, а нам нужен dh2048.pem. Переименуем его при копировании
В качестве дополнительного уровня безопасности мы добавим дополнительный общий секретный ключ, который будет использовать сервер и все клиенты
Создадим дополнительный ключ сервера ta.key:
Скопируем дополнительный ключ
Создание пользовательского сертификата
Создадим каталог client
Процесс создания пользовательского сертификата идентичен созданию сертификата сервера
Можно создать пользовательский сертификат с паролем
Далее подпишем пользовательский сертификат
ВАЖНО! При подписании пользовательских сертификатов необходимо убедиться, что CommonName уникален для каждого сертификата. В противном случае, при подключении клиента с сертификатом с неуникальным CommonName другие клиенты могут потерять доступ к сети Интернет.
Проверим подпись сертификата
Скопируем CA сертификат (ca.crt), пользовательский сертификат (ligtech.crt), пользовательский ключ (ligtech.key) и дополнительный ключ сервера ta.key в каталог client (ca.crt скопируем еще в /etc/openvpn/)
Настройка OpenVPN
Cкопируем файл server.conf
Отредактируем файл server.conf, в большинстве случаев вам придется раскомментировать нужные строки или убедиться в их наличии. Опции указаны в порядке их следования в файле:
;local a.b.c.d
port 1194
;proto tcp
proto udp
;dev tap
dev tun
;dev-node MyTap
ca ca.crt
cert server.crt
key server.key # This file should be kept secret
dh dh2048.pem
topology subnet
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist /var/log/openvpn/ipp.txt
;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100
;server-bridge
;push "route 192.168.10.0 255.255.255.0"
;push "route 192.168.20.0 255.255.255.0"
;client-config-dir ccd
;route 192.168.40.128 255.255.255.248
;client-config-dir ccd
;route 10.9.0.0 255.255.255.252
;learn-address ./script
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 8.8.8.8"
push "dhcp-option DNS 1.1.1.1"
;client-to-client
;duplicate-cn
keepalive 10 120
tls-auth ta.key 0 # This file is secret
cipher AES-256-CBC
;compress lz4-v2
;push "compress lz4-v2"
comp-lzo
;max-clients 100
user openvpn
group openvpn
persist-key
persist-tun
status /var/log/openvpn/openvpn-status.log
log /var/log/openvpn/openvpn.log
log-append /var/log/openvpn/openvpn.log
verb 4
;mute 20
explicit-exit-notify 1
Настраиваем маршрутизацию
Чтобы настроить параметры IP-передачи сервера OpenVPN, отличные от стандартных, вам потребуется открыть файл и добавить следующую строку в конец файла:
/etc/sysctl.conf
.
net.ipv4.ip_forward = 1
Сохраните файл и закройте его после завершения.
Чтобы прочитать файл и загрузить значения для текущей сессии, введите:
Output
net.ipv4.ip_forward = 1
Ваш сервер OpenVPN теперь способен перенаправлять входящий трафик с одного сетевого устройства на другое. Это означает, что сервер может направлять трафик от клиентов, подключённых к виртуальному интерфейсу VPN, на другие физические сетевые устройства.
Благодаря этой конфигурации весь ваш веб-трафик будет проходить через IP-адрес вашего сервера, при этом открытый IP-адрес вашего клиента будет скрыт.
Далее необходимо настроить правила брандмауэра для обеспечения корректной передачи входящего и исходящего трафика на вашем сервере OpenVPN.
Настройка брандмауэра
Строка после слова «dev» в этой команде — это ваш публичный интерфейс. Например, в этом результате показан интерфейс с именем eth0
Разрешим UFW перенаправление пакетов по умолчанию. Для этого откройте файл /etc/default/ufw
Найдите в файле строку DEFAULT_FORWARD_POLICY
и измените значение с DROP
на ACCEPT
:
Далее добавляем конфигурацию в /etc/ufw/before.rules
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)
-A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
COMMIT
# END OPENVPN RULES
Перечисленные в файле
before.rules
, считываются и активируются до загрузки обычных правил UFW. Добавьте в верхнюю часть файла выделенные ниже строки. После этого будет задана политика по умолчанию
Откроем трафик UDP на порту 1194
После добавления правил отключите и заново включите UFW, чтобы загрузить изменения из всех измененных файлов:
Запуск OpenVPN
Активируем службу
Запустим службу
Проверим, что служба работает