Easy-RSA 3 Quickstart README
This is a quickstart guide to using Easy-RSA version 3. Detailed help on usage
and specific commands can be found by running ./easyrsa -h. Additional
documentation can be found in the doc/ directory.
If you’re upgrading from the Easy-RSA 2.x series, there are Upgrade-Notes
available, also under the doc/ path.
Setup and signing the first request
Here is a quick run-though of what needs to happen to start a new PKI and sign
your first entity certificate:
-
Choose a system to act as your CA and create a new PKI and CA:
./easyrsa init-pki ./easyrsa build-ca
-
On the system that is requesting a certificate, init its own PKI and generate
a keypair/request. Note that init-pki is used only when this is done on a
separate system (or at least a separate PKI dir.) This is the recommended
procedure. If you are not using this recommended procedure, skip the next
import-req step../easyrsa init-pki ./easyrsa gen-req EntityName
-
Transport the request (.req file) to the CA system and import it. The name
given here is arbitrary and only used to name the request file../easyrsa import-req /tmp/path/to/import.req EntityName
-
Sign the request as the correct type. This example uses a client type:
./easyrsa sign-req client EntityName
-
Transport the newly signed certificate to the requesting entity. This entity
may also need the CA cert (ca.crt) unless it had a prior copy. -
The entity now has its own keypair, signed cert, and the CA.
Signing subsequent requests
Follow steps 2-6 above to generate subsequent keypairs and have the CA return
signed certificates.
Revoking certs and creating CRLs
This is a CA-specific task.
To permanently revoke an issued certificate, provide the short name used during
import:
./easyrsa revoke EntityName
To create an updated CRL that contains all revoked certs up to that point:
After generation, the CRL will need to be sent to systems that reference it.
Generating Diffie-Hellman (DH) params
After initializing a PKI, any entity can create DH params that needs them. This
is normally only used by a TLS server. While the CA PKI can generate this, it
makes more sense to do it on the server itself to avoid the need to send the
files to another system after generation.
DH params can be generated with:
Showing details of requests or certs
To show the details of a request or certificate by referencing the short
EntityName, use one of the following commands. It is an error to call these
without a matching file.
./easyrsa show-req EntityName
./easyrsa show-cert EntityName
Changing private key passphrases
RSA and EC private keys can be re-encrypted so a new passphrase can be supplied
with one of the following commands depending on the key type:
./easyrsa set-rsa-pass EntityName
./easyrsa set-ec-pass EntityName
Optionally, the passphrase can be removed completely with the ‘nopass’ flag.
Consult the command help for details.
OpenVPN — популярная технология для создания защищенных частных сетей (VPN), использующих аутентификацию и шифрование на основе протокола SSL/TLS. Для упрощения процедуры создания необходимых ключей и сертификатов традиционно используется утилита Easy-RSA, которая позволяет легко управлять локальным центром сертификации (CA) инфраструктуры открытых ключей (PKI). Сегодня мы поговорим о работе с новой версией утилиты Easy-RSA 3, которая серьезно отличается по синтаксису от используемой ранее Easy-RSA 2 и входит в состав новых дистрибутивов Debian и Ubuntu.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
На первый взгляд может показаться, что разработчики Easy-RSA серьезно все поменяли, но это не так, если вы понимаете, как устроена инфраструктура открытых ключей, то вам будет ясно, что работа утилиты изменилась только по форме, но не по сути. Она стала более целостной и простой в использовании, но в тоже время приобрела ряд новых функции, свойственных более «взрослым» продуктам. В настоящий момент Easy-RSA 3 входит в состав Debian 10, а также Ubuntu 18.10 и новее.
Установка Easy-RSA и создание центра сертификации
Для установки Easy-RSA 3 выполним:
apt install easy-rsa
После чего убедимся, что установлена именно третья версия утилиты:
dpkg -l easy-rsa
Обычно затем директорию с easy-rsa копируют в конфигурационную папку OpenVPN, но на наш взгляд CA лучше располагать отдельно, поэтому мы скопируем директорию просто в /etc, однако это ни не что не влияет, и вы можете поступить по своему разумению.
cp -r /usr/share/easy-rsa /etc
Затем изменим рабочую директорию на скопированную нами папку:
cd /etc/easy-rsa
Если вас устраивают параметры по умолчанию, то следующий шаг можно пропустить и сразу перейти к созданию инфраструктуры PKI. Однако мы советуем потратить немного времени на тонкую настройку вашего CA.
Прежде всего скопируем шаблон файла настроек:
cp vars.example vars
и откроем файл vars на редактирование. Строки вида #set_var содержат значения по умолчанию, для их именения строку нужно раскомментировать и указать собственное значение. Начнем с опции EASYRSA_DN, она предусматривает два режима: упрощенный cn_only, при котором сертификат содержит только CN (имя того, кому выдан сертификат) и традиционный org, при котором заполняются все реквизиты организации. Для OpenVPN можно использовать любой режим. Мы установим традиционный:
set_var EASYRSA_DN "org"
После чего раскомментируйте и заполните блок ниже своими данными (в примере указаны наши):
set.var EASYRSA_REQ_COUNTRY "RU"
set.var EASYRSA_REQ_PROVINCE "31"
set.var EASYRSA_REQ_CITY "BELGOROD"
set.var EASYRSA_REQ_ORG "Interface LLC"
set_var EASYRSA_REQ_EMAIL "admin@example.org"
set.var EASYRSA_REQ_OU "IT"
Заметьте, что если вы оставили cn_only, то редактировать вышеуказанные опции не имеет смысла.
Параметр EASYRSA_KEY_SIZE указывает размер ключа, на сегодняшний день безопасным считается размер начиная с 2048, если вы ставите на первое место безопасность, то можете увеличить его до 3072 или 4096. Если криптографическая стойкость не играет роли, например, туннель будет использован для доступа в интернет и предполагается использование слабых устройств, то можно уменьшить размер ключа до 1024.
Опции EASYRSA_CA_EXPIRE и EASYRSA_CERT_EXPIRE задают срок действия корневого сертификата CA и сертификатов пользователей (сервера и клиентов), их значения установлены в днях как 3650 (10 лет) и 1080 (5 лет), опция EASYRSA_CERT_RENEW задает количество дней до истечения сертификата, когда становится доступным его продление, по умолчанию это 30 дней. При необходимости вы можете изменить эти значения.
Сохраним внесенные изменения. Теперь инициализируем наш CA и выпустим корневую пару ключей. Обратите внимание, что данные действия следует выполнять единожды, повторное выполнение указанных команд уничтожит существующий CA и потребует повторного создания всех ключей и сертификатов.
./easyrsa init-pki
Данная команда инициализирует новую структуру центра сертификации с очисткой всех данных. После чего создадим файл для генерации случайных данных:
touch pki/.rnd
и активируем наш CA:
./easyrsa build-ca
При создании закрытого ключа центра сертификации вам будет предложено ввести пароль, не следует пренебрегать этой возможностью, так как закрытый ключ — основа вашей инфраструктуры открытых ключей и его компрометация приведет к компрометации всех выпущенных ключей и сертификатов. Также не забудьте указать собственное наименование центра сертификации в опции Common Name.
После выполнения этих команд будет выполнено создание структуры директорий CA, публичный сертификат центра сертификации ca.crt вы сможете найти в директории pki, а закрытый ключ ca.key в pki/private. Закрытый ключ является секретным и не при каких обстоятельствах не должен покидать свое расположение и тем более не должен передаваться по открытым каналам связи, доступ третьих лиц к закрытому ключу также следует ограничить.
Также не забудем сформировать файл параметров Диффи-Хеллмана dh.pem, он также будет расположен в директории pki:
./easyrsa gen-dh
На этом создание центра сертификации (CA) можно считать законченным.
Создание ключа и сертификата для сервера
В Easy-RSA 3 все «по-взрослому», сначала нам нужно создать запрос на сертификат:
./easyrsa gen-req ovpn-server nopass
где ovpn-server — имя вашего сервера, nopass означает, что закрытый ключ следует создать без пароля. При выполнении данной команды будет создан запрос на сертификат и сгенерирован закрытый ключ сервера ovpn-server.key, который будет располагаться в pki/private. Закрытый ключ является секретным и не должен передаваться по открытым каналам связи и доступ к нему также должен быть ограничен.
Для выпуска сертификата выполните:
./easyrsa sign-req server ovpn-server
Опция server обозначает выпуск сертификата для сервера. Для подтверждения выпуска вам нужно будет явно выразить свое согласие указав yes в ответ на соответствующий запрос, любый иные действия приведут к отмене действия. Затем потребуется ввести пароль закрытого ключа центра сертификации.
Выпущенные сертификаты будут располагаться в pki/issued.
Теперь скопируем необходимые сертификаты и ключи в конфигурационную директорию OpenVPN, предварительно создав там папку keys:
mkdir /etc/openvpn/keys
cp pki/ca.crt pki/dh.pem /etc/openvpn/keys
cp pki/private/ovpn-server.key pki/issued/ovpn-server.crt /etc/openvpn/keys
Дальнейшая настройка OpenVPN-сервера ничем не отличается от описанной нами ранее, и вы можете воспользоваться любой нашей инструкцией, смотрите блок Дополнительные материалы внизу статьи.
Создание ключа и сертификата для клиента
Точно также начнем с формирования запроса на сертификат:
./easyrsa gen-req ivanov_ivan nopass
где ivanov_ivan — имя клиента, а nopass предписывает создать закрытый ключ без пароля. Мы рекомендуем давать клиентам осмысленные имена, чтобы потом не пришлось долго гадать, кто именно скрывается под псевдонимом типа client123.
На основании запроса выпустим сертификат:
./easyrsa sign-req client ivanov_ivan
В данном случае используется опция client для указания формирования клиентского сертификата, вам также потребуется явно подтвердить действие и указать пароль от закрытого ключа CA.
Для передачи на клиент вам потребуется скопировать в доступную пользователю директорию закрытый ключ, сертификат клиента и сертификат CA. В нашем случае файлы будут скопированы в домашнюю директорию пользователя andrey.
cp pki/ca.crt pki/private/ivanov_ivan.key pki/issued/ivanov_ivan.crt /home/andrey
Затем изменим их владельца, чтобы файлы можно было скопировать, подключившись к системе с правами пользователя:
chown andrey:andrey ca.crt ivanov_ivan.key ivanov_ivan.crt
Закрытый ключ пользователя также является секретным и следует исключить его передачу по открытым каналам.
Списки отзыва и отзыв сертификатов
Если вы используете OpenVPN для организации связи между офисами или доступа в интернет, то вряд ли у вас возникнет потребность в отзыве сертификата. Другое дело, если вы предоставляете удаленный доступ к корпоративной сети с домашних ПК сотрудников, подрядчикам или аутсорсерам. Здесь может возникнуть масса ситуаций, когда доступ отдельных лиц следует прекратить: сотрудник уволился, истек срок договора с подрядчиком, сменили аутсорсера и т.д. и т.п.
Прежде всего создадим список отозванных сертификатов (CRL):
./easyrsa gen-crl
Затем создадим символьную ссылку на список в директории с ключами OpenVPN:
ln -s /etc/easy-rsa/pki/crl.pem /etc/openvpn/keys/
И внесем в конфигурационный файл сервера OpenVPN следующую строку:
crl-verify keys/crl.pem
После чего сервер OpenVPN потребуется перезапустить.
Теперь отзовем какой-либо сертификат:
./easyrsa revoke horns_and_hooves
Где horns_and_hooves — имя сертификата клиента (СN), после отзыва следует повторно опубликовать список отозванных сертификатов:
./easyrsa gen-crl
Посмотреть список сертификатов можно командой:
cat pki/index.txt
Действующие сертификаты имеют статус V в начале строки, отозванные — R.
Как видим, работа с Easy-RSA 3 не представляет каких-либо сложностей и надеемся, что данная статья будет вам полезна.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном курсе по администрированию MikroTik. Автор курса, сертифицированный тренер MikroTik Дмитрий Скоромнов, лично проверяет лабораторные работы и контролирует прогресс каждого своего студента. В три раза больше информации, чем в вендорской программе MTCNA, более 20 часов практики и доступ навсегда.
Обновлено: 04.01.2023
Опубликовано: 25.01.2017
OpenVPN позволяет настроить VPN-сервер как на платформе Windows Server, так и версии для рабочего компьютера (Windows 10, 8, 7).
Установка сервера
Создание сертификатов
Настройка OpenVPN
Настройка клиента
Доступ к локальной сети
Решение проблем
Установка OpenVPN Server
Переходим на официальный сайт OpenVPN и скачиваем последнюю версию программы для соответствующей версии Windows:
Запускаем скачанный файл — нажимаем Next — I Agree — и выставляем галочку EasyRSA 2/3 Certificate Management Scripts (нужен для возможности сгенерировать сертификаты):
* интерфейсы для старой версии OpenVPN и новой немного различаются. Нам нужно выбрать для установки все пункты.
… снова Next и Install — начнется установка. В процессе мастер может выдать запрос на подтверждение установки виртуального сетевого адаптера — соглашаемся (Install/Установить).
После завершения нажимаем Next — снимаем галочку Show Readme — Finish.
Создание сертификатов
Новая версия OpenVPN позволяет создавать сертификаты на основе Easy RSA 3, старая работает на базе 2-й версии. Наши действия будут различаться в зависимости от данной версии. Рассмотрим процесс формирования сертификата с использованием как RSA3, так и RSA2.
а) Создание сертификатов с RSA 3
1. Переходим в папку установки OpenVPN (по умолчанию, C:Program FilesOpenVPN) и создаем каталог ssl.
2. После переходим в папку C:Program FilesOpenVPNeasy-rsa, переименовываем файл vars.example в vars, открываем его на редактирование и правим одну строку:
set_var EASYRSA_TEMP_DIR «$EASYRSA_PKI/temp»
* мы снимаем комментарий и добавляем temp в конце $EASYRSA_PKI. Если это не сделать, то при попытке сформировать корневого сертификата мы получим ошибку Failed create CA private key.
3. Запускаем командную строку от имени администратора:
4. Переходим в каталог easy-rsa:
cd %ProgramFiles%OpenVPNeasy-rsa
5. Запускаем команду:
EasyRSA-Start.bat
Мы окажемся в среде EasyRSA Shell.
6. Инициализируем PKI:
./easyrsa init-pki
Если система вернет ошибку, выходим из оболочки EasyRSA Shell:
exit
И заходим снова:
EasyRSA-Start.bat
Мы должны увидеть:
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: C:/Program Files/OpenVPN/easy-rsa/pki
7. Генерируем корневой сертификат (CA):
./easyrsa build-ca
… после ввода Enter обязательно задаем пароль дважды. На запрос ввести Common Name можно просто нажать ввод или написать свое имя:
Common Name (eg: your user, host, or server name) [Easy-RSA CA]:
8. Создаем ключ Диффи-Хеллмана:
./easyrsa gen-dh
9. Для создания сертификата сервера необходимо сначала создать файл запроса:
./easyrsa gen-req cert nopass
* на запрос ввода Common Name просто вводим Enter.
… и на его основе — сам сертификат:
./easyrsa sign-req server cert
После ввода команды подтверждаем правильность данных, введя yes:
Confirm request details: yes
… и вводим пароль, который указывали при создании корневого сертификата.
10. Сертификаты сервера готовы и находятся в каталоге pki. Переносим в C:Program FilesOpenVPNssl следующие файлы:
- ca.crt
- issued/cert.crt
- private/cert.key
- dh.pem
б) Создание сертификатов с RSA 2 (для старых версий OpenVPN)
1. Переходим в папку установки OpenVPN (по умолчанию, C:Program FilesOpenVPN) и создаем каталог ssl.
2. После переходим в папку C:Program FilesOpenVPNeasy-rsa, создаем файл vars.bat, открываем его на редактирование и приводим к следующему виду:
set «PATH=%PATH%;%ProgramFiles%OpenVPNbin»
set HOME=%ProgramFiles%OpenVPNeasy-rsa
set KEY_CONFIG=openssl-1.0.0.cnf
set KEY_DIR=keys
set KEY_SIZE=2048
set KEY_COUNTRY=RU
set KEY_PROVINCE=Sankt-Petersburg
set KEY_CITY=Sankt-Petersburg
set KEY_ORG=Organization
set KEY_EMAIL=master@dmosk.ru
set KEY_CN=DMOSK
set KEY_OU=DMOSK
set KEY_NAME=server.domain.ru
set PKCS11_MODULE_PATH=DMOSK
set PKCS11_PIN=12345678
* в каталоге easy-rsa уже есть файл vars.bat.sample — можно переименовать и использовать его.
** значение HOME не меняем, если оставили путь установки программы по умолчанию; KEY_DIR — каталог, куда будут генерироваться сертификаты; KEY_CONFIG может быть разным — его лучше посмотреть в файле vars.bat.sample или по названию соответствующего файла в папке easy-rsa; KEY_NAME желательно, чтобы соответствовал полному имени VPN-сервера; остальные опции можно заполнить произвольно.
3. Запускаем командную строку от имени администратора:
4. Переходим в каталог easy-rsa:
cd %ProgramFiles%OpenVPNeasy-rsa
4. Запускаем vars.bat:
vars.bat
5. Чистим каталоги от устаревшей информации:
clean-all.bat
* данная команда выполняется один раз, когда на сервере нет информации по ранее созданным сертификатам.
6. Снова запускаем vars.bat (после clean переопределяются некоторые переменные):
vars.bat
Переходим к созданию ключей.
7. Генерируем последовательность центра сертификации:
build-ca.bat
На все запросы нажимаем Enter.
8. Запускаем build-dh.bat (сертификат с использованием алгоритма Диффи-Хеллмана):
openssl dhparam -out keysdh.pem 2048
* команда может выполняться долго — это нормально.
9. Генерируем сертификат для сервера:
build-key-server.bat cert
* где cert — имя сертификата; на все запросы нажимаем Enter. В конце подтверждаем два раза корректность информации вводом y.
10. После переносим из папки C:Program FilesOpenVPNeasy-rsakeys в C:Program FilesOpenVPNssl следующие файлы:
- ca.crt
- cert.crt
- cert.key
- dh.pem
Настройка сервера
Переходим в папку C:Program FilesOpenVPNconfig-auto (или для старой версии C:Program FilesOpenVPNconfig) и создаем файл server.ovpn. Открываем его на редактирование и приводим к следующему виду:
port 443
proto udp
dev tun
dev-node «VPN Server»
dh «C:\Program Files\OpenVPN\ssl\dh.pem»
ca «C:\Program Files\OpenVPN\ssl\ca.crt»
cert «C:\Program Files\OpenVPN\ssl\cert.crt»
key «C:\Program Files\OpenVPN\ssl\cert.key»
server 172.16.10.0 255.255.255.0
max-clients 32
keepalive 10 120
client-to-client
compress
fast-io
cipher AES-256-GCM
persist-key
persist-tun
status «C:\Program Files\OpenVPN\log\status.log»
log «C:\Program Files\OpenVPN\log\openvpn.log»
verb 4
mute 20
* где port — сетевой порт (443 позволит избежать проблем при использовании Интернета в общественных местах, но может быть любым из свободных, например 1194, занятые порты в Windows можно посмотреть командой netstat -a); dev-node — название сетевого интерфейса; server — подсеть, в которой будут работать как сам сервер, так и подключенные к нему клиенты.
** так как в некоторых путях есть пробелы, параметр заносится в кавычках.
*** при использовании другого порта необходимо проверить, что он открыт в брандмауэре или на время тестирования отключить его.
В сетевых подключениях Windows открываем управление адаптерами — TAP-адаптер переименовываем в «VPN Server» (как у нас указано в конфигурационном файле, разделе dev-node):
Теперь открываем службы Windows и находим «OpenVpnService». Открываем ее, настраиваем на автозапуск и включаем:
Если служба в запущенном состоянии, то перезапускаем ее.
Ранее переименованный сетевой интерфейс должен включиться:
VPN-сервер работает. Проверьте, что сетевой адаптер VPN Server получил IP 172.16.10.1. Если он получает что-то, на подобие, 169.254…, выключаем сетевой адаптер — перезапускаем службу OpenVpnService и снова включаем сетевой адаптер.
Если в нашей системе включен брандмауэр, необходимо открыть порт для OpenVPN. Это быстрее всего сделать из командной строки — открываем ее от администратора и вводим:
netsh advfirewall firewall add rule name=»ALLOW OpenVPN» dir=in action=allow protocol=UDP localport=443
* где 443 — наш порт, который мы решили задействовать под OpenVPN; UDP — протокол, который мы настроили в конфигурационном файле сервера.
Настройка клиента
На сервере
На сервере генерируем сертификат для клиента. Для этого сначала чистим файл index.txt в папке C:Program FilesOpenVPNeasy-rsakeys.
Затем запускаем командную строку от имени администратора:
Переходим в каталог easy-rsa:
cd %ProgramFiles%OpenVPNeasy-rsa
Далее наши действия зависят от версии RSA.
а) Создание сертификатов с RSA 3
Запускаем команду:
EasyRSA-Start.bat
Мы окажемся в среде EasyRSA Shell.
Создаем клиентский сертификат:
./easyrsa gen-req client1 nopass
./easyrsa sign-req client client1
Мы должны увидеть запрос на подтверждение намерения выпустить сертификат — вводим yes:
Confirm request details: yes
* в данном примере будет создан сертификат для client1.
После вводим пароль, который указывали при создании корневого сертификата.
Теперь из папки pki копируем файлы:
- issued/client1.crt
- private/client1.key
- ca.crt
- dh.pem
… и переносим их на клиентский компьютер.
б) Создание сертификатов с RSA 2 (для очень старых версий OpenVPN)
Запускаем vars.bat:
vars.bat
И генерируем сертификат первого пользователя:
build-key.bat client1
* на все запросы наживаем Enter, кроме Common Name — в данном поле вводим имя клиента (в нашем случае, просто client1). В конце подтверждаем введенную информацию — y.
** На каждого клиента нужно сгенерировать свой сертификат, в противном случае, им будет присваиваться один и тот же IP-адрес, что будет приводить к конфликту.
Получиться, что-то на подобие:
Country Name (2 letter code) [RU]:
State or Province Name (full name) [Sankt-Petersburg]:
Locality Name (eg, city) [Sankt-Petersburg]:
Organization Name (eg, company) [Organization]:
Organizational Unit Name (eg, section) [DMOSK]:
Common Name (eg, your name or your server’s hostname) [DMOSK]:client1
Name [server.domain.ru]:
Email Address [master@dmosk.ru]:
По умолчанию, для Common Name будет подставляться значение из vars.bat — но с ним сертификат не будет создаваться. Необходимо при создании каждого ключа подставлять значение, равное имени сертификата. Например, как выше — подставлено client1.
Теперь из папки keys копируем файлы:
- client1.crt
- client1.key
- ca.crt
- dh.pem
… и переносим их на клиентский компьютер.
На клиенте
Заходим на официальную страницу загрузки openvpn и скачиваем клиента для Windows:
* по сути, это тот же файл, который скачивался для сервера.
Запускаем скачанный файл и устанавливаем программу, нажимая «Далее».
Переходим в папку C:Program FilesOpenVPNconfig. И копируем в нее сертификаты, которые перенесли с сервера.
Теперь открываем блокнот от имени администратора и вставляем следующие строки:
client
resolv-retry infinite
nobind
remote 192.168.0.15 443
proto udp
dev tun
compress
fast-io
cipher AES-256-GCM
ca ca.crt
cert client1.crt
key client1.key
dh dh.pem
float
keepalive 10 120
persist-key
persist-tun
verb 0
* где 192.168.0.15 443 — IP-адрес OpenVPN-сервера и порт, на котором он принимает запросы. Для боевой среды это будет внешний адрес.
Сохраняем файл с именем config.ovpn в папке C:Program FilesOpenVPNconfig.
Запускаем с рабочего стола программу «OpenVPN GUI» от имени администратора (это важно).
Нажимаем правой кнопкой по появившемуся в трее значку и выбираем «Подключиться»:
Произойдет подключение и значок поменяет цвет с серого/желтого на зеленый.
Доступ к локальной сети
По инструкции выше мы сможем получить доступ только к серверу, на котором установлен OpenVPN. Для получения доступа ко всей внутренней сети, выполним следующие шаги.
1. Настройка реестра
Для включения IP маршрутизации в Windows необходимо в ветке реестра HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTcpipParameters найти параметр IPEnableRouter и задать ему значение 1. Это можно сделать в утилите редактирования реестра (regedit) или командой:
reg add «HKLMSYSTEMCurrentControlSetServicesTcpipParameters» /v IPEnableRouter /t REG_DWORD /d 1 /f
* командную строку необходимо запускать от администратора.
2. Настройка OpenVPN Server
В конфигурационный файл OpenVPN добавим:
push «route 172.16.10.0 255.255.255.0»
push «route 192.168.2.0 255.255.255.0»
* где 172.16.10.0 — VPN сеть; 192.168.2.0 — локальная сеть, в которую необходимо «попасть» пользователям openvpn.
При необходимости использовать DNS внутренней сети также добавим:
push «dhcp-option DNS 192.168.0.15»
push «dhcp-option DNS 192.168.0.16»
push «dhcp-option DOMAIN dmosk.local»
* где 192.168.0.15 и 192.168.0.16 — внутренние DNS-серверы; dmosk.local — домен, который будет добавляться к узлам, обращение к которым идет по неполному имени.
Если нам нужно, чтобы все запросы клиента (в том числе, Интернет) ходили через сервер OpenVPN, добавляем:
push «redirect-gateway def1»
* в таком случае, нам не обязательно добавлять push route, который мы использовали выше.
Перезагружаем службу OpenVpnService.
3. Разрешаем доступ к локальной сети
Заходим в управление сетевыми подключениями (Панель управленияСеть и ИнтернетСетевые подключения). Кликаем правой кнопкой мыши по адаптеру локальной сети — Свойства:
На вкладке Доступ ставим галочку Разрешить другим пользователям сети использовать подключение к Интернету данного компьютера:
… и сохраняем настройки.
Возможные проблемы
Большая часть проблем решается при помощи логов, которые находятся в папке C:Program FilesOpenVPNlog. Уровень детализации лога контролируется параметром verb в конфигурационном файле сервера или клиента.
Также возможны следующие часто возникающие проблемы:
- Проблема: клиент постоянно пытается подключиться к серверу, но соединения не происходит или подключение зависает.
Причина: сервер блокирует подключения по настроенному порту VPN (в нашем примере, 443).
Решение: на сервере необходимо добавить 443 порт в исключения брандмауэра или отключить последний.
- Проблема: при попытке подключиться к серверу выскакивает ошибка «Не удалось подключиться к config».
Причина: ошибка в настройках.
Решение: перепроверьте каждую строчку файла конфигурации. Проверьте наличие всех файлов, на которые ссылаетесь в настройках.
- Проблема: клиенты получают одинаковые IP-адреса.
Причина: подключение выполняется под одним и тем же пользователем.
Решение: сервер выдает одинаковые адреса одинаковым клиентам. Необходимо настроить авторизацию на сервере и выдать каждому клиенту индивидуальные настройки.
- Проблема: соединение происходит, но через несколько минут связь прерывается.
Причина: дублирование IP-адресов.
Решение: данная проблема описана выше (пункт 3).
Возможно, Вы это тоже захотите попробовать
- Настройка OpenVPN-сервера с аутентификацией через LDAP (Active Directory) на Ubuntu Server
- Установка и настройка OpenVPN на Linux CentOS 7
В роутерах серии RTU есть возможность использования защищенного соединения через частную виртуальную сеть, под названием OpenVPN
Процесс настройки и конфигурирования данного пакета для рядового пользователя может сопровождаться достаточно большими трудностями из-за отсутствия необходимых знаний.
Практически всю часть конфигурирования можно произвести через WEB интерфейс, но некоторые элементы все же придется произвести через консоль!
Что такое OpenVPN и для чего он необходим можно ознакомиться в статье: OpenVPN
В данной статье мы ознакомимся с подготовительной частью, это генерация сертификатов и ключей шифрования для защиты нашего канала передачи.
1. Генерация сертификатов и ключей на Windows
Для генерации сертификатов и ключей шифрования на ОС Windows необходимо установить само приложение OpenVPN.
Скачать последнюю версию OpenVPN для ОС Windows можно по ссылке: https://openvpn.net/community-downloads/.
После скачивания и установки в указанную Вами папку в ней будет список файлов, по умолчанию OpenVPN устанавливается в директорию C:Program FilesOpenVPN.
Для генерации ключей будем использовать easy-rsa. Необходимо запустить командную строку от имени администратора и перейти в директорию с папкой easy-rsa. В примере используем команду для перехода в папку по умолчанию, у Вас данный путь может отличаться.
cd C:Program FilesOpenVPNeasy-rsa
1.1 Запускаем файл init-config.bat
C:Program FilesOpenVPNeasy-rsa>init-config.bat
C:Program FilesOpenVPNeasy-rsa>copy vars.bat.sample vars.bat
Скопировано файлов: 1.
В папке появится файл vars.bat, открываем его текстовым редактором, нас интересуют строчки в самом конце, их нужно заполнить.
Мы подставили свои параметры, у Вас данные параметры будут другие.
set KEY_COUNTRY=RU
set KEY_PROVINCE=Moscow
set KEY_CITY=Moscow
set KEY_ORG=TELEOFIS
set KEY_EMAIL=support@teleofis.ru
set KEY_CN=server
set KEY_NAME=server
set KEY_OU=server
set PKCS11_MODULE_PATH=server
set PKCS11_PIN=12345
Там где написано server, не трогаем. Сохраняем файл.
1.2 Редактируем файл openssl-1.0.0.cnf
От имени администратора открываем блокнот, нам необходимо отредактировать файл openssl-1.0.0.cnf. По умолчанию данный файл находится в директории C:Program FilesOpenVPNeasy-rsa, у Вас данный путь также может отличаться.
Нам необходимо найти строчку:
default_days = 365
Далее необходимо заменить значение 365 на 3650, в более новых версиях OpenVPN значение 3650 может быть уже установлено по умолчанию.
1.3 Генерируем ключи и сертификаты
Подаем последовательно в консоль команды:
vars
clean-all
В ответ должно прийти
Скопировано файлов: 1.
Скопировано файлов: 1.
Если, мы это видим, значит все хорошо, продолжаем…
1.4 Создаем центр сертификации CA
Подаем команду:
build-ca
На данном моменте в некоторых случаях может возникнуть ошибка:
C:Program FilesOpenVP easy-rsa>build-ca "openssl" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
Для устранения ошибки открываем файл vars.bat от имени администратора и ищем строку
rem set "PATH=%PATH%;C:Program FilesOpenVPNbin"
Удаляем rem, после чего данная строка должна принять вид:
set "PATH=%PATH%;C:Program FilesOpenVPNbin"
Сохраняем, далее снова подаем последовательно команды
vars
clean-all
В ответ должно прийти
Скопировано файлов: 1.
Скопировано файлов: 1.
Подаем команду:
build-ca
При генерации основного сертификата в консоли будут отображаться вопросы. Просто нажимаем Enter, т.к. все эти параметры мы ввели в файле vars.bat
Нажимаем Enter до тех пор, пока не отобразиться строка приглашения
C:Program FilesOpenVPNeasy-rsa
1.5 Создаем ключ Диффи-Хелмана
Данный шаг не является обязательным, ключ Диффи-Хелмана необходим для реализации одноименного протокола
позволяющего использовать небезопасный канал для получения общего секретного ключа. Этот ключ будет в дальнейшем использоваться для защищенного обмена данными с помощью алгоритмов симметричного шифрования.
В применении к OpenVPN файл Диффи-Хелмана нужен для обеспечения защиты трафика от расшифровки, если ключи были похищены. Здесь имеется в виду тот трафик, который был записан и сохранен еще до похищения ключей.
Файл Диффи-Хелмана создается на сервере OpenVPN.
Для создания ключа необходимо подать команду:
build-dh
1.6 Создаем сертификат и ключ сервера
Подаем команду:
build-key-server server
На вопросы нажимаем Enter, но не торопимся, в самом конце будет задано два вопроса
Sign the certificate?
1 out of 1 certificate requests certified, commit?
На оба эти вопроса отвечаем Y
1.7 Создаем сертификат и ключ клиента
Подаем команду:
build-key client
Также не торопимся с ответами, как только увидим строку «Common Name (eg, your name or your server’s hostname)» нужно ответить client.
В самом конце также будут два вопроса, отвечаем также Y
Причем: для каждого клиента, нужно будет создать отдельные ключи и называть их client1, client2 или как-то иначе, все зависит от Вашего воображения.
Например:
build-key client1
build-key office1
На этом создание файлов сертификатов и ключей завершено.
Все файлы будут лежать в папке C:Program FilesOpenVPNeasy-rsakeys
2. Генерация сертификатов и ключей на Linux
Генерация сертификатов и ключей будет осуществляться на ОС Ubuntu Linux 20.04.
Для других систем на базе Linux, некоторые команды могут отличаться!
Первоначально необходимо обновить все пакеты ОС Linux, подаем в консоль команду:
sudo apt-get update
sudo apt-get upgrade
Установим пакет zip, если он не был установлен ранее:
sudo apt install zip
2.1 Установка утилиты Easy-RSA
Создадим нового пользователя ca и переведем его в домашний каталог:
sudo adduser ca
В ответ система выведет информацию и попросит ввести пароль:
Adding user 'ca' ... Adding new group 'ca' (1002) ... Adding new user 'ca' (1002) wuth group 'ca' ... Creating home directory '/home/ca' ... Coping files from '/etc/skel/' ... New password:
Вводим пароль, затем еще раз его повторяем, если все хорошо, система выведет следующую информацию:
passwd: password updated successfully Changing the user information for ca Enter the new value or press ENTER for the default Full name []: Room number []: Work phone []: Home Phone []: Other []: Is the information correct? [Y/n]
Нажимаем Y, пользователь успешно создан.
Делаем loging под пользователя ca:
su ca
cd
Далее необходимо загрузить дистрибутив программы утилитой wget:
$ wget https://github.com/OpenVPN/easy-rsa/archive/master.zip
Распаковываем архив:
$ unzip master.zip
2.2 Создаем инфраструктуру публичных PKI, создание центра сертификации СА:
Создадим инфраструктуру публичных ключей (Public Key Infrastructure, PKI):
$ cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa init-pki
В ответ система оповестит, что PKI создан успешно:
init-pki complete; you may now create a CA or requests. Your newly created PKI dir is: /home/ca/easy-rsa-master/easyrsa3/pki
Далее создаем удостоверяющий центр сертификации:
$ ./easyrsa build-ca
В ответ система выдаст сообщение следующего вида:
Generating RSA private key, 2048 bit long modulus (2 primes) ..................................................................................+++++ ......................................................+++++ e is 65537 (0x010001) You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [Easy-RSA CA]:ca CA creation complete and you may now import and sign cert requests. Your new CA certificate file for publishing is at: /home/ca/easy-rsa-master/easyrsa3/pki/ca.crt
Пароль будет защищать приватный ключ центра сертификации. Этот пароль потребуется каждый раз, когда Вы будете подписывать сертификаты для серверов и клиентов OpenVPN.
В конечном итоге у нас создадутся в системе два файла, которые нам в дальнейшем пригодятся: ca.crt и ca.key. Данные файлы находятся в директориях:
/home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key /home/ca/easy-rsa-master/easyrsa3/pki/ca.crt
Файл ca.key является секретным, его нельзя передавать на другие узлы Вашей сети.
Файл ca.crt открытый, его необходимо передавать на узлы серверов и клиентов сети OpenVPN.
2.3 Создаем список отзывов сертификатов
Если сотрудник уволился из компании и у него есть доступ в сети VPN компании, нам необходимо закрыть этот доступ путем отзыва сертификата CRL. Для создания сертификата проделаем следующее:
cd /home/ca/easy-rsa-master/easyrsa3
$ ./easyrsa gen-crl
Система запросит пароль для доступа к закрытому ключу ca.key. Список отзыва сертификатов будет доступен в файле crl.pem:
/home/ca/easy-rsa-master/easyrsa3/pki/crl.pem
Данный сертификат передается OpenVPN серверу. Также в конфиге сервера должен быть прописан путь до crl.pem, как правило данное правило прописывается в server.conf.
crl-verify /usr/local/etc/openvpn/crl.pem
Для блокировки доступа пользователю, заблокируем ранее выданный сертификат, используя команду:
$ ./easyrsa revoke test
В таблице ниже описана структура каталога PKI:
Файл или каталог |
Описание |
ca.crt | Сертификат удостоверяющего центра, передается как на сервер OpenVPN, так и на клиент OpenVPN |
crl.pem | Список отзыва сертификатов CRL |
issued | Каталог с сертификатами, созданными центром сертификации СА |
private | Каталог с секретными ключами |
Reqs | Каталог запросов на сертификаты |
2.4 Установка OpenVPN, создание каталога для конфигурации клиентов
Процесс создания сервера OpenVPN включает в себя установку пакета OpenVPN, создание сертификатов и ключей, а также подготовку рабочей конфигурации.
Установим пакет OpenVPN:
$ sudo apt-get install openvpn
Первоначально необходимо подготовить файлы конфигурации openssl.cnf и server.conf. Первый файл определяет конфигурацию OpenSSL, второй файл определяет конфигурацию сервера OpenVPN.
В комплекте с утилитой Easy-RSA поставляется пример файла конфигурации OpenSSL. Если Вы делали все действия по данному гайду, данный файл будет находиться по пути:
/home/ca/easy-rsa-master/easyrsa3/openssl-1.0.cnf
По умолчанию файл openssl-1.0.cnf содержит в себе следующую информацию:
# For use with Easy-RSA 3.0+ and OpenSSL or LibreSSL #################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = $ENV::EASYRSA_PKI # Where everything is kept certs = $dir # Where the issued certs are kept crl_dir = $dir # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir/certs_by_serial # default place for new certs. certificate = $dir/ca.crt # The CA certificate serial = $dir/serial # The current serial number crl = $dir/crl.pem # The current CRL private_key = $dir/private/ca.key # The private key RANDFILE = $dir/.rand # private random number file
Чтобы запуск сервера OpenVPN прошел успешно, необходимо создать каталоги, в которых будут храниться сертификаты и ключи для сервера и клиентов OpenVPN:
Создадим каталог для конфигурации клиентов:
$ sudo mkdir /etc/openvpn/ccd
2.5 Подготовка сертификатов и ключей для сервера OpenVPN
Для организации OpenVPN нам потребуются файлы, перечисленные в таблице ниже:
Файл | Описание |
dh.pem | Ключ Диффи-Хелмана, используется для защиты трафика от расшифровки, необходимо загружать как на клиент, так и на сервер (опционально) |
ca.crt | Сертификат удостоверяющего центра CA, необходимо загружать на сервер и клиент OpenVPN |
server.crt | Сертификат сервера OpenVPN, необходимо загружать на сервер OpenVPN |
server.key | Приватный ключ сервера, секретный, необходимо загружать на сервер OpenVPN |
crl.pem | Cписок отзыва сертификатов CRL, необходимо загружать на сервер (опционально) |
ta.key | Ключ HMAC для дополнительной защиты от DoS-атак и флуда (опционально) |
client.crt | Сертификат клиента OpenVPN, необходимо загружать на клиент OpenVPN |
client.key | Приватный ключ клиента, секретный, необходимо загружать на клиента OpenVPN |
Так как центр сертификации мы уже сгенерировали, на следующем этапе сгенерируем сертификат и приватный ключ для сервера OpenVPN.
$ cd /home/ca/easy-rsa-master/easy-rsa3/
$ ./easyrsa gen-req server
В процессе создания, система запросит пароль, а также имя Common Name для сервера OpenVPN:
Generating a RSA private key .+++++ .......+++++ writing new private key to '/home/ca/easy-rsa-master/easyrsa3/pki/easy-rsa-2258.QFUIV0/tmp.WadIoG' Enter PEM pass phrase: Verifying - Enter PEM pass phrase: ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [server]:server Keypair and certificate request completed. Your files are: req: /home/ca/easy-rsa-master/easyrsa3/pki/reqs/server.req key: /home/ca/easy-rsa-master/easyrsa3/pki/private/server.key
Если же Вы хотите создать данные файлы без защиты паролем, используем команды:
$ cd /home/ca/easy-rsa-master/easy-rsa3/
$ ./easyrsa gen-req server nopass
Таким образом, в системе создадутся два файла: server.req и server.key, первый из них является открытым, его необходимо будет в дальнейшем подписать удостоверяющим центром СА, второй является секретым, его необходимо хранить на сервере OpenVPN.
Следующим шагом необходимо подписать данный сертификат (server.req) на стороне удостоверяющего центра СА:
$ ./easyrsa sign-req server server
При создании сертификата система запросит пароль (если при формировании server.req сертификат создавался с паролем). Необходимо будет ответить на сообщение yes, после чего ввести пароль от сертификата server.req. После успешного создания сертификата, система также уведомит об этом.
You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a server certificate for 825 days: subject= commonName = server Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Using configuration from /home/ca/easy-rsa-master/easyrsa3/pki/easy-rsa-2714.b10rbG/tmp.y76kMH Enter pass phrase for /home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'server' Certificate is to be certified until Oct 19 13:09:57 2022 GMT (825 days) Write out database with 1 new entries Data Base Updated Certificate created at: /home/ca/easy-rsa-master/easyrsa3/pki/issued/server.crt
Отлично! Теперь необходимо загрузить на сервер OpenVPN сертификат server.crt, который был только что создан, а также ключ server.key.
По умолчанию и ключ находятся в следующих директориях:
/home/ca/easy-rsa-master/easyrsa3/pki/issued/server.crt /home/ca/easy-rsa-master/easyrsa3/pki/private/server.key
2.6 Подготовка сертификатов и ключей для клиента OpenVPN
Генерировать сертификат будем под пользователем ca:
su ca
cd /etc/home/ca/easy-rsa-master/easy-rsa3
./easyrsa gen-req client nopass
Если к защите данных предъявляются повышенные требования, сертификат можно создать с паролем:
./easyrsa gen-req client
Далее система попросит ввести Common Name, я назову данный сертификат client1, после генерации ключа система дополнительно оповестит нас об этом:
Generating a RSA private key ....................................................................+++++ ........................+++++ writing new private key to '/home/ca/easy-rsa-master/easyrsa3/pki/easy-rsa-2221.ChEcsT/tmp.gWTNPO' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Common Name (eg: your user, host, or server name) [client]:client1 Keypair and certificate request completed. Your files are: req: /home/ca/easy-rsa-master/easyrsa3/pki/reqs/client.req key: /home/ca/easy-rsa-master/easyrsa3/pki/private/client.key
Таким образом, в системе создадутся два файла: client.req и client.key, первый из них является открытым, его необходимо будет в дальнейшем подписать удостоверяющим центром СА, второй является секретым, его необходимо будет в дальнейшем загрузить на клиент OpenVPN.
Далее необходимо только что созданный сертификат client.req подписать в удостоверяющем центре СА:
./easyrsa sign-req client client
При создании сертификата система запросит пароль (если при формировании server.req сертификат создавался с паролем). Необходимо будет ответить на сообщение yes, после чего ввести пароль от сертификата client.req. После успешного создания сертификата, система также уведомит об этом.
You are about to sign the following certificate. Please check over the details shown below for accuracy. Note that this request has not been cryptographically verified. Please be sure it came from a trusted source or that you have verified the request checksum with the sender. Request subject, to be signed as a client certificate for 825 days: subject= commonName = client1 Type the word 'yes' to continue, or any other input to abort. Confirm request details: yes Using configuration from /home/ca/easy-rsa-master/easyrsa3/pki/easy-rsa-2951.3DJoCJ/tmp.AqABm4 Enter pass phrase for /home/ca/easy-rsa-master/easyrsa3/pki/private/ca.key: Check that the request matches the signature Signature ok The Subject's Distinguished Name is as follows commonName :ASN.1 12:'client1' Certificate is to be certified until Oct 20 07:26:18 2022 GMT (825 days) Write out database with 1 new entries Data Base Updated Certificate created at: /home/ca/easy-rsa-master/easyrsa3/pki/issued/client.crt
Отлично! Теперь необходимо загрузить на клиент OpenVPN сертификат client.crt, который был только что создан, а также ключ client.key.
По умолчанию и ключ находятся в следующих директориях:
/home/ca/easy-rsa-master/easyrsa3/pki/private/client.key
/home/ca/easy-rsa-master/easyrsa3/pki/issued/client.crt
2.7 Создаем ключ Диффи-Хелмана
Для генерации ключа Диффи-Хелмана будем использовать команду:
$ cd /home/ca/easy-rsa-master/easy-rsa3/
$ ./easyrsa gen-dh
Создание ключа Диффи-Хелмана может занять достаточно продолжительное время, по окончании данного процесса система оповестит об этом:
DH parameters of size 2048 created at /home/ca/easy-rsa-master/easyrsa3/pki/dh.pem
Данный ключ находится в директории:
/home/ca/easy-rsa-master/easyrsa3/pki/dh.pem
2.8 Создание статического ключа HMAC
Для создания ключа HMAC используется команда openvpn с опциями —genkey и —secret. Данный ключ необходимо создавать не от обычного пользователя, а от пользователя с правами администратора.
cd /etc/openvpn
su teleofis
Система попросит ввести пароль от админской учетки, после ввода пароля необходимо выдать себе права на владение:
sudo chown -R teleofis:teleofis .
openvpn —genkey —secret ta.key
Ключ сгенерирован, он будет находиться в директории:
/etc/openvpn/ta.key
На этом моменте создание сертификатов закончено, далее переходим к следующей статье:
OpenVPN режим мультиклиента: Часть 2 — Настройка RTU сервера (tun)
Сопутствующие статьи:
Как подключиться к роутеру RTU?
Описание WEB-интерфейса роутера RTU
Дополнительная информация:
Wiki на GitHub
Содержание
- Системное администрирование и мониторинг Linux/Windows серверов и видео CDN
- Статьи по настройке и администрированию Windows/Linux систем
- OpenVPN. Генерация PKI сертификатов
- 3. PKI схема
- 3.1 Подготовка корневого центра сертификации
- 3.2 Создание рутового CA сертификата
- 3.3 Создание серверного OpenVPN сертификата
- 3.4 Создание клиентских OpenVPN сертификатов
- 3.5 Список отозванных сертификатов
- Как создать pki с помощью easy-rsa?
- OpenVPN 2.5.1 сервер на Windows
- Установка OpenVPN Server
- Создание ключей и сертификатов
- Настройка OpenVPN сервера
- Запуск OpenVPN сервера
- Настройка firewall
- Настройка OpenVPN клиента на ПК Windows
- Настройка OpenVPN клиента на смартфоне Android
- Подробная инструкция по OpenVPN v2.3.8 на Windows server 2008R2
- Настройка сервера
- Настройка клиента
Системное администрирование и мониторинг Linux/Windows серверов и видео CDN
Статьи по настройке и администрированию Windows/Linux систем
OpenVPN. Генерация PKI сертификатов
Как настраивать OpenVPN сервер в режиме point-to-point и client/server мы научились в предыдущих статьях. Для point-to-point режима мы использовали shared key. В режиме client/server нам были нужны сертификаты и ключи для OpenVPN сервера и клиентов. В данной статье пойдет речь о генерации инфраструктуры публичных ключей (PKI) и сертификатов используя Easy-RSA утилиту.
3. PKI схема
Немного расскажу о PKI структуре (рисунок 3.1).
Рисунок 3.1 – Структура PKI
Во главе всего дерева сертификатов и ключей должен быть корневой центр сертификации (CA). К примеру, можно посмотреть в браузере информацию о цепочке SSL сертификатов googl-a.
Рисунок 3.2 – Цепочка сертификатов google
Здесь во главе дерева стоит GeoTrust Global центр сертификации (корневой). Далее идет промежуточный Google Internet Authority G2 сертификат и завершает цепочку клиентский (доменный) сертификат. OpenVPN PKI структура будет похожей. Во главе должен быть корневой центр сертификации (Root CA) с файлом отзывов цифровых сертификатов (CRL). На CA сервере будут генерироваться клиентские и серверные ключи. Приступаем к практике.
3.1 Подготовка корневого центра сертификации
Для начала нужно скачать Easy-RSA утилиту, которую мы будем использовать для генерации всей инфраструктуры ключей.
Теперь переходим в распакованную директорию и редактируем главный файл конфигурации, в котором будет информация о организации.
Все структура ключей будет находиться по пути «$PWD/corp«, куда нужно скопировать папку со всеми x509 типами сертификатов и openssl конфигурационный файл.
Далее нужно инициализировать PKI исходя из введенных данных для последующей генерации сертификатов.
3.2 Создание рутового CA сертификата
Проверяем информацию по сертификату
Теперь можно подписывать клиентские сертификаты, но перед этим нужно создать CRL для отзывов сертификатов.
Проверяем список отозванных сертификатов.
Как видим, мы еще не отозвали никаких сертификатов.
3.3 Создание серверного OpenVPN сертификата
Создаем серверный ключ подписанный CA ключем.
Смотрим информацию о ключе.
Теперь у нас есть ключ и сертификат для OpenVPN сервера: vpn-server.crt и vpn-server.key.
3.4 Создание клиентских OpenVPN сертификатов
У каждого клиентского сертификата есть Common Name(CN), которое используются OpenVPN для применения дополнительных клиентских настроек (CCD). Создаем первый клиентский ключ.
Теперь создадим еще два клиентских ключа.
Мы создали ключи и сертификаты для CA, OpenVPN сервера и клиентов.
3.5 Список отозванных сертификатов
Если кто-то потерял свой секретный ключ или сертификат, или же он был скомпрометирован – эго нужно отозвать. Это можно легко сделать используя easy-RSA.
После этих действий у нас обновиться CRL файл, который нужно прописать в OpenVPN конфигурации сервера (директива crl-verify).
Теперь смотрим какие у нас есть отозванные сертификаты.
Как видим, мы отозвали сертификат с Serial Number: 02, т.е. alex-it. Serial Number было видно, когда мы смотрели информацию по ключам используя openSSL. Вот и все.
Источник
Как создать pki с помощью easy-rsa?
Установил на федору openvpn:
sudo yum install openvpn
Установилась версия openvpn 2.3.14
В официальном HOWTO следующим шагом было создание PKI
для этого необходимо зайти в каталог easy-rsa, оторый
находится в /usr/share/doc/packages/openvpn или /usr/share/doc/openvpn, отредактирновать файл vars, и выполнить файл build-ca.
Но первый каталог не существует, а во втором нет того, чего надо:
Поиск по файловой системе чего-то с именами этих файлов, а также каталога easy-rsa ничего не дал.
Очемидным для меня решением проблемы было:
yum install easy-rsa
Успещно!
Появились 3 папки с таким содержимым:
В файле README.quickstart.md оказалась короткая, малоинформативная инструкция. Для большей информации предлагалось выполнить easyrsa help.
бинарник easyrsa я нашел в папке /usr/share/easy-rsa/3
НО запуск его с командой help предлагает запустить с командой help (WTF?)
easy-rsa можно не ставить, это просто набор скриптов. Возьмите их в репе OpenVPN https://github.com/OpenVPN/easy-rsa/archive/master.zip:
Затем
Перейти в каталог easyrsa3 и объявить для него переменные:
Инициализировать PKI (Public Key Infrastructure — Инфраструктура открытых ключей):
./easyrsa init-pki
Создать корневой сертификат. Обязательно ввести сложный пароль и Common Name сервера, например my vpn server:
./easyrsa build-ca
Создать ключи Диффи-Хелмана:
./easyrsa gen-dh
Создать запрос на сертификат для сервера OVPN. Обращаю внимание, что сертификат будет незапаролен (параметр nopass), иначе при каждом старте OpenVPN будет запрашивать этот пароль:
./easyrsa gen-req vpn-server nopass
Создать сам сертификат сервера OVPN:
./easyrsa sign-req server vpn-server
Скопировать полученные ключи в рабочий каталог openvpn:
Создать «HMAC firewall» для защиты от DoS аттак и флуда UDP порта:
Источник
OpenVPN 2.5.1 сервер на Windows
Вчера обнаружил, что на мой домашний сервер пытаются подобрать пароль к RDP. Спросил наших безопасников с работы, да, порт сканировали, но пароль подбирают не они. Надо что-то делать с этим, и я даже знаю что.
Ударим шифрованием по злобным брутфорсерам! Ставим OpenVPN 2.5.1 сервер на Windows Server 2016.
Установка OpenVPN Server
Скачиваем дистрибутив для установки OpenVPN:
Доступна версия OpenVPN 2.5.1. Скачиваю Windows 64-bit MSI installer, файл OpenVPN-2.5.1-I601-amd64.msi.
Запускаем инсталлятор OpenVPN.
Открывается мастер установки, предлагают выбрать тип установки, естественно, нажимаем Customize. Установка по умолчанию нас не устроит.
OpenVPN GUI отключаю. Мне нужно, чтобы OpenVPN на сервере работал автоматически.
А OpenVPN Service, наоборот, включаю. OpenVPN у меня будет работать как служба Windows.
Документацию и примеры конфигурации оставляю. Конфигурационные примеры будут использоваться в качестве шаблонов.
Начиная с версии OpenVPN 2.5 появилась поддержка драйвера WinTUN от разработчиков WireGuard. Говорят, что работает быстрее чем TAP-Windows6. Поэтому драйвер TAP-Windows6 отключаю и включаю Wintun.
ПРИМЕЧАНИЕ: для включения драйвера Wintun необходимо в файле конфигурации сервера включить параметр:
Утилиты OpenSSL EasyRSA 3 Certificate Management Scripts включаю. Install Now.
Начинается процесс установки OpenVPN.
Установка успешно завершена. Close.
Установка выполнена в директорию C:Program FilesOpenVPN.
После установки у нас появляется новый сетевой адаптер Wintun Userspace Tunnel.
Создание ключей и сертификатов
Запускаем командную строку под администратором и переходим в рабочую директорию C:Program FilesOpenVPNeasy-rsa.
В этой папке есть всё необходимое для генерации сертификатов.
Для работы в Windows нас интересует файл EasyRSA-Start.bat.
Запускается оболочка EasyRSA Shell.
Инициализируем новую конфигурацию:
Появляется новая директория C:Program FilesOpenVPNeasy-rsapki.
Генерируем ключ и сертификат центра сертификации. Внимание, сейчас мы наступим на грабли, исправим ошибку и снова вернёмся к генерации файлов для центра сертификации.
Нас попросят для раза ввести пароль. Придумываем и вводим.
Failed create CA private key
Исправим этот баг. Мне не совсем понятно, почему нельзя было всё сделать сразу по-человечески, чтобы люди не встречали эту ошибку. Копируем файл C:Program FilesOpenVPNeasy-rsavars.example, называем копию C:Program FilesOpenVPNeasy-rsavars.
Редактируем C:Program FilesOpenVPNeasy-rsavars. В данном файле можно много чего прописать, но я не буду на этом сейчас останавливаться подробно. Находим строку:
Собственно, ошибка и заключалась в том, что оболочка по какой-то причине не могла создать временный файл.
Генерируем ключ и сертификат центра сертификации:
Нас попросят для раза ввести пароль. Придумываем и вводим. После нас просят указать Common Name для центра сертификации, указываю «internet-lab.ru».
Операция проходит успешно.
Создаётся сертификат центра сертификации:
Сертификат создаётся на 10 лет, это значение можно переопределить в файле vars.
И ключ центра сертификации:
Ключ секретный, никому не показываем. он будет храниться на сервере.
Генерируем ключ и запрос на сертификат сервера, назовём сервер именем «server«:
Нас просят указать Common Name для сервера, указываю «internet-lab.ru».
Операция проходит успешно.
Создаётся запрос на сертификат сервера:
Ключ секретный, никому не показываем. он будет храниться на сервере.
Для создания сертификата сервера нужно подписать запрос на сертификат:
Для подписи нужно ввести слово «yes» и указать пароль от центра сертификации.
Создаётся сертификат сервера:
Сертификат сервера создаётся на 825 дней, это значение можно переопределить в файле vars.
Теперь создадим клиентский сертификат. По хорошему клиентский ключ следует запаролить, чтобы исключить утечку при передаче. Для этого есть несколько способов.
Первый
На клиентской машине генерируем запрос на сертификат клиента и ключ без пароля:
Второй
а машине с CA генерируем сертификат клиента и ключ с паролем:
Третий
Но поскольку я генерирую ключ сам для себя, то воспользуюсь небезопасным третьим способом.
Генерируем ключ и запрос на сертификат клиента, назовём клиента именем «client«:
Нас просят указать Common Name для клиента, указываю «v.pupkin».
Операция проходит успешно.
Создаётся запрос на сертификат клиента:
Для создания сертификата клиента нужно подписать запрос на сертификат:
Для подписи нужно ввести слово «yes» и указать пароль от центра сертификации.
Создаётся сертификат клиента:
Сертификат сервера создаётся на 825 дней, это значение можно переопределить в файле vars.
Генерируем ключ Диффи-Хеллмана:
Операция займёт некоторое время.
Я на сервере собираюсь использовать tls-auth для дополнительной проверки целостности, это обеспечит дополнительный уровень безопасности протокола SSL/TLS при создании соединения:
При использовании tls-auth на клиенте не понадобится ключ Диффи-Хеллмана, но пусть будет. Генерируем ключ tls-auth. Для этого запускаем командную строку под администратором и выполняем:
В папке C:Program FilesOpenVPNbin создаётся файл ta.key.
Переносим его в папку C:Program FilesOpenVPNeasy-rsapki.
Минимальный набор сертификатов сгенерирован.
Настройка OpenVPN сервера
Создадим конфигурационный файл сервера C:Program FilesOpenVPNconfig-autoserver.ovpn:
Открываем блокнотом и редактируем:
Лучше изучить конфигурационный файл, я предлагаю свой вариант конфига:
У меня здесь указаны пути к ключам и сертификатам, используется порт TCP 1194. Параметр duplicate-cn позволяет подключаться всем клиентам по одному общему сертификату, но это небезопасно и не рекомендуется. Используйте только в тестовых целях. Я использую для того, чтобы с помощью одного и того же сертификата подключиться к OpenVPN серверу и с клиентской машины и со смартфона. Параметр windows-driver wintun подключает использование драйвера WinTun. И что им стоило этот параметр указать в примере конфигурации? Остальное по умолчанию.
ВНИМАНИЕ: в конфигурационных файлах допускается в путях использование прямого слеша:
ca «C:/Program Files/OpenVPN/easy-rsa/pki/ca.crt»
или двойного обратного слеша:
ca «C:\Program Files\OpenVPN\easy-rsa\pki\ca.crt»
Запуск OpenVPN сервера
Переходим к службам:
Находим службу OpenVPNService.
Настраиваем на автоматический запуск при загрузке сервера.
Запускаем (перезапускаем) службу.
Согласно настройкам сервера в папке C:Program FilesOpenVPNlog должны появиться логи. Это один из инструментов администратора OpenVPN сервера.
Активировался сетевой адаптер OpenVPN Wintun.
Согласно настройкам сервера IP адрес 10.8.0.1.
Проверяем поднялся ли порт tcp 1194:
Порт должен прослушиваться.
Настройка firewall
Теперь нужно настроить firewall. Открываем Windows Defender Firewall with Advanced Security.
Переходим в Inbound Rules.
Создаём правило — New Rule.
Тип правила — Port. Next.
Протоколы и порты — TCP 1194. Как в настройках сервера. Next.
Действия — Allow the connection. Next.
Для всех сетей. Next.
Указываем название правила — OpenVPN. Next.
Правило создано, теперь firewall не блокирует входящие TCP соединения на 1194 порту.
Настройка OpenVPN клиента на ПК Windows
На компьютере клиента устанавливаем OpenVPN Connect.
Я скачиваю версию для Windows.
Принимаем лицензионное соглашение. Next.
OpenVPN Connect устанавливается.
Установка завершена. Finish.
На рабочем столе появляется иконка OpenVPN Connect.
На сервере файл примера конфигурации client.ovpn копируем как internet-lab.ru.ovpn.
Здесь нужно указать протокол, порт адрес сервера и прочие параметры. Пути к ключам и сертификатам относительные.
Создаём директорию, например, C:openvpn. Копируем в неё с сервера файлы:
Запускаем OpenVPN Connect.
Agree. Переключаемся на File.
Перетаскиваем мышкой в окно файл C:openvpninternet-lab.ru.ovpn, или указываем через кнопку Browse.
Ставим галку «Connect after import».
Соединение с OpenVPN сервером установлено.
В логах сервера видим, что соединился юзер v.pupkin.
Настройка OpenVPN клиента на смартфоне Android
Копируем на телефон все те же файлы, что и для клиента.
Источник
Подробная инструкция по OpenVPN v2.3.8 на Windows server 2008R2
Представляю подробную инструкцию по OpenVPN v2.3.8 на Windows server 2008R2 c уровнем шифрования TLS. Так же будут подробно описаны все параметры.
Настройка сервера
Для начала качаем дистрибутив с официально сайта. Запускаем установщик openvpn-install-2.3.8-I001-x86_64. В компонентах включаем следующее:
Указываем путь установки (Все дальнейшие действия будут ориентироваться на данный путь указанный в примере):
В процессе установке потребуется установить виртуальный сетевой адаптер, соглашаемся с установкой.
После успешной установки переходим в каталог “C:Programm FilesOpenVPN” где создаем директорию “SSL” (каталог может называться как угодно, в последующих настройках будет использоваться именно этот каталог), в данном каталоге будут располагаться сертификаты сервера, алгоритмы шифрования и проверка подлинности клиента.
Переходим в каталог “C:Programm FilesOpenVPNeasy-rsa”, открываем с помощью notepad или notepad++ (более правильный вариант) «vars.bat» (скрипт, содержащий в себе параметры ответов для создания и генерации клиентских/серверных сертификатов и последующих настроек сервера).
В самом низу файла есть следующие параметры, которые нужно настроить под себя:
set KEY_COUNTRY=RU
set KEY_PROVINCE=MO
set KEY_CITY=MOSCOW
set KEY_ORG=OpenVPN
set KEY_EMAIL=local@mos.local
set KEY_CN=server
set KEY_NAME=server
set KEY_OU=OU
set PKCS11_MODULE_PATH=changeme rem Параметр по умолчанию
set PKCS11_PIN=1234 rem Параметр по умолчанию
В этом же каталоге “C:Programm FilesOpenVPNeasy-rsa”, есть конфигурационный файл “openssl-1.0.0.cnf”, открываем его с помощью notepad или notepad++ (более правильный вариант) и изменяем настройку, отвечающую за срок жизни сертификатов, по умолчанию 365 дней, продлим срок жизни до 3650 дней.
default_days = 3650 # how long to certify for
Далее будем генерировать следующее:
ca.crt — Собственный доверенный сертификат (Certificate Authority — далее CA) для подписи клиентских сертификатов и для их проверки при авторизации клиента.
dh1024.pem — ключ Диффи Хельмана позволяющий двум и более сторонам получить общий секретный ключ
server.crt — сертификат сервера
server.key — ключ сервера
ta.key — дополнительный ключ для tls-аутентификации (повышение безопасности соединения), сервер и каждый клиент должны иметь копию этого ключа
Открываем командную строку и переходим в каталог “C:Program FilesOpenVPNeasy-rsa”
cd C:Program FilesOpenVPNeasy-rsa
Вводим команду “vars” нажимаем Enter (инициируем работу со скриптами, в случае закрытия командной строки, команду “vars” придется вводить заного)
Вводим команду “clean-all” (Очищаем каталог “C:Program FilesOpenVPNeasy-rsakeys” c последующим созданием файла“index.txt” (база клиентов, она же database) и “serial” (ключ))
Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должны создаться файлы “index.txt и serial”.
Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должен создаться файл “ta.key”.
Вводим команду “build-dh” — генерация ключа Диффи Хельмана.
Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должен создаться файл “dh1024.pem”.
Вводим команду “build-ca” — генерация ключа центра сертификации (CA)
На все вопросы отвечаем по умолчанию нажатием клавиши Enter, эти параметры мы прописали в “vars.bat”
Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должны создаться файлы “ca.crt и ca.key”.
Вводим команду “build-key-server server” — генерация сертификата сервера.
На вопросы Country Name, State Name, Locality Name и т.д. отвечаем по умолчанию нажатием клавиши Enter до самого конца, эти параметры мы прописали в “vars.bat”, далее будет предложено создание сертификата сроком на 3650 дней (данный параметр мы указывали в openssl-1.0.0.cnf) нажимаем “Y”, будет предложено записать сертификат сервера в базу, нажимаем “Y”.
Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должены создаться файлы “server.crt, server.key, server.csr”.
Вводим команду “build-key revokecrt” — команда для создания пользовательского сертификата, но в данном случае мы создаем произвольный сертификат “revokecrt” для последующей генерации файла “crl.pem”, который отвечает за проверку и последующий отзыв сертификатов. Теоретически данную процедуру можно проделать в самом конце и даже жить без нее, но тогда не сможем отзывать сертификаты и конфигурационный файл “server.ovpn” будет выглядеть иначе.
На вопросы Country Name, State Name, Locality Name и т.д. отвечаем по умолчанию нажатием клавиши Enter до вопросов Common Name и Name, на эти вопросы нужно отвечать согласно названию создаваемого сертификата пользователя, в нашем случае это произвольный сертификат “revokecrt” на оставшиеся вопросы нажимаем Enter, далее будет предложено создание сертификата сроком на 3650 дней (данный параметр мы указывали в openssl-1.0.0.cnf) нажимаем “Y”, будет предложено записать сертификат сервера в базу, нажимаем “Y”.
Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должны создаться файлы “revokecrt.crt, revokecrt.key, revokecrt.csr”
Вводим команду “revoke-full revokecrt” – команда отвечает за отзыв сертификата и последующего создания файла “crl.pem”
Не закрывая командную строку, проверяем содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должен создаться файл “crl.pem”
Теперь создадим сертификат пользователя, аналогично сертификату “revokecrt” см. выше.
Вводим команду “build-key user1” – создаем сертификат пользователя с именем user1
На данном этапе работа с консолью закончена, можно закрыть окно и проверить содержимое каталога “ C:Program FilesOpenVPNeasy-rsakeys”, должны создаться файлы “user1.crt, user1.key, user1.csr”
Рекомендую создать папку “Clients” в любом удобном для Вас месте и скопировать туда необходимые файлы для передачи пользователям:
Также хочу обратить Ваше внимание на то, что содержимое папки “keys” удалять нельзя, при создании пользовательских сертификатов или любых изменениях в консоли, делайте копию данного каталога во избежание потерь или случайных генераций сертификатов сервера и обновления базы данных.
Копируем файлы сервера в раннее созданную папку “ssl” в каталоге “ C:Program FilesOpenVPNssl”:
Переходим в каталог “C:Program FilesOpenVPNconfig” и создадим файл конфигурации сервера “server.ovpn” со следующим содержимым:
# Создаем маршрутизируемый IP туннель.
dev tun
# Указываем протокол для подключения.
proto udp
# Указываем порт на котором будем слушать.
port 1194
# Указываем что это TLS сервер.
tls-server
# Указываем путь к доверенному сертификату.
ca «C:\Program Files\OpenVPN\ssl\ca.crt»
# Указываем путь к сертификату сервера.
cert «C:\Program Files\OpenVPN\ssl\Server.crt»
# Указываем путь к ключу сервера.
key «C:\Program Files\OpenVPN\ssl\Server.key»
# Указываем путь к ключю Диффи Хельмана
dh «C:\Program Files\OpenVPN\ssl\dh1024.pem»
# Указываем адресацию сети.
server 10.8.0.0 255.255.255.0
# Указываем алгоритм шифрования должен быть одинаковый клиент/сервер.
cipher AES-128-CBC
# Указываем не перечитавать файлы ключей при перезапуске туннеля.
persist-key
# Указываем путь к ключу безопасности и устанавливаем параметр сервера 0
tls-auth «C:\Program Files\OpenVPN\ssl\ta.key» 0
# Разрешаем общаться клиентам внутри тоннеля.
client-to-client
# Указываем каталог с описаниями конфигураций каждого из клиентов.
client-config-dir «C:\Program Files\OpenVPN\ccd»
# Указываем файл с описанием сетей между клиентом и сервером.
ifconfig-pool-persist «C:\Program Files\OpenVPN\ccd\ipp.txt»
# Указывает сверку по отозванным сертификатам.
crl-verify «C:\Program Files\OpenVPN\easy-rsa\keys\crl.pem»
# Указываем путь к логу со статусом.
status «C:\Program Files\OpenVPN\log\logopenvpn-status.log»
# Указываем путь к логу.
log «C:\Program Files\OpenVPN\log\openvpn.log»
# Указывает MTU для туннеля, должны быть одинаковые параметры клиент/сервер.
tun-mtu 1500
# Включаем сжатие.
comp-lzo
# Устранение проблем с передачей MTU.
mssfix
# Указывает отсылать ping на удаленный конец тунеля после указанных n-секунд,
# если по туннелю не передавался никакой трафик.
# Указывает, если в течении 120 секунд не было получено ни одного пакета,
# то туннель будет перезапущен.
keepalive 10 120
# Указываем уровень логирования.
verb 3
На сервере где будет крутиться OpenVPN необходимо проделать следующее:
1 – Если вы используете встроенный Брандмауэр Windows, создайте разрешающее правило для входящих и исходящих подключений по протоколу UDP на порт 1194.
2 – В службах сервера найдите OpenVPN Service и установите запуск на автоматический, это позволит автоматически запускаться сервису при перезагрузке сервера.
C рабочего стола сервера запускаем “OpenVPN GUI”, в трее дважды щелкаем по значку “OpenVPN GUI” откроется окно лога, если после запуска сервиса в пункте 2 нечего не произошло, нажимаем слева внизу подключиться и если все хорошо, мы должны увидеть следующее содержимое:
Сервис VPN на сервере запущен и готов принимать клиентов.
Настройка клиента
Запускаем ранее скаченный установщик openvpn-install-2.3.8-I001-x86_64, выбор компонентов оставляем по умолчанию, путь сохраняется прежний.
После успешной установки переходим в каталог “C:Program FilesOpenVPNconfig” и создаем файл конфигурации клиента “test.ovpn” со следующим содержимым:
# Создаем маршрутизируемый IP туннель.
dev tun
# Указываем протокол для подключения.
proto udp
# Указываем IP аддрес сервера с портом.
remote X.X.X.X 1194
# Указываем задержку в секундах для построения маршрута.
route-delay 3
# Указываем чтобы клиент забирал информацию о маршрутизации с сервера.
client
# Указываем что мы являемся TLS клиентом.
tls-client
# Параметр защиты от MitM атак.
ns-cert-type server
# Указываем путь к доверенному сертификату.
ca «C:\Program Files\OpenVPN\ssl\ca.crt»
# Указываем путь к клиентскому сертификату.
cert «C:\Program Files\OpenVPN\ssl\user1.crt»
# Указываем путь к клиентскому ключу.
key «C:\Program Files\OpenVPN\ssl\user1.key»
# Указываем путь к ключу безопасности и устанавливаем параметр клиента 1
tls-auth «C:\Program Files\OpenVPN\ssl\ta.key» 1
# Указываем алгоритм шифрования должен быть одинаковый клиент/сервер.
cipher AES-128-CBC
# Включаем сжатие.
comp-lzo
# Устранение проблем с передачей MTU.
mssfix
# Указывает MTU для туннеля, должны быть одинаковые параметры клиент/сервер.
tun-mtu 1500
# Указываем, сли в течении 60 секунд не было получено ни одного пакета,
# то туннель будет перезапущен.
ping-restart 60
# Указывает отсылать ping на удаленный конец тунеля после указанных n-секунд,
# если по туннелю не передавался никакой трафик.
ping 10
# Указываем уровень логирования.
verb 3
C рабочего стола запускаем “OpenVPN GUI”, в трее дважды щелкаем по значку “OpenVPN”, откроется окно лога, нажимаем подключиться и если все хорошо, то мы увидим следующее:
Запускаем пинг на 10.8.0.1 и видим что сеть доступна (10.8.0.1 адрес, который получил виртуальный сетевой адаптер на сервере).
На сервере мы увидим лог подключения:
Собственно на этом этапе можно закончить и все в дальнейшем будет работать. Но я хотел бы еще кое-что добавить. Для уменьшения количества файлов у клиента и добавление еще одного пункта в безопасности (пароль на подключение), можно сделать следующее, на этапе создания сертификата пользователя на сервере, выполняем команду “build-key-pkcs12 user2” вместо “build-key user1”, выполняем все аналогично первой команде, до пункта Export Password, в этом пункте необходимо указать пароль, например 12345, данный пароль по факту назначается на сертификат “user2.p12”, при попытке подключения через “OpenVPN”, программа обращается к сертификату и требует пароль (зная пароль, его можно изменить, удалить и т.д).
В таком случае, комплект для пользователя будет состоять из:
Конфигурационный файл “test.ovpn” должны быть следующего содержания:
# Создаем маршрутизируемый IP туннель.
dev tun
# Указываем протокол для подключения.
proto udp
# Указываем IP аддрес сервера с портом.
remote X.X.X.X 1194
# Указываем задержку в секундах для построения маршрута.
route-delay 3
# Указываем чтобы клиент забирал информацию о маршрутизации с сервера.
client
# Указываем что мы являемся TLS клиентом.
tls-client
# Параметр защиты от MitM атак.
ns-cert-type server
# Указываем путь к сертификату.
pkcs12 «C:\Program Files\OpenVPN\ssl\user2.p12»
# Указываем путь к ключу безопасности и устанавливаем параметр клиента 1
tls-auth «C:\Program Files\OpenVPN\ssl\ta.key» 1
# Указываем алгоритм шифрования должен быть одинаковый клиент/сервер.
cipher AES-128-CBC
# Включаем сжатие.
comp-lzo
# Устранение проблем с передачей MTU.
mssfix
# Указывает MTU для туннеля, должны быть одинаковые параметры клиент/сервер.
tun-mtu 1500
# Указываем, сли в течении 60 секунд не было получено ни одного пакета,
# то туннель будет перезапущен.
ping-restart 60
# Указывает отсылать ping на удаленный конец тунеля после указанных n-секунд,
# если по туннелю не передавался никакой трафик.
ping 10
# Указываем уровень логирования.
verb 3
Пробуем подключиться, вводим пароль 12345
Если все хорошо видим следующее:
Ну и на последок, как отозвать сертификат пользователя и вообще посмотреть список выданных сертификатов. Сам список храниться по следующему пути “C:Program FilesOpenVPNeasy-rsakeysindex.txt”
Для того чтобы отозвать сертификат, заходим в командную строку. Переходим в каталог “C:Programm FilesOpenVPNeasy-rsa”:
cd C:Program FilesOpenVPNeasy-rsa
Вводим команду “vars” нажимаем Enter (инициируем работу со скриптами). Вводим команду для отзыва сертификата пользователя “revoke-full user2” (указываем название заведенного раннее пользователя).
После заходим в “index.txt” “C:Program FilesOpenVPNeasy-rsakeysindex.txt” и видим, что сертификат отозван “R”.
Не готов сказать на 100%, но судя по описанию, файл “index.txt” проверяется каждый час, соответственно через час, сертификат будет заблокирован, ну или просто достаточно перезапустить сервис на сервере.
Еще рекомендую использовать отдельную учетную запись для службы “OpenVPN Service” и в случае если пользователи будут работать с этим сервером, где развернут VPN, обязательно уберите права у простых пользователей на каталог “C:Program FilesOpenVPN”.
Всем спасибо, надеюсь, данная статься поможет многим, кто сталкивается с вопросами и не находил подходящих ответов, разжевал как мог.
Источник
Установим и настроим OpenVPN сервер. На сервере используется операционная система Windows Server 2019.
OpenVPN — бесплатная реализация технологии виртуальной частной сети (VPN) для создания зашифрованных каналов связи между компьютерами типа точка-точка или сервер-клиенты за NAT и Firewall.
Установка OpenVPN Server
Скачиваем дистрибутив для установки OpenVPN:
Прокручиваем вниз, выбираем стабильную версию. Я буду использовать версию 2.4.9.
Для операционной системы Windows доступны два пакета:
- WINDOWS 7/8/8.1/SERVER 2012R2 INSTALLER (NSIS)
- WINDOWS 10/SERVER 2016/SERVER 2019 INSTALLER (NSIS)
Для Windows Server 2019 подходит второй вариант, скачиваю.
Запускаем инсталлятор OpenVPN.
Открывается мастер установки. Next.
Принимаем лицензионное соглашение. I Agree.
Выбираем компоненты. Выделите EasyRSA 2 Certificate Management Scripts. Для сервера OpenVPN GUI можно не устанавливать, если вы планируете запускать OpenVPN в качестве службы. Next.
Выбираем путь установки, я оставляю по умолчанию C:Program FilesOpenVPN. Install.
Начинается процесс установки OpenVPN.
Установка успешно завершена. Next.
Finish.
Установка выполнена в директорию C:Program FilesOpenVPN.
После установки у нас появляется новый сетевой адаптер TAP-Windows Adapter V9.
Адаптер отключён. Если по каким-то причинам нужно добавить несколько таких адаптеров, то загляните в папку C:Program FilesTAP-Windowsbin.
Здесь есть скрипты для установки адаптера, добавления адаптера и удаления всех адаптеров.
Пример установки адаптера. В командной строке под администратором:
cd "C:Program FilesTAP-Windowsbin"
"C:Program FilesTAP-Windowsbintapinstall.exe" install "C:Program FilesTAP-WindowsdriverOemVista.inf" tap0901
В большинстве случаев дополнительно настраивать сетевой адаптер не требуется.
Создание ключей и сертификатов
Запускаем командную строку под администратором и переходим в рабочую директорию C:Program FilesOpenVPNeasy-rsa.
cd C:Program FilesOpenVPNeasy-rsa
В этой папке есть всё необходимое для генерации сертификатов.
Выполняем:
init-config.bat
copy vars.bat.sample vars.bat
Создаётся файл vars.bat с настройками и примером готовых параметров для создания CSR запроса сертификатов. Заполним его. Открываем vars.bat блокнотом.
notepad vars.bat
Открывается vars.bat.
Здесь стоит обратить внимание на пути к рабочим директориям. Например, вы можете указать свой путь к openssl.exe, если установили OpenVPN в другую директорию. Здесь же можно изменить длину ключей шифрования.
Заполняем переменные в нижней части файла, указываем:
- KEY_COUNTRY — страна
- KEY_PROVINCE — область
- KEY_CITY — город
- KEY_ORG — организация
- KEY_EMAIL — e-mail
- KEY_CN — (Common Name) имя сервера
- KEY_NAME — (Name) имя сервера
- KEY_OU — (Organization Unit) отдел
- PKCS11_MODULE_PATH — для токенов двухфакторной аутентификации, нам не требуется, укажу имя сервера
- PKC11_PIN — ПИН для токенов двухфакторной аутентификации, нам не требуется, укажу 1234
Для каждого сертификата нужно будет указывать свои NAME и COMMON NAME, можно их не указывать в vars.bat, потому как при генерации все параметры будут запрашивать.
Обращаем внимание на строку:
set KEY_KONFIG=openssl-1.0.0.cnf
Это имя конфигурационного файла. Находим его в рабочей директории.
Откроем блокнотом.
Внутри есть параметр default_days, в котором можно указать срок действия будущих сертификатов. По умолчанию у меня стоит 3650 дней, это 10 лет. Меня устраивает. Вероятно, кому-то при генерации клиентских сертификатов может понадобиться уменьшить этот срок.
Сохраняем все изменения и возвращаемся к командной строке. Подгружаем утверждённые нами переменные:
vars.bat
Очищаем директорию с ключами:
clean-all.bat
Сертификаты, которые мы будем создавать, появятся в папке C:Program FilesOpenVPNeasy-rsakeys. Сейчас эта папка очистилась, в ней два файла: index.txt и serial.
Генерируем ключ и сертификат центра сертификации:
build-ca.bat
В процессе генерации сертификата нас будут спрашивать все те же параметры, которые мы указали в vars.bat. Если параметр нас устраивает (а он нас устраивает), просто нажимаем ввод и переходим к следующему вопросу. После завершения работы скрипта в папке C:Program FilesOpenVPNeasy-rsakeys появляется два файла:
- ca.crt — сертификат центра сертификации
- ca.key — ключ центра сертификации
Ключ секретный, никому не передавайте, он будет храниться на сервере.
Генерируем ключ Диффи-Хеллмана:
build-dh.bat
В папке C:Program FilesOpenVPNeasy-rsakeys появляется файл:
- dh2048.pem
Генерируем ключ и сертификат сервера, назовём сервер именем «server«:
build-key-server.bat server
В процессе генерации серверного сертификата нас будут спрашивать те же параметры, которые мы указали в vars.bat. Если параметр нас устраивает (а он нас снова устраивает), просто нажимаем ввод и переходим к следующему вопросу. На вопрос Sign the certificate отвечаем y. На вопрос 1 out of 1 certificate requests certified, commit отвечаем y.
После завершения работы скрипта в папке C:Program FilesOpenVPNeasy-rsakeys появляется четыре файла:
- 01.pem — не понадобится
- server.crt — сертификат сервера
- server.csr — запрос сертификата сервера, не понадобится
- server.key — ключ сервера
Ключ секретный, никому не передавайте, он будет храниться на сервере.
Генерируем ключ и сертификат первого клиента. Для каждого клиента нужно указывать своё имя файла, Name и Common Name. Назовём первого клиента именем «client«:
build-key.bat client
В процессе генерации клиентского сертификата нас будут спрашивать те же параметры, которые мы указали в vars.bat. Нас устраивают все параметры кроме NAME и COMMON NAME, на них отвечаем client. Помним, что для другого клиента имя должно быть другим. На вопрос Sign the certificate отвечаем y. На вопрос 1 out of 1 certificate requests certified, commit отвечаем y.
После завершения работы скрипта в папке C:Program FilesOpenVPNeasy-rsakeys появляется четыре файла:
- 02.pem — не понадобится
- client.crt — сертификат первого клиента
- client.csr — запрос сертификата первого клиента, не понадобится
- client.key — ключ первого клиента
Для каждого нового клиента, который будет подключаться к серверу OpenVPN необходимо сгенерировать свой клиентский сертификат. Но это можно сделать позже, пока добьёмся подключения хотя бы одного клиента.
В настройках сервера можно потом включить настройку duplicate-cn, которая позволяет подключаться всем клиентам по одному общему сертификату, но это небезопасно и не рекомендуется. Используйте только в тестовых целях.
# Uncomment this directive if multiple clients
# might connect with the same certificate/key
# files or common names. This is recommended
# only for testing purposes. For production use,
# each client should have its own certificate/key
# pair.
#
# IF YOU HAVE NOT GENERATED INDIVIDUAL
# CERTIFICATE/KEY PAIRS FOR EACH CLIENT,
# EACH HAVING ITS OWN UNIQUE «COMMON NAME»,
# UNCOMMENT THIS LINE OUT.
;duplicate-cn
Я на сервере собираюсь использовать tls-auth для дополнительной проверки целостности, это обеспечит дополнительный уровень безопасности протокола SSL/TLS при создании соединения:
- Сканирование прослушиваемых VPN-сервером портов
- Инициация SSL/TLS-соединения несанкционированной машиной на раннем этапе
- DoS-атаки и флуд на порты OpenVPN
- Переполнение буфера SSL/TLS
При использовании tls-auth на клиенте не понадобится ключ Диффи-Хеллмана, но пусть будет. Генерируем ключ tls-auth:
openvpn --genkey --secret keys/ta.key
В папке C:Program FilesOpenVPNeasy-rsakeys появляется файл:
- ta.key
Минимальный набор сертификатов сгенерирован.
Настройка OpenVPN сервера
Чтобы случайно всё не удалить, создадим папку C:Program FilesOpenVPNssl и скопируем в неё сертификаты. Это будет рабочая папка сервера.
mkdir "C:Program FilesOpenVPNssl"
copy "C:Program FilesOpenVPNeasy-rsakeys" "C:Program FilesOpenVPNssl"
Создадим конфигурационный файл сервера C:Program FilesOpenVPNconfigserver.ovpn:
copy "C:Program FilesOpenVPNsample-configserver.ovpn" "C:Program FilesOpenVPNconfigserver.ovpn"
Открываем блокнотом и редактируем:
notepad "C:Program FilesOpenVPNconfigserver.ovpn"
Лучше изучить конфигурационный файл, я предлагаю свой вариант конфига:
port 1194
proto udp
dev tun
ca "C:\Program Files\OpenVPN\ssl\ca.crt"
cert "C:\Program Files\OpenVPN\ssl\server.crt"
key "C:\Program Files\OpenVPN\ssl\server.key" # This file should be kept secret
dh "C:\Program Files\OpenVPN\ssl\dh2048.pem"
server 10.8.0.0 255.255.255.0
tls-auth "C:\Program Files\OpenVPN\ssl\ta.key" 0 # This file is secret
keepalive 10 120
comp-lzo
persist-key
persist-tun
cipher AES-256-CBC
status "C:\Program Files\OpenVPN\log\status.log"
log "C:\Program Files\OpenVPN\log\openvpn.log"
verb 4
mute 20
Указываем параметры сервера, пути к ключам и сертификатам. Здесь же пути к логам. Для тестирования можно использовать tcp протокол:
proto tcp
Переходим к службам:
services.msc
Находим службу OpenVPNService.
Настраиваем на автоматический запуск при загрузке сервера.
Запускаем службу.
Согласно настройкам сервера в папке C:Program FilesOpenVPNlog должны появиться логи. Это один из инструментов администратора OpenVPN сервера.
Активировался сетевой адаптер TAP-Windows Adapter V9.
Согласно настройкам сервера IP адрес 10.8.0.1.
Проверяем поднялся ли порт tcp 1194:
netstat -tan | find "1194"
Порт должен прослушиваться.
Теперь нужно настроить firewall. Открываем Windows Defender Firewall with Advanced Security.
Переходим в Inbound Rules.
Создаём правило — New Rule…
Тип правила — Port. Next.
Протоколы и порты — UDP 1194. Как в настройках сервера. Next.
Действия — Allow the connection. Next.
Для всех сетей. Next.
Указываем название правила — OpenVPN. Next.
Правило создано, теперь firewall не блокирует входящие UDP соединения на 1194 порту.
Настройка OpenVPN клиента
На компьютере клиента устанавливаем OpenVPN точно также как на сервер. Галку EasyRSA 2 Certificate Management Scripts не указываем. Галку OpenVPN GUI указываем.
Я устанавливаю OpenVPN на клиенте в папку по умолчанию. C:Program FilesOpenVPN.
Копируем в отдельную папку for_client (её содержимое отправим потом на компьютер клиента) на сервере файлы для клиента:
- ca.crt
- client.crt
- client.key
- dh2048.pem
- ta.key
Туда же из папки C:Program FilesOpenVPNsample-config копируем client.ovpn
Переименовываю client.ovpn в config.ovpn. Можно использовать любое имя, лучше созвучное с названием организации. Вот такой получился набор.
Редактируем файл config.ovpn.
client
dev tun
proto udp
remote internet-lab.ru 1194
resolv-retry infinite
nobind
persist-key
persist-tun
ca "C:\Program Files\OpenVPN\config\ca.crt"
cert "C:\Program Files\OpenVPN\config\client.crt"
key "C:\Program Files\OpenVPN\config\client.key"
tls-auth "C:\Program Files\OpenVPN\config\ta.key" 1
#dh "C:\Program Files\OpenVPN\config\dh2048.pem"
cipher AES-256-CBC
comp-lzo
verb 0
connect-retry-max 25
Здесь указываем пути к ключам и сертификатам клиента. Не забываем про адрес и порт сервера, куда подключаться, для примера я указал internet-lab.ru UDP 1194.
Отправляем подготовленные файлы на компьютер клиента и копируем в C:Program FilesOpenVPNconfig.
На клиента запускаем OpenVPN GUI.
В трее появляется значок OpenVPN.
Правой кнопкой — подключиться.
Устанавливается соединение.
Значок позеленел, назначен адрес 10.8.0.6.
Можно подключаться к серверу, если есть доступы.
Для второго и последующего клиента генерируем свой набор клиентских сертификатов.
Отзыв сертификата
Иногда нужно отозвать сертификат, выданный клиенту. Кто-то увольняется, кто-то палит сертификаты.
cd "C:Program FilesOpenVPNeasy-rsa"
vars.bat
revoke-full client
Где client — это имя клиента.
В папке C:Program FilesOpenVPNkeys появляется файл:
- crl.pem
Копируем его с заменой в рабочую директорию сервера C:Program FilesOpenVPNssl.
Добавляем строчку в конфигурационный файл сервера:
crl-verify "C:\Program Files\OpenVPN\keys\crl.pem"
Перезапускаем службу OpenVPN сервера.
net stop OpenVPNService
net start OpenVPNService
Если в конфигурационном файле уже был ранее указан путь к crl.pem, то службу можно не перезапускать, OpenVPN перечитывает CRL один раз в час. Но в течении этого часа клиенты с отозванными сертификатами смогут продолжать подключаться и работать.
Для клиента с отозванным сертификатом процесс подключения будет «зависать». В логе можно увидеть:
TLS Error: TLS key negotiation failed to occur within 60 seconds (check your network connectivity) TLS Error: TLS handshake failed
Чтобы клиент не стучался постоянно на сервер, у него в конфиге есть опция:
connect-retry-max 25
Передать эту опцию при отзыве сертификата нельзя, поэтому указывайте её всем клиентам заранее.
Ссылки
OpenVPN 2.5.1 сервер на Windows