Настройка OpenVPN: PKI, OpenVPN-сервер, подключение клиентов (Windows, Android)
Информационные технологии для экспертов
Логин: Пароль:
Войти через:
Войти как пользователь
Вы можете войти на сайт, если вы зарегистрированы на одном из этих сервисов:
СТАТЬИ     версия для печати

 
PC4XP / статьи / Настройка OpenVPN: PKI, OpenVPN-сервер, подключение клиентов (Windows, Android)
Автор: Администратор

Настройка OpenVPN: PKI, OpenVPN-сервер, подключение клиентов (Windows, Android)

материал № 13504


Оглавление

- Создание PKI. Сервер удостоверяющего центра
- Настройка OpenVPN-сервера
- Возможные проблемы, связанные с настройкой OpenVPN-сервера
- Доступ клиентов к OpenVPN
- Возможные проблемы, связанные с настройкой OpenVPN-клиента

VPN на основе OpenVPN имеет следующие составные элементы:

1. Инфраструктура открытых ключей (PKI).
2. Сервер OpenVPN.
3. Клиенты OpenVPN, которым УЦ выдает сертификаты, дающие право на подключение к VPN

= СОЗДАНИЕ PKI. СЕРВЕР УДОСТОВЕРЯЮЩЕГО ЦЕНТРА =

Хотя УЦ может физически расположить на одном сервере вместе с OpenVPN, делать этого не рекомендуется. Дело в том, что если OpenVPN-сервер будет скомпрометирован злоумышленниками, то они наверняка получат и закрытый ключ УЦ, при помощи которого они смогут создать сертификаты, которые позволят им получить доступ в VPN. В данном примере УЦ будет настраиваться на отдельном сервере. Более того, сервер с УЦ можно сделать не просто отдельным, но и виртуальным. Который большую часть времени будет выключен, а включаться будет только тогда, когда нужно будет обработать запрос на создание сертификат и выпустить сам сертификат.

Также, в целях безопасности, все операции на сервере необходимо проводить от пользователя, не имеющего права суперпользователя (т.е. не root). Дальнейшая работа УЦ тоже должна проводится под непривилегированным пользователем.


Элементы, из которых состоит PKI:

1. Собственно удостоверяющий центр (УЦ) (Certificate Authority - CA). Создавать его следует на отдельном сервере (физическом или виртуальном, не имеет значения).
2. Закрытый ключ УЦ. Будет необходим для подписания выдаваемых сертификатов. Является самой уязвимой частью PKI.
3. Ключевая пара (закрытый и открытый ключи) для OpenVPN-сервера.
4. Ключевые пары для клиентов OpenVPN.

- Настройка удостоверяющего центра -

Установка Easy-RSA:

Easy-RSA - это и есть основа удостоверяющего центра. Это программное обеспечение, предназначенное для генерации ключей.

а) Установка Easy-RSA на сервер. Производится командой: sudo dnf install easy-rsa

На CentOS 7.X вместо dnf используем команду yum.


б) После установки Easy-RSA, я скопирую папку с программой с ее места в папку текущего пользователя. Для чего? Напомню, что все работы я провожу под непривилегированным пользователем (т.е. не root). При установке Easy-RSA установился по следующему пути: /usr/share/easy-rsa/3.0.8/ 3.0.8 - папка с программой (в моем случае это последняя версия). Установка проводилась от пользователя root (префикс sudo), поэтому проблем с установкой по этому пути не вышло. А вот уже запускать саму программу необходимо от имени текущего непривилегированного пользователя. Программе будет необходимо создавать некоторые папки и файлы в своем рабочем каталоге и она не сможет этого сделать. Поэтому я ее просто скопирую в папку текущего пользователя, где она сможет спокойно создавать необходимые файлы и папки, работая от текущего пользователя.

Итак, я скопировал содержимое папки 3.0.8 в папку /home/username/easy-rsa username - это имя текущего пользователя. Запускать программу буду отсюда.


в) Инициализируем PKI: ./easyrsa init-pki

Поскольку программа представляет собой bash-скрипт, то запускаться она должна с префикса "./" Если все хорошо, то скрипт сообщит, что PKI создан и мы можем приступить к созданию УЦ (CA). Во время выполнения этой команды, скрипт создает в своей папке подпапку pki, в которой будут храниться запросы клиентов на выпуск сертификатов, закрытый ключ и конфигурационные файлы. Если бы мы запустили скрипт из изначальной директории, куда установился Easy-RSA, то программе бы не хватило прав создать эту папку и, была бы ошибка "Cannot create /usr/share/easy-rsa/3.0.8/pki (permission?)", явно говорящая о недостатке прав у текущего пользователя.


г) Создание удостоверяющего центра (CA): ./easyrsa build-ca

