АРХИТЕКТУРА КЛИЕНТ/СЕРВЕР. При двух OpenVPN узлах (boxes) вы должны один объявить как сервер, а другой как клиент. Любой узел (box) может быть объявлен или сервером или клиентом, но в некоторых случаях только один из узелов может быть сервером, а другой клиентом. Давайте посмотрим когда это происходит. Перед установлением VPN, клиент должнет создать соединение с сервером по специальному порту, в то время как серверу этого делать не надо. Давайте возьмем пример, где вы на работе и хотите установить VPN с домашним компьютером на прямую подсоединенным к Интернету. В этом распространеном случае клиент может достигнуть сервера, но не наоборот. Это связано с тем, что клиент находится в локальной сети, и получает доступ в Интернет через прокси или Firewall, которые изменяют IP адрес отправителя. Тем не менее, когда туннель создан, двунаправленная передача внутри него возможна. ![]() КОНФИГУРАЦИОННЫЙ ФАЙЛ Создайте файл, где вы будете хранить настройки OpenVPN. В нашем примере мы назовем файл config.txt и сохраним его в /home/user/ или "C:\Program Files\OpenVPN\config\" директории в зависимости от операционной системы Linux/Unix или Microsoft. Параметры настройки описаны в следующих разделах. НАЗНАЧЕНИЕ УЗЛА КЛИЕНТОМ/СЕРВЕРОМ
РЕЖИМ ТУННЕЛИРОВАНИЯ Вы можете выбрать между IP (TUN драйвер) или Ethernet (TAP драйвер) туннелем. IP туннелирование называют еще режимом маршрутизации, а Ethernet туннель режимом моста. Предпочтительно использовать IP туннелирование (включен по умолчанию), если вам не нужно передавать Ethernet трафик через туннель (например NetBIOS). ПРОТОКОЛ И ПОРТ ТУННЕЛЯ По умолчанию для туннелирования используется порт UDP 1194. Рекомендуется изменять порт только в том случае, если этого требует ваш Firwall. Предпочтительно использовать UDP порты, так как использование TCP может привести к снижению производительности. Так как большинство приложений используют TCP, тогда при использовании TCP туннеля эти приложения будут создавать TCP через TCP туннель. Такие туннели не рекомендуются использовать, так как это может привести к уменьшению производительности и увеличению времени ответа. Поэтому предпочтительно использовать UDP протокол для создания туннеля. Прочитайте эту статью чтобы узнать более подробно о проблемах связанных с TCP через TCP туннели.
НАСТРОЙКИ FIREWALL Вы должны убедиться, что ваш OpenVPN клиент может установить соединение с сервером. Ниже приведен пример правила безопасности, которое может быть включено в Firewall, позволяющее клиенту установить связь с сервером. ![]() Из-за легкости конфигурирование OpenVPN, основные проблемы связанные с установлением соединения, возникают из-за ограничений на порты со стороны клиента и/или сервера. ETHERNET/IP ТУННЕЛЬ. Вы можете создать или Ethernet (Мост) или IP (Маршрутизация) VPN с помощью соответствующих сетевых драйверов TAP или TUN. Эти драйвера доступны на всех платформах и входят в ядро Linux с версии 2.4. Рекомендуется использовать TUN (выбран по умолчанию), если вам не нужно передавать Ethernet трафик, например NetBIOS. Для проверки загружены драйвера или нет, нужно выполнить команду:
tun 12672 1 Заметим что "tun" драйвер включает в себя и TAP драйвер. Если драйвер не загружен, тогда вы можете загрузить его следующим образом:
АРХИТЕКТУРА БЕЗОПАСНОСТИ OPENVPN 1) Прозрачный туннель. В таком режиме OpenVPN создает туннель без аутентификации, шифрования и проверки целосности данных. Другими словами, данные передаваемые через этот туннель могут быть легко прочитаны.
2) Разделяемые ключи. Один и тот же постоянный ключ используется между всеми VPN шлюзами.
#openvpn /home/teddybear/openvpn/config.txt >openvpn "C:\Program Files\OpenVPN\config\config.txt" 3) SSL/TLS. - SSL/TLS сервер или клиент:
- Сертификаты и открытые ключи: Каждый узел должен иметь свои закрытый и открытый ключи, последний должен быть включен в сертификат. Каждый узел также должен иметь CA (Certification Authority) сертификат.
Настройки Diffie-Hellmann (DH): Когда OpenVPN узлы уверены в подлинности друг друга, DH может быть использован для создания закрытого разделяемого ключа для хэш функции и алгоритма шифрования. Комбинируя DH закрытый ключ с отрытым DH ключом другого OpenVPN узла, возможно создать закрытый разделяемых ключ, который будет известен только этим двум OpenVPN узлам.
Этот ключ будет использоваться алгоритмом симметричного шифрования и хэш функцией, как это будет показано в следующих двух параграфах. АЛГОРИТМ ШИФРОВАНИЯ
- Конфиденциальность данных обеспечивается симметричными алгоритмами шифрования 3DES или AES. По умолчанию используется алгоритм Blowfish. Список доступных алгоритмов можно получить так:
DES-CBC 64 bit default key (fixed) IDEA-CBC 128 bit default key (fixed) RC2-CBC 128 bit default key (variable) DES-EDE-CBC 128 bit default key (fixed) DES-EDE3-CBC 192 bit default key (fixed) DESX-CBC 192 bit default key (fixed) BF-CBC 128 bit default key (variable) RC2-40-CBC 40 bit default key (variable) CAST5-CBC 128 bit default key (variable) RC5-CBC 128 bit default key (variable) RC2-64-CBC 64 bit default key (variable) AES-128-CBC 128 bit default key (fixed) AES-192-CBC 192 bit default key (fixed) AES-256-CBC 256 bit default key (fixed) CBC (Cipher Block Chaining) это режим шифрования используемый блочными алгоритмами шифрования такими как AES, DES или Blowfish. CBC использует маленькие порции данных, вместо обработки всего блока за один раз. Другие доступные режимы шифрования: EBC, OFB, CFB. Рекомендуется использовать CBC. АЛГОРИТМЫ ХЭШ ФУНКЦИЙ - Целостность данных (защита от их изменения) достигается использованием хэш функций. HMAC часто используется в дополнении с SHA1 или MD5. OpenVPN использует по умолчанию HMAC-SHA1. Список доступных алгоритмов можно получить так:
MD2 128 bit digest size MD5 128 bit digest size RSA-MD2 128 bit digest size RSA-MD5 128 bit digest size SHA 160 bit digest size RSA-SHA 160 bit digest size SHA1 160 bit digest size RSA-SHA1 160 bit digest size DSA-SHA 160 bit digest size DSA-SHA1-old 160 bit digest size MDC2 128 bit digest size RSA-MDC2 128 bit digest size DSA-SHA1 160 bit digest size RSA-SHA1-2 160 bit digest size DSA 160 bit digest size RIPEMD160 160 bit digest size RSA-RIPEMD160 160 bit digest size MD4 128 bit digest size RSA-MD4 128 bit digest size
"openvpn --show-tls" отображает алгоритмы шифрование и MAC (Message Authentication Code) используемый SSL/TLS во время установления соединения. Их не нужно путать с шифрованием и MAC используемых для обеспечения безопасности OpenVPN туннеля. IP АДРЕСА. Выберите адреса которые вы хотите использовать внутри туннеля. 1) Статические IP адреса: В режиме маршрутизации выбираются два IP адреса (локальный и удаленный) внутри одной сети с 30 битной маской. В режиме моста необходимо выбрать IP адрес для локального OpenVPN узла и указать маску сети, включающую IP адрес сервера.
2) Динамические IP адреса. В этом случае сервер имеет статический IP адрес и раздает IP адреса клиентам как DHCP сервер.
ДОПОЛНИТЕЛЬНЫЕ НАСТРОЙКИ. OpenVPN имеет много дополнительных параметров настроек, которые можно посмотреть в документации по OpenVPN. НАСТРОЙКИ ПРОТОКОЛИРОВАНИЯ (логирования). Подробность ведения протокола конфигурируется от 0 (минимум) до 15 (максимум). Для обычных условий достаточно будет 2-4. # Уровень подробности. # 0 -- только фатальные ошибки. # 1 -- нефатальные сетевые ошибки. # 3 -- средний уровень. # 9 -- подробный.
OPENVPN ПОЛЬЗОВАТЕЛЬ. По причинам безопасности, всегда лучше запускать приложения без привилегий администратора. Вы можете ограничить привилегии OpenVPN демона после его инициализации, указав ему работать под пользователем "nobody". Используя "chroot" возможно также ограничить доступ к файлам после инициализации. Заметим что эти настройки доступны только для Linux/Unix систем, но не Windows. Еще одна причина для использования ПО с открытым исходным кодом как Linux OS ...
ЗАПУСК OPENVPN. Используете следующий синтаксис для запуска OpenVPN.
Ниже два примера для Linux и Windows, где "config.txt" - конфигурационный файл:
ПРОВЕРКА ПРОТОКОЛА (лога) Протокол должен заканчиваться следующей строкой: Initialization Sequence Completed Это означает, что OpenVPN туннель создан успешно. ПРОВЕРКА СОЕДИНЕНИЯ Стандартная утилита для проверки IP соединений - ping. VPN узел должен пинговать туннельный IP адрес другого узла. В нашем случае, мы пингуем клиентский туннельный IP адрес из сервера:
ПРОВЕРКА OPENVPN. Вскоре ожидается ...
|