VPN — различия между версиями

Материал из Корпоративная wiki Администрации города Волгодонски
Перейти к: навигация, поиск
(Создание ключевой пары для клиента.)
(Создание ключевой пары для клиента.)
Строка 56: Строка 56:
 
  </tls-auth>
 
  </tls-auth>
  
=== Создание ключевой пары для клиента. ===
+
=== Создание ключей ===
  
Уже должно быть в наличии:
+
Скопируем easy-rsa в каталог /etc/openvpn. Это гарантирует, что любые изменения в сценарии не будут потеряны при обновлении пакета.
# ключевая пара удостоверяющего центра (англ. CA);
 
# ключевая пара сервера к которому мы будем подключаться;
 
# файл параметров Диффи-Хэлмана .dh;
 
# ключ TLS аутентификации.
 
  
-----
+
mkdir /etc/openvpn/easy-rsa/
 +
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/
 +
 
 +
Отредактируйте /etc/openvpn/easy-rsa/vars
 +
 
 +
==== Ключевая пара удостоверяющего центра ====
 +
 
 +
Выполнить от пользователя имеющего права записи в /etc/openvpn/easy-rsa/keys/
 +
 
 +
cd /etc/openvpn/easy-rsa
 +
./clean-all
 +
source vars
 +
./build-ca
 +
 
 +
После выполнения последней команды будут записаны файлы открытой и закрытой части ключа удостоверяющего центра в /etc/openvpn/easy-rsa/keys/
 +
 
 +
==== Ключевая пара сервера к которому мы будем подключаться ====
 +
 
 +
./build-key-server myservername
 +
 
 +
где myservername имя файла ключа.
 +
 
 +
==== Файл параметров Диффи-Хэлмана ====
 +
 
 +
./build-dh
 +
 
 +
==== Ключ TLS аутентификации ====
 +
 
 +
openvpn --genkey --secret ta.key
 +
 
 +
==== Ключевая пара клиента ====
  
* Перейти в каталог со скриптами easy-rsa (по умолчанию /etc/openvpn/easy-rsa).
 
* Указать значения в файле vars
 
 
* Импортировать из файла vars переменные окружения командой
 
* Импортировать из файла vars переменные окружения командой
 
  source ./vars
 
  source ./vars
 
* Создать ключ клиента client1 командой  
 
* Создать ключ клиента client1 командой  
 
  ./build-key client1
 
  ./build-key client1
 +
 +
После создания пары ключей клиента, на клиент, кроме файла настройки, необходимо также передать по защищённому каналу связи открытую и закрытую часть ключей клиента, открытую часть ключа удостоверяющего центра и ключ TLS аутентификации.
 +
 +
* Отозвать ключ клиента
 +
cd /etc/openvpn/easy-rsa
 +
source ./vars
 +
./revoke-full client1
 +
 +
===== Особенности настройки OpenVPN в iOS =====
 +
 +
Наиболее важный момент настройки заключается в том, что закрытый ключ клиента должен быть в формате RSA. Если вы делали все согласно инструкции на сайте OpenVPN, или у вас уже были готовые ключи, то их необходимо предварительно конвертировать. Для этого можно использовать openssl:
 +
 +
openssl rsa -in ios.key -out ios_rsa.key
 +
 +
 +
Соберем все необходимые ключи и сертификаты в один PKCS#12 контейнер:
 +
 +
openssl pkcs12 -export -in ios.crt -inkey ios_rsa.key -certfile ca.crt -name ios -out ios.p12
 +
 +
 +
Обязательно укажите пароль для экспорта. Установить контейнера без пароля на экспорт в связку ключей iOS не получится. Полученный контейнер передаем на устройство через электронную почту или Safari.
 +
 +
Скачать клиент OpenVPN Connect можно из iTunes.
 +
Ограничения, присутствующие в приложении:
 +
* Размер файла настроек не может превышать 256KB. Тем не менее, этого должно быть достаточно даже для хранения файла конфигурации в унифицированном ovpn формате, о котором будет сказано чуть позже.
 +
* Поддерживаются только tun соединения из-за ограничений iOS VPN API.
 +
* Не поддерживается ряд директив в конфигурационном файле: dev tap, tls-remote, fragment, mssfix.
 +
* Не поддерживается работа клиентов без сертификатов. Эта возможность появится в будущем релизе.
 +
* Возможно использовать только шифрование AES или Blowfish. Связано это с тем, что данные алгоритмы больше адаптированы под архитектуру ARM. Таким образом достигается большая энергоэффективность.
 +
* Использование HTTP прокси настраивается на уровне настроек приложения, а не в конфигурационном файле.
 +
* Использование контейнеров PKCS#12 возможно только, если они импортированы в связку ключей iOS. Такое поведение является настоятельной рекомендацией разработчиков, потому, что в отличие от хранения закрытого ключа прямо в ovpn файле, оно обеспечивает более высокий уровень сохранности секретных данных. Особенно в случае использования устройства с jailbreak.
 +
 +
=== Ссылки ===
 +
 +