Создание конфигурационного файла. Перед генерацией ca.crt можно создать файл vars в /pki/, в который поместить следующие строки:

   set_var EASYRSA_ALGO "ec"

   set_var EASYRSA_DIGEST "sha512"

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

Генерация закрытого ключа. После выполнения команды будет запрошен пароль, который нужно придумать и который будет необходимо каждый раз вводить, как только закрытый ключ будет использоваться для подписи издаваемых сертификатов для клиентов OpenVPN. Будет сгенерирован закрытый ключ. /pki/private/ca.key Данный ключ не должен покидать пределы сервера, где он находится.

Генерация сертификата с открытым ключом. После создания закрытого ключа будет предложено ввести информацию, которая будет помещена в сертификат открытого ключа. Это имя пользователя (в данном случае можно ввести название сервера). После ввода этой информации будет сообщено, что сертификат был выпущен, что находится он в папке /pki/ca.crt и его можно использовать. Данный сертификат необходимо будет устанавливать на всех клиентах OpenVPN, в том числе и на OpenVPN-сервере.

= НАСТРОЙКА OPENVPN-СЕРВЕРА =

Выбор сервера. В этой статье уже предполагается, что вы выбрали сервер для VPN с ОС Linux. Годится как CentOS 7, CentOS 8 (уже лишенная поддержки), Alma-, Rocky Linux и др. Отмечу, что для сервера с ОС CentOS 7 под OpenVPN достаточно VPS с 2 vCPU, 1 Гб RAM и 10 Гб свободного места на диске (HDD или SSD). У меня есть VPS с такой конфигурацией. Работает исправно. Стоимость может варьироваться в зависимости от компании и страны, где находится ее дата-центр и может составлять от 2 до 10$ в месяц.

Функции VPN. Если предполагается использование VPN для доступа ко ВСЕЙ Всемирной паутине, то OpenVPN-сервер должен находится там, где такой доступ возможен. Такая функция VPN является побочным продуктом, поскольку основные ее функции – это обеспечение безопасного информационного обмена и создание оверлейных сетей, способных объединить компьютеры по всему миру. Для получение этого функционала можно создать OpenVPN-сервер и в России, что благоприятно скажется на быстродействии VPN. А вообще, ничто не мешает иметь несколько OpenVPN-серверов под разные нужды.

Переходим к настройке.

Дистрибутив OpenVPN, а также и Easy-RSA, находятся в репозитории EPEL. Поэтому перед их установкой необходимо включить этот репозиторий в системе (если он не включен). Проверка наличия репозитория в ОС: sudo yum repolist. При отсутствии EPEL, производим установку: sudo dnf install epel-release

На CentOS 7.X вместо dnf используем команду yum.

- Установка OpenVPN -

а) установка OpenVPN на сервер: sudo dnf install openvpn

б) создание папки для хранения ключей: создаем папку с произвольным именем (например keys) в /etc/openvpn/. Так как мы работаем под непривилегированным пользователем, а OpenVPN устанавливался с префиксом sudo, то и папку нужно создавать таким образом: sudo mkdir /etc/openvpn/keys

- Установка Easy-RSA -

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


а) Установка Easy-RSA на сервер: sudo dnf install easy-rsa

б) копируем папку с программой в папку текущего пользователя (как при установке на УЦ).

в) Инициализируем PKI: ./easyrsa init-pki Да, здесь как и на сервере УЦ тоже необходимо инициализировать PKI, чтобы была создана структура папок, в которых будут храниться запросы на выпуск сертификатов и сами сертификаты.

- Генерация ключей Диффи-Хеллмана и HMAC -

Закрытый ключ Диффи-Хеллмана применяется при установлении соединения (рукопожатия) и передаче открытого ключа шифрования информации.

Ключом HMAC (Hash-based Message Authentication Code) подписываются пакеты информационного обмена в процессе рукопожатия, обеспечивая таким образом дополнительную защиту.

В частности обеспечивается защита от:

- сканирования портов, используемых OpenVPN,

- SSL/TLS-соединений, инициированных несанкционированной машиной на раннем этапе. На более позднем этапе такие соединения будут отсечены стандартной конфигурацией OpenVPN,

- DoS-атак и флуда на порты OpenVPN,

- переполенения буфера SSL/TLS.


Генерация ключей. Для этого переходим в каталог Easy-RSA и запускаем следующие команды:

   Ключ Диффи-Хеллмана: ./easyrsa gen-dh - будет создан ключ с именем dh.pem

   Ключ HMAC: openvpn --genkey --secret hmac.key - здесь мы указываем произвольное имя создаваемому ключу (hmac.key).

