Конфигурация OpenVPN с использованием двусторонней TLS аутентификации

Минус метода аутентификации, при помощи общего секретного ключа в OpenVPN (показан в инструкции "Клиент и сервер OpenVPN"), состоит в том, что хищение его с одного из участвующих в сети VPN-хостов, влечет за собой необходимость смены этого ключа у всех участников. При этом встает вопрос, как безопасно передать новый ключ через небезопасный интернет-канал. Поэтому, при необходимости подключить к серверу нескольких клиентов, выбирают аутентификацию TLS. 
В этом случае каждая сторона имеет свой собственный закрытый ключ, который никуда не передается. Передается только сертификат открытого ключа клиента, подписанный удостоверяющим центром CA. Такие сертификаты выдаются специализированными организациями на определенный срок за деньги. Но для организации VPN внутри своей компании, если не предъявляются специальные требования к безопасности, можно использовать свой собственный удостоверяющий центр.

Рассмотрим пример создания ключей и сертификатов на Windows для подключения к серверу Keenetic-1 двух клиентов Keenetic-2 и Keenetic-3.

Для создания всех необходимых ключей и сертификатов нам понадобится набор скриптов EasyRSA, из состава уже используемого нами пакета OpenVPN версии 2.4.6-I602 для Windows, который использует также входящую в его состав утилиту openssl. 
Для установки EasyRSA пометьте компонент "EasyRSA 2 Certificate Management Scripts" при установке OpenVPN:

openvpn07.png

В версиях OpenVPN 2.5.x чтобы установить скрипты EasyRSA, нужно на первом экране установщика нажать кнопку "Customize" и прокрутить список компонентов в самый низ.

Capture1.PNG

Capture4.PNG

1. Откройте командную строку Windows от имени администратора. 
Зайдите в папку C:\Program Files\OpenVPN\easy-rsa и запустите:

init-config.bat


openvpn08.png

В результате мы получим файл vars.bat, который настраивает среду для генерирования ваших ключей и сертификатов. 
Откройте этот файл в Блокноте Windows и задайте папку для их хранения, по умолчанию keys:

set KEY_DIR=keys


а также значения полей владельца ваших сертификатов по умолчанию, например так:

set KEY_COUNTRY=RU
set KEY_PROVINCE=YourProvince <--ваша область/район
set KEY_CITY=YourCity <--ваш город
set KEY_ORG=YourOrganisation <--ваша организация
set KEY_EMAIL=mail@example.ru <--ваш e-mail
set KEY_CN=CommonName <--имя хоста
set KEY_NAME=KeyName <--имя ключа
set KEY_OU=OrganisationUnit <--ваше подразделение в организации


Сохраните измененный файл.

2. Создайте новые вспомогательные файлы index.txt и serial, выполнив (выполняется однократно) в командной строке Windows:

vars
clean-all


openvpn09.png 

3. Создайте закрытый ключ и сертификат вашего удостоверяющего центра, выполнив:

vars
build-ca


openvpn10.png

В папке C:\Program Files\OpenVPN\easy-rsa\keys появятся сгенерированные файлы ключа ca.key и сертификата ca.cert вашего удостоверяющего центра.

4. Создайте файл Диффи-Хелмана для защиты трафика от расшифровки. Он понадобится для использования сервером TLS. В некоторых случаях процедура может занять значительное время (например, при размере ключа 4096 бит занимает десятки минут), но делается однократно:

vars
build-dh


openvpn11.png

В папке C:\Program Files\OpenVPN\easy-rsa\keys появится файл dh2048.pem (или dh4096.pem при использовании размера ключа 4096 бит).

5. Создайте закрытый ключ и сертификат для OpenVPN TLS-сервера (Keenetic-1), выполнив:

vars
build-key-server Keenetic-1


При этом, когда скрипт запросит Common Name (CN), введите имя сервера, в нашем примере – Keenetic-1. А в конце дважды подтвердите (y), что подписываете сертификат.

openvpn12.png

6. Создайте закрытый ключ, запрос PEM и сертификат для первого OpenVPN TLS-клиента (Keenetic-2), выполнив:

vars
build-key Keenetic-2


Когда скрипт запросит Common Name (CN), введите имя первого клиента – Keenetic-2. Дважды подтвердите (y), что подписываете сертификат.

openvpn13.png

7. Повторите предыдущий пункт для второго клиента (Keenetic-3):

vars
build-key Keenetic-3


Когда скрипт запросит Common Name (CN), введите имя второго клиента – Keenetic-3. Дважды подтвердите (y), что подписываете сертификат.
Аналогичным образом можно создать ключи, запросы и сертификаты для произвольного числа клиентов.

8. Создайте ключ HMAC для дополнительной защиты от DoS-атак и флуда, выполнив:

vars
openvpn.exe --genkey --secret keys\ta.key


openvpn14.png

На этом все необходимые файлы созданы:

openvpn15.png

Для использования в конфигах OpenVPN-сервера и клиентов понадобятся следующие файлы:

ca.crt – сертификат удостоверяющего центра
dh2048.pem (или dh4096.pem) – файл Диффи-Хелмана
Keenetic-1.crt – сертификат сервера OpenVPN (Keenetic-1)
Keenetic-1.key – закрытый ключ сервера OpenVPN (Keenetic-1)
Keenetic-2.crt - сертификат 1-го клиента OpenVPN (Keenetic-2)
Keenetic-2.key – закрытый ключ 1-го клиента OpenVPN (Keenetic-2)
Keenetic-3.crt - сертификат 2-го клиента OpenVPN (Keenetic-3)
Keenetic-3.key – закрытый ключ 2-го клиента OpenVPN (Keenetic-3)
ta.key - ключ HMAC для дополнительной защиты от DoS-атак и флуда

