![]() |
Автор: Администратор |
VPN на основе OpenVPN имеет следующие составные элементы:
1. Инфраструктура открытых ключей (PKI).Хотя УЦ может физически расположить на одном сервере вместе с OpenVPN, делать этого не рекомендуется. Дело в том, что если OpenVPN-сервер будет скомпрометирован злоумышленниками, то они наверняка получат и закрытый ключ УЦ, при помощи которого они смогут создать сертификаты, которые позволят им получить доступ в VPN. В данном примере УЦ будет настраиваться на отдельном сервере. Более того, сервер с УЦ можно сделать не просто отдельным, но и виртуальным. Который большую часть времени будет выключен, а включаться будет только тогда, когда нужно будет обработать запрос на создание сертификат и выпустить сам сертификат.
Также, в целях безопасности, все операции на сервере необходимо проводить от пользователя, не имеющего права суперпользователя (т.е. не root). Дальнейшая работа УЦ тоже должна проводится под непривилегированным пользователем.
Элементы, из которых состоит PKI:
1. Собственно удостоверяющий центр (УЦ) (Certificate Authority - CA). Создавать его следует на отдельном сервере (физическом или виртуальном, не имеет значения).Установка 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-сервере.
Выбор сервера. В этой статье уже предполагается, что вы выбрали сервер для 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 на сервер: sudo dnf install openvpn
б) создание папки для хранения ключей: создаем папку с произвольным именем (например keys) в /etc/openvpn/. Так как мы работаем под непривилегированным пользователем, а OpenVPN устанавливался с префиксом sudo, то и папку нужно создавать таким образом: sudo mkdir /etc/openvpn/keys
На OpenVPN-сервере тоже необходимо установить Easy-RSA, но для того, чтобы создать запрос к удостоверяющему центру, чтобы тот выпустил сертификат. И для генерации еще двух ключей (Диффи-Хеллмана и HMAC), о которых ниже.
а) Установка Easy-RSA на сервер: sudo dnf install easy-rsa
б) копируем папку с программой в папку текущего пользователя (как при установке на УЦ).
в) Инициализируем PKI: ./easyrsa init-pki Да, здесь как и на сервере УЦ тоже необходимо инициализировать PKI, чтобы была создана структура папок, в которых будут храниться запросы на выпуск сертификатов и сами сертификаты.
Закрытый ключ Диффи-Хеллмана применяется при установлении соединения (рукопожатия) и передаче открытого ключа шифрования информации.
Ключом 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 (не забывая про пользовательские права). Как сервер, так и каждый клиент должны будут иметь копии этих ключей.
Все действия выполняем в папке 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 [email protected]:/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-сервере, так и на его клиентах.
а) настройка конфигурационного файла 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 [email protected]
Проверка состояния службы OpenVPN: systemctl status [email protected]
После запуска служба OpenVPN создает виртуальный сетевой интерфейс tun0 (либо tap0, если он был выбран в конфигурационном файле). Чтобы убедиться, что он есть и работает, нужно выполнить команду: ip a show tun0
в) настройка сети OpenVPN-сервера
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Некоторые каталоги и файлы OpenVPN и их значение:
/etc/openvpn/ - содержит ключи, лог-файл, конфигурационный файл.
/run/openvpn-server/ - исполняемые файлы OpenVPN-сервера.
/run/openvpn-client/ - исполняемые файлы OpenVPN-клиента.
/usr/lib/systemd/system/[email protected] - служба OpenVPN-сервера.
/usr/lib/systemd/system/[email protected] - служба OpenVPN-клиента.
/etc/share/doc/openvpn/ - документация, образцы скриптов, конфигурационных файлов.
1. Забегая вперед, скажу, что после настройки OpenVPN-сервера и настройки первого клиента возникла проблема с доступом в Интернет через VPN. Страницы просто не открывались и все. При этом локально VPN работал. Это весьма распространенная проблема и в Интернете много способов ее решения. Однако в моем случае все оказалось банальнее. Дело в том, что при определенном типе шрифта и его размера цифра "1" и маленькая латинская буква "l" выглядят абсолютно одинаково. И правила, которые я добавил в файерволлы, содержали неправильное название сетевого интерфейса: вместо цифры “1" я набирал букву “l", что в корне было неверно. А правила эти как раз ответственны за передачу трафика с OpenVPN наружу, в Интернет. Они просто не работали. Заново добавив правила, но с корректным название интерфейса, я получил доступ в Интернет на клиенте.
2. Ошибка при запуске OpenVPN-сервиса (systemctl start [email protected]): "Job for [email protected] failed because the control process exited with error code. See "systemctl status [email protected]" 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
На клиенте с ОС 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 необходимо скачать соответствующий клиент и установить его. Настройка проще простого. Аналогичным образом готовятся ключи и конфигурационный файл (подойдет файл от Windows OpenVPN-клиента), который необходимо указать в программе и который будет запрошен ею после первого запуска. Как ключи, так и конфигурационный файла можно скопировать в папку keys (хоть на внутреннюю память смартфона, хоть на его SD-карту). Конфигурационных файлов может быть несколько.
1. На одном из клиентов под Windows 7 у меня возникла ошибка, связанная с установкой TAP драйвера (у драйвера отсутствует цифровая подпись). Помогла установка другого TAP-драйвера, который я скачал с официального сайта.
sshd_config >>>
ID материала: 12487 / Дата публикации: 08.04.2021 / Просмотров: 940
ssh >>>
ID материала: 12486 / Дата публикации: 08.04.2020 / Просмотров: 556
Выбор нестандартного порта для SSH-сервера >>>
ID материала: 12485 / Дата публикации: 10.05.2021 / Просмотров: 1394
Корзина не предназначена для покупки товаров, поскольку сайт не занимается продажами.
Функция корзины заключается всборе компьютерных комплектующих в собственную базу (требуется регистрация на сайте) и сравнении их между собой.
Сбор компьютерных комплектующих в собственную базу: Эта фанкция необходима для виртуальной сборки компьютера. Требуется регистрация на сайте.
Сравнение комплектующих: Можно сравнить только комплектующие следующих групп: 1. Жёсткие диски. 2. Твердотельные диски. 3. Оперативная память. 4. Видеокарты. 5. Центральные процессоры. 6. Материнские платы.