Ключи будут созданы в той папке, в которой мы сейчас находимся. Их необходимо перенести в /etc/openvpn/keys (не забывая про пользовательские права). Как сервер, так и каждый клиент должны будут иметь копии этих ключей.

- Создание запроса к УЦ на выпуск сертификата OpenVPN-сервера и создание закрытого ключа -

Все действия выполняем в папке Easy-RSA OpenVPN-сервера.

а) Создаем закрытый ключ для OpenVPN-сервера и запрос на выпуск сертификата: ./easyrsa gen-req keyname nopass

Был использован аргумент nopass для того, чтобы при запуске OpenVPN-сервера не пришлось вводить пароль. При необходимости, его можно задать. keyname - название файлов с закрытым ключом и запросом. Во время выполнения команды необходимо будет ввести название (имя) на которое создается запрос и закрытый ключ. Назвать можно, например, так: vpnkey.


Места расположения файлов:

Запрос: /easy-rsa/pki/reqs/keyname.req

Ключ: /easy-rsa/pki/private/keyname.key


Файл с запросом понадобится для УЦ, чтобы тот сгенерировал сертификат с открытым ключом. После генерации сертификата, запрос больше не потребуется.


б) копируем закрытый ключ в папку с ключами OpenVPN (в данном случае /etc/openvpn/keys/)


в) переносим файл запроса на сервер УЦ для выпуска сертификата с открытым ключом. Можно использовать множество вариантов. Вот, для примера, три из них:


1. команда SCP (Secure Copy Protocol). Команда защищенного копирования файлов по SSH-протоколу: sudo scp root@XXX.XXX.XXX.XXX:/home/username/easy-rsa/pki/reqs/crtrequest.req /tmp. Команда выполняется на сервере УЦ. Компоненты команды:


     root - суперпользователь

     XXX.XXX.XXX.XXX - IP-адрес, или доменное имя удаленного компьютера

     /home/username/easy-rsa/pki/reqs/crtrequest.req - полный путь к файлу с запросом, включая сам файл

     /tmp - папка на сервере УЦ. Запрос копируем во временную папку, откуда потом его импортируем.


2. файловый менеджер MC: выполняем sudo mc. В верхнем меню выбираем Left или Right, как удобно. Выбираем пункт Shell link. В строке необходимо ввести IP-адрес или доменное имя удаленного компьютера, с которого, или на который необходимо скопировать файл. Поскольку соединение будет вестись по SSH, то через двоеточие необходимо указать порт SSH (22 - по умолчанию, или какой вы установили сами). Если соединение прошло удачно, то на выбранной панели покажется структура каталогов удаленного компьютера. Можно копировать файлы.


3. WinSCP. Бесплатная программа под Windows. Аналогичная MC. Также позволяет передавать файлы по SSH-протоколу.


После переноса файла с запросом на сервер УЦ, производим следующие команды (из папки easy-rsa) с этим файлом:


г) импортируем файл запроса на сервере УЦ. Переходим в папку easy-rsa и запускаем команду: ./easyrsa import-req /tmp/crtrequest.req filename Компоненты команды:

/tmp/crtrequest.req - полный путь к файлу с запросом.

filename - название файла с запросом, которое будет ему дано после импортирования. Файл будет импортирован по адресу: /pki/reqs/filename.req в структуре папок easy-rsa.


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

./easyrsa sign-req server filename Компоненты команды:

     server - здесь может быть два варианта: server и client. Поскольку мы подписываем запрос на выпуск сертификата для сервера, то выбираем server,

     filename - название файла с запросом на выпуск сертификата (без указания расширения).

Во время выполнения команды будет запрошен пароль (если он был установлен) от закрытого ключа удостоверяющего центра. Если пароль введен верно, то по указанному запросу будет выпущен сертификат (/папка с easy-rsa/pki/issued/filename.crt). Срок действия сертификата будет ограничен и будет равен в данном случае 825 дням.


е) передаем OpenVPN-серверу его выпущенный сертификат: используем варианты передачи, описанные выше, или любые другие. Скопировать необходимо также сертификат УЦ. Сертификаты копируются в папку, определенную для них (ранее мы создали папку /etc/openvpn/keys).


В итоге, содержимое папки /etc/openvpn/keys окажется таким:


Файл Описание
dh.pem Ключ Диффи-Хеллмана, необходим для ассимитричного шифрования при установлении OpenVPN-соединения. Должен присутствовать и на сервере и на каждом клиенте.
hmac.key Ключ HMAC, обеспечивающий дополнительную защиту при установлении OpenVPN-соединения. Должен присутствовать и на сервере и на каждом клиенте.
filename.crt Сертификат для OpenVPN-сервера с открытым ключом. Выпускается УЦ на основании запроса. Для каждого из клиентов OpenVPN должен быть выпущен свой сертификат.
keyname.key Закрытый ключ OpenVPN-сервера. Хранится только на OpenVPN-сервере и не подлежит распространению. Генерируется вместе с запросом к УЦ на выпуск сертификата (с открытым ключом). Для каждого из клиентов OpenVPN должен быть свой закрытый ключ.
ca.crt Сертификат УЦ. Должен присутствовать и на сервере и на каждом клиенте.