Осталось только добавить их содержимое в текстовые файлы конфигурации сервера и клиентов.

9. Для создания файла конфигурации сервера OpenVPN возьмите за основу пример server.ovpn, расположенный в папке C:\Program Files\OpenVPN\sample-config\ в тело которого потребуется вставить полученные нами ключи и сертификаты следующим образом:

9.1. Замените строку:

ca ca.crt


на секцию:

<ca>
-----BEGIN CERTIFICATE-----
  <--Сюда вставьте тело сертификата удостоверяющего центра из файла ca.crt
-----END CERTIFICATE-----
</ca>


9.2. Замените:

cert server.crt


на секцию:

<cert>
-----BEGIN CERTIFICATE-----
  <--Сюда вставьте тело сертификата сервера OpenVPN из файла Keenetic-1.crt
-----END CERTIFICATE-----
</cert>


9.3. Замените строку: 

key server.key


на секцию:

<key>
-----BEGIN PRIVATE KEY-----
  <--Сюда вставьте тело закрытого ключа сервера OpenVPN из файла Keenetic-1.key
-----END PRIVATE KEY-----
</key>


9.4. Замените строку: 

dh dh2048.pem


на секцию:

<dh>
-----BEGIN DH PARAMETERS-----
  <--Сюда вставьте содержимое файла Диффи-Хелмана dh4096.pem 
-----END DH PARAMETERS-----
</dh>


9.5. Раскомментируйте строку: 

topology subnet

 

9.6 Замените строку:

server 10.8.0.0 255.255.255.0

 

на строку:

server 10.1.0.0 255.255.255.0


9.7. Закомментируйте строку:

;ifconfig-pool-persist ipp.txt


9.8. Замените строку:

tls-auth ta.key 0


на секцию

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
  <--Сюда вставьте содержимое файла ta.key
-----END OpenVPN Static key V1-----
</tls-auth>


и добавьте строку:

key-direction 0


9.9. Закомментируйте строку:

;status openvpn-status.log


10. Для создания файла конфигурации первого клиента OpenVPN возьмите за основу пример client.ovpn, расположенный в папке C:\Program Files\OpenVPN\sample-config\ в тело которого потребуется вставить полученные нами ключи и сертификаты следующим образом:

10.1. В строке: 

remote my-server-1 1194


замените my-server-1 на доменное имя или публичный IP-адрес вашего OpenVPN-сервера (Keenetic-1).

10.2. Замените строку: 

ca ca.crt


на секцию:

<ca>
-----BEGIN CERTIFICATE-----
  <--Сюда вставьте тело сертификата удостоверяющего центра из файла ca.crt
-----END CERTIFICATE-----
</ca>


10.3. Замените строку:

cert client.crt


на секцию:

<cert>
-----BEGIN CERTIFICATE-----
  <--Сюда вставьте тело сертификата первого клиента OpenVPN из файла Keenetic-2.crt
-----END CERTIFICATE-----
</cert>


10.4. Замените строку: 

key client.key


на секцию:

<key>
-----BEGIN PRIVATE KEY-----
  <--Сюда вставьте тело закрытого ключа первого клиента OpenVPN из файла Keenetic-2.key
-----END PRIVATE KEY-----
</key>


10.5. Замените строку 

tls-auth ta.key 1


на секцию

<tls-auth>
-----BEGIN OpenVPN Static key V1-----
  <--Сюда вставьте содержимое файла ta.key
-----END OpenVPN Static key V1-----
</tls-auth>


и добавьте строку:

key-direction 1


10.6. Добавьте строку с маршрутом в локальную сеть сервера:

route 192.168.1.0 255.255.255.0


или

route 0.0.0.0 0.0.0.0 


если необходимо весь трафик направлять в туннель.

11. Повторите аналогичные действия для второго клиента, взяв данные из файлов Keenetic-3.crt и Keenetic-3.key соответственно.

Вот примеры полученных таким образом файлов конфигураций для трех Keenetic: 
tls-server-keenetic-1.ovpn
tls-client-keenetic-2.ovpn
tls-client-keenetic-3.ovpn

Можете использовать их, заменив в клиентских имя KEENETIC-1.mykeenetic.ru на доменное имя или публичный ip-адрес вашего сервера Keenetic-1, а сертификаты и ключи на сгенерированный вами во всех файлах.

Теперь осталось лишь загрузить их на роутеры Keenetic по аналогии с пунктами 1.5, 1.6 инструкции "Клиент и сервер OpenVPN" и выполнить действия, указанные в пунктах 1.7, 1.8.

На этом настройка закончена. Проверьте, что туннели установились.

Для этого со стороны клиентов запустите ping на адрес туннеля сервера:

ping 10.1.0.1


и на адрес сервера в его домашней сети:

ping 192.168.1.1

 

TIP: Совет: В приведенном во второй части примере, для простоты мы производили все операции в одной папке, хотя для безопасности рекомендуется размещать удостоверяющий центр на отдельном компьютере, изолированном от Интернет, и хранить секретный ключ только на нем, а сертификат переносить на съемном носителе. Аналогично закрытые ключи сервера и клиентов OpenVPN должны размещаться только на соответствующих сторонах, связываемых туннелем. Обмениваться можно только сертификатами.

 

Была ли эта статья полезной?

Пользователи, считающие этот материал полезным: 4 из 6