[https://ru.wikipedia.org/wiki/VPN Что такое VPN]
 +
[http://wiki.dieg.info/openvpn Статья об OpenVPN на wiki "IT рабочие заметки"]
 +
[https://help.ubuntu.com/lts/serverguide/openvpn.html Статья на wiki Ubuntu]
 +
[https://habrahabr.ru/post/168853/ "Настройка OpenVPN в iOS" на habrahabr.ru]

Версия 13:58, 13 декабря 2016

OpenVPN

(англ. Virtual Private Network — виртуальная частная(закрытая) сеть)

Файл настройки сервера

Минимально рабочий вариант.

port 1194
proto udp
dev tun
topology subnet
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/OpenVPN_srv.crt
key /etc/openvpn/easy-rsa/keys/OpenVPN_srv.key  # This file should be kept secret
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
server 10.8.0.0 255.255.255.0
push "route 10.8.0.0 255.255.255.0"
push "route 192.168.200.0 255.255.255.0"
push "route 192.168.7.0 255.255.255.0"
push "dhcp-option DNS 192.168.7.7"
push "dhcp-option DNS 80.254.107.129"
push "dhcp-option DOMAIN vlgd61.ru"
keepalive 10 120
tls-auth ta.key 0 # This file is secret
comp-lzo
user nobody
group nogroup
persist-key
persist-tun
status openvpn-status.log
verb 3
mute 20

Файл настройки клиента

Минимально рабочий вариант.

client
dev tun
proto udp
remote 80.254.107.129 1194
resolv-retry infinite
nobind
key-direction 1
persist-key
persist-tun
comp-lzo
verb 3
mute 20
float
<ca>
Содержимое сертификата центра сертификации.
</ca>
<tls-auth>
Содержимое TLS ключа. Должно содержаться в секрете!
</tls-auth>

Создание ключей

Скопируем easy-rsa в каталог /etc/openvpn. Это гарантирует, что любые изменения в сценарии не будут потеряны при обновлении пакета.

mkdir /etc/openvpn/easy-rsa/
cp -r /usr/share/easy-rsa/* /etc/openvpn/easy-rsa/

Отредактируйте /etc/openvpn/easy-rsa/vars

Ключевая пара удостоверяющего центра

Выполнить от пользователя имеющего права записи в /etc/openvpn/easy-rsa/keys/

cd /etc/openvpn/easy-rsa
./clean-all
source vars
./build-ca

После выполнения последней команды будут записаны файлы открытой и закрытой части ключа удостоверяющего центра в /etc/openvpn/easy-rsa/keys/

Ключевая пара сервера к которому мы будем подключаться

./build-key-server myservername

где myservername имя файла ключа.

Файл параметров Диффи-Хэлмана

./build-dh 

Ключ TLS аутентификации

openvpn --genkey --secret ta.key

Ключевая пара клиента

  • Импортировать из файла vars переменные окружения командой
source ./vars
  • Создать ключ клиента client1 командой
./build-key client1

После создания пары ключей клиента, на клиент, кроме файла настройки, необходимо также передать по защищённому каналу связи открытую и закрытую часть ключей клиента, открытую часть ключа удостоверяющего центра и ключ TLS аутентификации.

  • Отозвать ключ клиента
cd /etc/openvpn/easy-rsa
source ./vars
./revoke-full client1
Особенности настройки OpenVPN в iOS

Наиболее важный момент настройки заключается в том, что закрытый ключ клиента должен быть в формате RSA. Если вы делали все согласно инструкции на сайте OpenVPN, или у вас уже были готовые ключи, то их необходимо предварительно конвертировать. Для этого можно использовать openssl:

openssl rsa -in ios.key -out ios_rsa.key


Соберем все необходимые ключи и сертификаты в один PKCS#12 контейнер:

openssl pkcs12 -export -in ios.crt -inkey ios_rsa.key -certfile ca.crt -name ios -out ios.p12


Обязательно укажите пароль для экспорта. Установить контейнера без пароля на экспорт в связку ключей iOS не получится. Полученный контейнер передаем на устройство через электронную почту или Safari.

Скачать клиент OpenVPN Connect можно из iTunes. Ограничения, присутствующие в приложении:

  • Размер файла настроек не может превышать 256KB. Тем не менее, этого должно быть достаточно даже для хранения файла конфигурации в унифицированном ovpn формате, о котором будет сказано чуть позже.
  • Поддерживаются только tun соединения из-за ограничений iOS VPN API.
  • Не поддерживается ряд директив в конфигурационном файле: dev tap, tls-remote, fragment, mssfix.
  • Не поддерживается работа клиентов без сертификатов. Эта возможность появится в будущем релизе.
  • Возможно использовать только шифрование AES или Blowfish. Связано это с тем, что данные алгоритмы больше адаптированы под архитектуру ARM. Таким образом достигается большая энергоэффективность.
  • Использование HTTP прокси настраивается на уровне настроек приложения, а не в конфигурационном файле.
  • Использование контейнеров PKCS#12 возможно только, если они импортированы в связку ключей iOS. Такое поведение является настоятельной рекомендацией разработчиков, потому, что в отличие от хранения закрытого ключа прямо в ovpn файле, оно обеспечивает более высокий уровень сохранности секретных данных. Особенно в случае использования устройства с jailbreak.

Ссылки

Что такое VPN Статья об OpenVPN на wiki "IT рабочие заметки" Статья на wiki Ubuntu "Настройка OpenVPN в iOS" на habrahabr.ru