Собственно таким оно должно быть как на OpenVPN-сервере, так и на его клиентах.


- Настройка и запуск OpenVPN-сервера -

а) настройка конфигурационного файла server.conf


- для этого берем типовой конфигурационный файл из папки с программой, который находится по этому адресу: /usr/share/doc/openvpn/sample/sample-config-files/server.conf и копируем его в папку /etc/openvpn/server/

- открываем для редактирования этот файл и приводим к виду ниже:


Параметр со значением Описание
local a.b.c.d
Параметр закомментирован по умолчанию
IP-адрес компьютера, на котором установлен OpenVPN-сервер. Указание этого параметра имеет смысл, если компьютер имеет два или более IP-адреса (сетевых интерфейсов).
port 1194 Порт, который будет слушать OpenVPN-приложение. По умолчанию - 1194. Для работы нескольких процессов OpenVPN необходимо указать разные порты. Указанный порт(ы) необходимо внести в исключения файерволлов.
proto udp

Допустимые значения: udp или tcp.

Тип транспортного протокола, на основе которого будет работать VPN. Рекомендуется UDP, более быстрый протокол, не имеющий контроля целостности данных и гарантии доставки сегментов. Т.к. сформированная поверх него VPN и так будет применять TCP-протокол, обеспечивающий целостность и сохранность передаваемых данных.

- выбранный базовый протокол должен быть одинаковым и на сервере и на клиентах.

- при смене протокола на уже работающем OpenVPN (сервере или клиенте), нужно внести в исключения файерволлов порт для вновь выбранного порта.

dev tun

Допустимые значения: tun, tap, tap0.

tun - виртуальная сеть будет работать начиная с сетевого уровня (по OSI), основываясь на IP-протоколе.

tap - виртуальная сеть будет работать начиная с канального уровня (по OSI), основываясь на Ethernet-протоколе.

tap0 - название (может быть другим: tap1, tun0, tun1 и т.д.) виртуального сетевого интерфейса. Указывается для того чтобы сделать сетевой мост между виртуальным и физическим сетевыми интерфейсами. После указания виртуального сетевого интерфейса, его имя нужно добавить в доверенную зону файерволла.

dev-node MyTap
Параметр закомментирован по умолчанию
Указывается название Tap-интерфейса, если операционная система - Windows.
ca /etc/openvpn/keys/ca.crt Полный путь к сертификату УЦ.
cert /etc/openvpn/keys/filename.crt Полный путь к сертификату OpenVPN-сервера, выданному УЦ (по запросу OpenVPN-сервера)
key /etc/openvpn/keys/keyname.key Полный путь к закрытому ключу OpenVPN-сервера.
dh /etc/openvpn/keys/dh.pem Полный путь к ключу Диффи-Хеллмана, необходимому для установления соединения клиентов и сервера в OpenVPN.
topology subnet
Параметр закомментирован по умолчанию

Выбор топологии виртуальной сети. Допустимые значения: subnet, net30, p2p.

subnet - рекомендуется использовать, если в сети нет старых OpenVPN-клинетов версии 2.0.9 или старше. В данной топологии каждому клиенту выделяется один IP-адрес и указывается маска подсети.

net30 - используется по умолчанию. Является наиболее совместимой и универсальной топологией. Недостатки: на каждого клиента расходуются 4 IP-адреса (адрес подсети, широковещательный адрес, адрес шлюза и самого клиента), более сложная маршрутизация. Единственная реальная причина использовать топологию net30, когда требуется поддержка клиентов Windows до версии 2.0.9 или когда должны поддерживаться какие-либо клиенты Windows и должны поддерживаться клиенты, отличные от Windows, которые не могут установить IP + маску подсети на адаптере tun.

p2p - топология виртуальной сети, в которой все клиенты обмениваются информацией по схеме точка-точка. Не будет работать на клиентах под Windows.

server 10.8.0.0 255.255.255.0

Указывается адрес подсети с маской. В данном случае, серверу будет присвоен адрес 10.8.0.1

Клиентам будут выделяться адреса из этого же диапазона. На OpenVPN-клиенте в данном параметре указывается IP-адрес OpenVPN-сервера.

Данный параметр необходимо закомментировать, если используется server-bridge.

ifconfig-pool-persist ipp.txt Если вдруг OpenVPN-сервер будет остановлен или перезапущен, то повторно присоединившиеся клиенты получат тот же IP-адрес, что и был в прошлом сеансе. Соответствия клиентов к их IP-адресам хранятся в файле ipp.txt. Файл заполняется автоматически.
server-bridge 10.8.0.0 255.255.255.0 10.8.0.50 10.8.0.100
Параметр закомментирован по умолчанию

Параметр указывается, если необходимо организовать мост между VNIC и NIC. 10.8.0.4 255.255.255.0 - подсеть с маской, 10.8.0.50 10.8.0.100 - диапазон выделяемых адресов для клиентов подсети.

Параметр server-bridge без значений устанавливает сетевой мост с адресацией по умолчанию.

Для настройки моста, также необходимо настроить его на уровне операционной системы.

push Директива, предназначенная для передачи некоторых настроек клиентам OpenVPN, без необходимости настраивать каждого из них отдельно.
push "route 192.168.10.0 255.255.255.0"
push "route 167.129.19.0 255.255.255.0"
Параметр закомментирован по умолчанию
Параметр задает адреса подсетей, с которыми связан OpenVPN-сервер и которые передаются клиентам OpenVPN, чтобы они имели доступ к ним. Также необходимо в указанных подсетях указать адрес OpenVPN-подсети, чтобы они имели к ней доступ и обмен трафиком был двухсторонний.
push "redirect-gateway def1 bypass-dhcp" Направляет трафик клиентов через VPN.
push "dhcp-option DNS 208.67.222.222"
push "dhcp-option DNS 208.67.220.220"
Параметр указывает клиентам, какие адреса DNS-серверов использовать. По умолчанию указаны адреса серверов OpenDNS, принадлежащих Cisco. При желании можно указать DNS-сервера Google (8.8.8.8, 8.8.4.4), Level3DNS (4.2.2.1, 4.2.2.2), DNS.Watch (84.200.69.80, 84.200.70.40), Comodo Secure DNS (8.26.56.26, 8.20.247.20) или любые другие.
client-config-dir ccd
route 192.168.40.128 255.255.255.248
Параметры закомментированы по умолчанию

Параметр client-config-dir указывает на каталог (ccd), содержащий конфигурационные файлы с сетевыми настройками клиентов. При включении данного параметра, необходимо, чтобы каталог ccd (или любой другой) существовал.

Каждый конфигурационный файл с сетевыми настройками клиентов носит такое же имя, как название сертификата клиента.

Предположим, что клиент с названием своего сертификата «client» соединен с другой подсетью (192.168.40.128/255.255.255.248) и этой подсети необходимо дать доступ в VPN-сеть. Тогда создаем файл client в папке ccd. В этом файле прописываем строку iroute 192.168.40.128 255.255.255.248

Также необходимо раскомментировать параметр route 192.168.40.128 255.255.255.248

Данные параметры будут работать в режиме маршрутизации (задействованы директивы «dev tun» и «server»), но не в режиме моста.

learn-address ./script
Параметр закомментирован по умолчанию
Параметр указывает на файл скрипта с именем script, в котором задана последовательность команд для встроенного файерволла, определяющая настройки прав доступа различным группам клиентов OpenVPN. Скрипт пишется вручную и позволяет задавать разные политики доступа разным группам клиентов.
client-to-client
Параметр закомментирован по умолчанию
Если раскомментировать данную директиву, то все клиенты в OpenVPN смогут видеть друг друга. Иначе каждый клиент видит только себя и OpenVPN-сервер.
duplicate-cn
Параметр закомментирован по умолчанию
Директива, позволяющая подключаться к VPN клиентам с одним и тем же сертификатом. Такую возможность можно использовать в целях тестирования VPN. В реальных условиях каждый клиент должен иметь собственный сертификат.
keepalive 10 120 Сервер каждые 10 секунд будет пинговать удаленный хост и, если за 120 секунд не было получено ни одного пакета - то перезапускать VPN.
tls-auth /etc/openvpn/keys/hmac.key 0 Путь к HMAC-ключу. Настройка для сервера.
tls-auth /etc/openvpn/keys/hmac.key 1 Путь к HMAC-ключу. Настройка для клиента.
cipher AES-256-CBC Выбор алгоритма шифрования. В данном случае - AES-256-CBC. В конфигурационном файле каждого клиента должен быть выбран точной такой же алгоритм. При этом, начиная с версии 2.4 происходит автоматическое согласование алгоритма шифрования между сервером и клиентом. Т.е. достаточно указать алгоритм на сервере.
compress lz4-v2
Параметр закомментирован по умолчанию
Установка метода компрессии передаваемых данных. Только для версии 2.4+.
push "compress lz4-v2" Установка метода компрессии передаваемых данных для клиентов. Только для версии 2.4+.
comp-lzo
Параметр закомментирован по умолчанию
Установка метода компрессии передаваемых данных. Для версий старше 2.4. Также данный параметр должен присутствовать в конфигурационных файлах каждого из клиентов.
max-clients 100
Параметр закомментирован по умолчанию
Максимально допустимое количество активных клиентов OpenVPN.
user nobody Позволяет работать OpenVPN с пониженными привилегиями, что обеспечивает бОльшую безопасность.
group nobody Позволяет работать OpenVPN с пониженными привилегиями, что обеспечивает бОльшую безопасность.
persist-key Опция позволяет не перечитывать ключи и сертификаты заново в случае, если OpenVPN-сервер был перезапущен.
persist-tun Опция позволяет не инициализировать повторно виртуальный сетевой интерфейс, если OpenVPN-сервер был перезапущен.
status openvpn-status.log Позволяет фиксировать состояние сети VPN в файле по адресу: etc/openvpn/server/openvpn-status.log
log openvpn.log Включает запись событий OpenVPN в файл etc/openvpn/server/openvpn.log
Если параметр закомментирован, то запись событий ведется в журнал операционной системы.
log-append openvpn.log Позволяет дозаписывать в указанный файл новые события.
verb x Где х - 0, 4, 5, 6 или 9. Это степень подробности описания событий OpenVPN, которые записываются в лог-файл. 9 - максимально подробный уровень логирования.
mute 20
Параметр закомментирован по умолчанию
В лог-файл будут записываться только по 20 сообщений из одной категории.
explicit-exit-notify 1 Уведомлять клиента о том, что если сервер был перезапущен, то клиент может быть переподсоединен автоматически.
auth SHA256 Выбор алгоритма шифрования, который будет использоваться при установлении соединения.

б) запуск OpenVPN-службы

Добавление порта OpenVPN-сервера (по умолчанию - 1194) в исключения файерволов:

Для файеровола UFV: sudo ufw allow 1194/tcp

Для iptables: sudo /sbin/iptables -A INPUT -m state --state NEW -m tcp -p tcp --dport 1194 -j ACCEPT

Для firewalld (CentOS, Rocky-, Alma- Linux и т.п.):

   sudo firewall-cmd --permanent --add-port=1194/tcp

   sudo firewall-cmd --reload

Для SELinux:

   sudo semanage port -a -t ssh_port_t -p tcp 1194

   semanage port -l | grep ssh - проверка того, что новый порт был успешно добавлен в исключения.


Запуск OpenVPN-сервера немедленно: systemctl start openvpn-server@server.service Выделенная красным часть - это название конфигурационного файла (без расширения) в /etc/openvpn/server/

Запуск OpenVPN-сервера с запуском операционной системы: systemctl enable openvpn-server@server.service

Проверка состояния службы OpenVPN: systemctl status openvpn-server@server.service

После запуска служба OpenVPN создает виртуальный сетевой интерфейс tun0 (либо tap0, если он был выбран в конфигурационном файле). Чтобы убедиться, что он есть и работает, нужно выполнить команду: ip a show tun0


в) настройка сети OpenVPN-сервера


- включаем перенаправление пакетов из VPN в локальную сеть. Для этого добавляем в файл /etc/sysctl.conf следующую строку: net.ipv4.ip_forward = 1
- применяем назначенные настройки немедленно, выполнив команду: sudo sysctl -p
- добавление нового интерфейса tun0 в доверенную (trusted) зону файерволла: sudo firewall-cmd --permanent --zone=trusted --add-interface=tun0
- добавление приложения openvpn в доверенную зону файерволла: sudo firewall-cmd --permanent --add-service openvpn
- разрешаем замену IP-адресов хостов в VPN на IP-адрес OpenVPN-сервера, при трансляции пакетов: sudo firewall-cmd --permanent --zone=trusted --add-masquerade
- команда, позволяющая узнать название сетевого интерфейса OpenVPN-сервера. Оно пригодиться ниже: ip -o -4 route show to default | awk '{print $5}'
- команда, позволяющая трафику VPN идти в Интернет: sudo firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp1s0 -j MASQUERADE

enp1s0 - название сетевого интерфейса OpenVPN-сервера в данном примере,

10.8.0.0/24 - подсеть VPN. Задается в server.conf,

iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o enp1s0 -j SNAT --to-source 23.88.53.64
- перезапуск файерволла для принятия изменений: sudo firewall-cmd –reload

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

/etc/openvpn/ - содержит ключи, лог-файл, конфигурационный файл.

/run/openvpn-server/ - исполняемые файлы OpenVPN-сервера.

/run/openvpn-client/ - исполняемые файлы OpenVPN-клиента.

/usr/lib/systemd/system/openvpn-server@.service - служба OpenVPN-сервера.

/usr/lib/systemd/system/openvpn-client@.service - служба OpenVPN-клиента.

/etc/share/doc/openvpn/ - документация, образцы скриптов, конфигурационных файлов.


= ВОЗМОЖНЫЕ ПРОБЛЕМЫ, СВЯЗАННЫЕ С НАСТРОЙКОЙ OPENVPN-СЕРВЕРА =

1. Забегая вперед, скажу, что после настройки OpenVPN-сервера и настройки первого клиента возникла проблема с доступом в Интернет через VPN. Страницы просто не открывались и все. При этом локально VPN работал. Это весьма распространенная проблема и в Интернете много способов ее решения. Однако в моем случае все оказалось банальнее. Дело в том, что при определенном типе шрифта и его размера цифра "1" и маленькая латинская буква "l" выглядят абсолютно одинаково. И правила, которые я добавил в файерволлы, содержали неправильное название сетевого интерфейса: вместо цифры “1" я набирал букву “l", что в корне было неверно. А правила эти как раз ответственны за передачу трафика с OpenVPN наружу, в Интернет. Они просто не работали. Заново добавив правила, но с корректным название интерфейса, я получил доступ в Интернет на клиенте.


2. Ошибка при запуске OpenVPN-сервиса (systemctl start openvpn-server@server.service): "Job for openvpn-server@server.service failed because the control process exited with error code. See "systemctl status openvpn-server@server.service" and "journalctl -xe" for details."

В лог-файле /etc/openvpn/server/openvpn.log можно увидеть содержание ошибки:

Options error: —client-config-dir fails with 'ccd': No such file or directory (errno=2)

Options error: Please correct these errors.

В данном случае ошибка означает, что openvpn не может найти папку ccd, которой нет и которую нужно банально создать. Папка создается по адресу: /etc/openvpn/server/ccd После того, как папка была создана, сервис запустился без ошибок.


= ДОСТУП КЛИЕНТОВ К OPENVPN =

- Настройка OpenVPN на клиенте с Windows 7 (8.1, 10) -

а) Установка OpenVPN

На клиенте с ОС Windows следует установить клиентскую версию OpenVPN, скачав ее с официального сайта (openvpn.net).


б) настройка конфигурационного файла на OpenVPN-клиенте. Ниже в таблице указаны не все параметры файла, но только те, которые необходимы для корректной работы VPN:


Параметр со значением Описание
client Параметр, установленный по умолчанию. Обозначает, что мы являемся клиентом.
dev tun

Допустимые значения: tun, tap, tap0.

tun - виртуальная сеть будет работать начиная с сетевого уровня (по OSI), основываясь на IP-протоколе.

tap - виртуальная сеть будет работать начиная с канального уровня (по OSI), основываясь на Ethernet-протоколе.

tap0 - название (может быть другим: tap1, tun0, tun1 и т.д.) виртуального сетевого интерфейса. Указывается для того чтобы сделать сетевой мост между виртуальным и физическим сетевыми интерфейсами. После указания виртуального сетевого интерфейса, его имя нужно добавить в доверенную зону файерволла.

proto udp

Допустимые значения: udp или tcp.

Тип транспортного протокола, на основе которого будет работать VPN. Рекомендуется UDP, более быстрый протокол, не имеющий контроля целостности данных и гарантии доставки сегментов. Т.к. сформированная поверх него VPN и так будет применять TCP-протокол, обеспечивающий целостность и сохранность передаваемых данных.

- выбранный базовый протокол должен быть одинаковым и на сервере и на клиентах.

- при смене протокола на уже работающем OpenVPN (сервере или клиенте), нужно внести в исключения файерволлов порт для вновь выбранного порта.

remote 33.33.33.33 1194 IP-адрес нашего OpenVPN сервера с портом по умолчанию.
resolv-retry infinite Параметр, позволяющий постоянно пытаться разрешить имя OpenVPN-сервера.
nobind Большинству клиентов не нужно привязываться к определенному локальному номеру порта.
persist-key
persist-tun
В случае перезапуска сеанса OpenVPN не будут повторно затребованы ключи шифрования.
ca C:\\KEYS\\ca.crt
cert C:\\KEYS\\win7client.crt
key C:\\KEYS\\win7client.key
Пути к ключам: ключ удостоверяющего центра, сертификат клиента и его закрытый ключ.
remote-cert-tls server Исключение возможности MiTM-атак, путем проверки серверных сертификатов.
tls-auth C:\\KEYS\\hmac.key 1 Путь к HMAC-ключу. Для клиента устанавливается параметр "1".
cipher AES-256-GCM
auth SHA256
Выбор криптографического шифра (AES-256-GCM) и функции хэширования (SHA256). Выбор должен быть одинаковым для всех клиентов и для сервера.

Подготовка закрытого ключа и сертификата с открытым ключом для клиента

Алгоритм подготовки ключей для клиентов точно такой же, как и алгоритм создания ключей для OpenVPN-сервера.


а) Создаем закрытый ключ для OpenVPN-сервера и запрос на выпуск сертификата. Делаем это на сервере УЦ: ./easyrsa gen-req keyname nopass

Был использован ключ nopass для того, чтобы при запуске приложения OpenVPN не приходилось вводить пароль. При необходимости, его можно задать. keyname - название файлов с закрытым ключом и запросом. Во время выполнения команды необходимо будет ввести название (имя) на которое создается запрос и закрытый ключ.

Места расположения файлов:

Запрос: /easy-rsa/pki/reqs/keyname.req

Ключ: /easy-rsa/pki/private/keyname.key


б) Импортируем файл запроса. Перед импортирование полученные два файла лучше перенести в отдельную папку, например: /home/user/keys, из которой потом делать импорт запроса:

./easyrsa import-req /home/user/keys/keyname.req filename Компоненты команды:

/tmp/keyname.req - полный путь к файлу с запросом,

filename - название файла с запросом, которое будет ему дано после импортирования. Файл будет импортирован по адресу: /pki/reqs/filename.req в структуре папок easy-rsa.


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

./easyrsa sign-req client filename Компоненты команды:

client - здесь может быть два варианта: server и client. Поскольку мы подписываем запрос на выпуск сертификата для клиента, то выбираем client,

filename - название файла с запросом на выпуск сертификата (без указания расширения).


Во время выполнения команды будет запрошен пароль (если он был установлен) от закрытого ключа удостоверяющего центра. Если пароль введен верно, то по указанному запросу будет выпущен сертификат (/папка с easy-rsa/pki/issued/filename.crt). Срок действия сертификата будет ограничен и будет равен в данном случае 825 дням.


г) передаем OpenVPN-клиенту его закрытый ключ и выпущенный сертификат, а также ключи Диффи-Хеллмана и HMAC и сертификат УЦ: используем варианты передачи, описанные выше. Я, для удобства, размещаю клиентские ключи в папке c:\keys. Также, для большей безопасности, ключи можно хранить на зашифрованном разделе, который монтируется перед подключением к VPN.


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


- Настройка OpenVPN на Android -

Для запуска OpenVPN на смартфоне с Android необходимо скачать соответствующий клиент и установить его. Настройка проще простого. Аналогичным образом готовятся ключи и конфигурационный файл (подойдет файл от Windows OpenVPN-клиента), который необходимо указать в программе и который будет запрошен ею после первого запуска. Как ключи, так и конфигурационный файла можно скопировать в папку keys (хоть на внутреннюю память смартфона, хоть на его SD-карту). Конфигурационных файлов может быть несколько.

= ВОЗМОЖНЫЕ ПРОБЛЕМЫ, СВЯЗАННЫЕ С НАСТРОЙКОЙ OPENVPN-КЛИЕНТА =

1. На одном из клиентов под Windows 7 у меня возникла ошибка, связанная с установкой TAP драйвера (у драйвера отсутствует цифровая подпись). Помогла установка другого TAP-драйвера, который я скачал с официального сайта.



Теги: SSH | смена_порта
Просмотров: 2205

КОММЕНТАРИИ к "Настройка OpenVPN: PKI, OpenVPN-сервер, подключение клиентов (Windows, Android)"

Чтобы оставить комментарий, вам необходимо зарегистрироваться на сайте.
Комментировать

ДРУГИЕ МАТЕРИАЛЫ ПО ТЕМЕ

IT-WIKI (2)

sshd_config  >>>

ID материала: 12487 / Дата публикации: 08.04.2021 / Просмотров: 909

Конфигурационный файл сервиса SSH.

ssh  >>>

ID материала: 12486 / Дата публикации: 08.04.2020 / Просмотров: 534

Хранит ключи доступа и конфигурационный файл сервиса SSH.

Статьи (1)

IT4XP / статьи

Выбор нестандартного порта для SSH-сервера >>>

ID материала: 12485 / Дата публикации: 10.05.2021 / Просмотров: 1334





НАЗНАЧЕНИЕ КОРЗИНЫ

Корзина не предназначена для покупки товаров, поскольку сайт не занимается продажами.

Функция корзины заключается всборе компьютерных комплектующих в собственную базу (требуется регистрация на сайте) и сравнении их между собой.

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

Сравнение комплектующих: Можно сравнить только комплектующие следующих групп: 1. Жёсткие диски. 2. Твердотельные диски. 3. Оперативная память. 4. Видеокарты. 5. Центральные процессоры. 6. Материнские платы.