Openvpn что это за программа и нужна ли она
Для чего использовать OpenVPN
Что такое OpenVPN
Примечание. TCP (Transmission Control Protocol) и UDP (User Datagram Protocol) — протоколы транспортного уровня, которые отвечают за передачу данных в интернете.
Безопасность OpenVPN обеспечивается с помощью шифрования и аутентификации посредством библиотеки OpenSSL, ключей шифрования и шифров высокого уровня. В 2017 году VPN Private Internet Access провела аудит безопасности Open VPN, в результате которого разработчики протокола исправили найденные баги и уязвимости. Так что после 2017 года Open VPN стал ещё безопаснее.
Как работает OpenVPN
OpenVPN — наиболее удобная реализация VPN, которая позволяет решать те же задачи, плюс имеет дополнительные возможности.
Например, позволяет усовершенствовать процедуру авторизации и аутентификации пользователя за счёт привлечения сторонних плагинов и скриптов.
Также, OpenVPN можно использовать, чтобы легко соединить два хоста или сети безопасным туннелем типа «точка — точка». В этом формате OpenVPN может работать со статическими ключами ( key), без сертификатов. Кроме того, эти ключи генерирует сам OpenVPN.
Идентификация осуществляется по ключу, адреса хостов никак не учитываются. Благодаря этой возможности, OpenVPN удобен для соединений с хостами без статического адреса и хостами за NAT.
Как начать работу с OpenVPN
Установка и настройка OpenVPN может вызвать сложности, но если действовать по инструкциям, то особого труда не составит провести настройку как на стороне сервера, так и на стороне клиента.
Подробнее про установку рецепта мы написали в этой статье.
Зачем нужен OpenVPN. Области применения данной технологии
Области применения технологии OpenVPN : для безопасного объединения сетей или серверов с помощью сети Интернет, для обхода блокировок локальных сетевых экранов или ограничений провайдеров, для осуществления контроля за использованием сетевого трафика в рамках одной сети, в качестве безопасного доступа на сервер или в Сеть и другое.
OpenVPN в основном применяют в качестве механизма защиты для частной Сети. Использовать подобный инструмент с открытым исходным кодом можно с целью полноценной разработки зашифрованного канала. Работатают с OpenVPN в режимах: точка-точка или сервер-клиенты. Считается по праву довольно полезным методом шифрования между компьютерами в условиях конкретной сети.
Для пользователя данной технологией предоставляется пару видов аутентификации:
Первый, с помощью предустановленного ключа, это по сути наиболее простой способ.
Второй, это сертификатная аутентификация, которая является очень гибкой в процессе настройки. И на завершение третий: с помощью логина и пароля (может работать без создания клиентского сертификата, но серверный сертификат все равно нужен).
OpenVPN использует статические, предустановленные ключи или обмен динамическими ключами на основе TLS. Существует поддержка соединения VPN с динамическими удалёнными узлами (DHCP или клиенты dial-up), туннели поверх NAT или с помощью полноценного межсетевого экрана.
Бесплатные и платные VPN-сервисы. Что выбрать?
OpenVPN хорошо совмещен и связан с OpenSSL библиотеками, поэтому механизмы шифрования основаны в основном на нем.
OpenVPN портирован в MacOS X — существует свободно распространяемый проект tunnelblick. Нет поддержки параметра TCP_NODELAY ядром этой ОС. Разработан коммерческий проект viscocity для этой ОС. OpenVPN часто используют на маршрутизаторах некоторых производителей: Linksys и Mikrotik и другие.
Кроме всех выше перечисленных преимуществах, применение в OpenVPN стандартных протоколов TCP и UDP, дает возможность стать альтернативой IPsec в случаях, когда Интернет-провайдер блокирует некоторые VPN протоколы.
Как обеспечить онлайн безопасность? 7 советов для работы в Сети.
Зачем платить за VPN? Почему я выбрал сервис OpenVPN
Последнее время всех будоражит вопрос настройки VPN. Если раньше о существовании VPN (Virtual Privat Network) знали системные администраторы, программисты и продвинутые пользователи, то сейчас эта аббревиатура у всех на устах. Каждый хочет настроить его, использовать для доступа к заблокированным сервисам или социальным сетям. А некоторым просто интересно, что это за зверь такой. Что же на самом деле собой представляет этот загадочный VPN? Если в двух словах, то с помощью VPN создается учacтoк ceти к кoтopoму имeeтe дocтуп тoлькo вы. Вся информация проходит через провайдера или какую-либо другую третью точку доступа, но в зашифрованном виде по специально созданному между сервером и вашим компьютером виртуальному каналу. Потом уже сервер от имени пользователя начинает путешествовать по интернету.
Таким образом, создается «тоннель» между компьютером и сервером, в котором вся информация зашифрована, и провайдер не понимает, на какой сайт переходит пользователь. Хакеры не смогут украсть ваши данные даже при подключении к публичному Wi-Fi, а история посещения сайтов будет доступна только вам.
Для чего нужен VPN
Прежде всего он необходим для анонимных действий в Интернете, для сокрытия вашего реального IP-адреса. Мне, например, не нравится, что любой системный администратор моего провайдера может при желании узнать, какие сайты посещаю, что покупаю и главное — как и чем расплачиваюсь. Также каждого беспокоит безопасность и конфиденциальность файлов. VPN-протоколы используют несколько протоколов шифрования (MD5-HMAC, RSA) и 2048-битные ключи позволяют осуществить параноидальное шифрование всех данных.
VPN-сервисы можно использовать для обхода блокировки провайдером или системным администратором на работе различных сайтов и социальных сетей. Некоторые сервисы ограничивают доступ в вашей стране или предоставляют скидки/привилегии/бонусы только в конкретных странах. VPN-соединение поможет вам стать резидентом этой страны и пользоваться сервисом в своё удовольствие. Но больше всего меня радует возможность эффективного сжатия трафика, которое позволяет компенсировать потери, а иногда даже ускорить соединение.
В наше время почти не найдется пользователя, который бы не пользовался бесплатным Wi-Fi в кафе, гостинице или ином общественном месте. Все мы знаем об опасностях такого действа. Именно VPN поможет защитить ваше устройство от взлома, потери данных, паролей и т.д. Я хочу пролить свет на настройку и использования платного VPN и поделиться своим определенным опытом. Поначалу использовал бесплатные сервисы VPN, но 2 с лишним года назад решил обзавестись домашним сервером. Вот тут-то и возник вопрос приобретения платного VPN. Мой выбор пал на OpenVPN.
Почему я выбрал OpenVPN?
Когда стал вопрос о том, что мне необходим платный протокол VPN-соединения, то решил почитать немного о такой услуге, походил по сайтам и форумам, поспрашивал друзей, знакомых, системных администраторов. Большинство из них хвалили именно OpenVPN.
За почти 2 года использования я убедился, что они были правы. Протокол VPN-соединения работает без сбоев, стабильно и безопасно. Важным плюсом является наличие мобильных приложений клиента для Android, iOS, Windows 10 Mobile. Есть даже возможность использовать его без установки клиента, используя стандартные настройки VPN в Windows 10. Самое главное — шифрование моих файлов. Еще ни разу OpenVPN не подводил меня. А при наличии домашнего сервера — это один из главных плюсов при выборе VPN-клиента. Да и цена вполне приемлема. Высокое качество технической поддержки.
Настройка OpenVPN-клиента для Windows 10
Нам понадобится установочный файл клиента, который легко найти по ссылке.
Важно выбрать установщик с вашей разрядностью системы.
После того, как ваш ПК загрузит установщик, запустите его и следуйте простым указанием. Сама установка очень проста и понятна. Достаточно начальных знаний английского языка.
На Рабочем столе вашего устройства появится ярлык программы. Кликаете по нему правой кнопкой мыши и перейдите в раздел Свойства. А там нажмите на опцию Дополнительно. Нам необходимо разрешить клиенту запускаться от имени администратора. Пару манипуляций и все готово.
Теперь необходимо зайти в Проводник. Пройдя путь C:\Program Files\OpenVPN, откройте папку config и извлеките из полученного на почту при покупке подписки, либо скачанного из личного кабинета архива файлы с расширением .ovpn
Теперь останется только запустить снова клиент OpenVPN и подключится к нужному серверу. Несколько секунд и у вас появится VPN-соединение к примеру с местоположением в Люксембурге.
Как видите, ничего сложного. Но многие задали наверно себе вопросы: «Где брать файлы? Как их купить? Это же дорого?»
Для этого вам необходимо зарегистрироваться на сайте, которую пройти очень легко и просто.
Затем следует зайти в раздел Мои лицензии
и совершить покупку. Правда, сможете купить не меньше 10 клиентов OPenVPN, которые обойдутся вам в год всего лишь 150 долларов. Согласитесь, не так уж и дорого.
Выбираете из списка понравившийся вам VPN-сервер, скачиваете его в формате .ovpn. Запускаете клиент OpenVPN и подключаетесь к выбранному вами серверу. Только будьте готовы к тому, что бесплатный VPN-сервер-это реклама, незащищенность и нет никакого шифрования.
Какие есть альтернативы OpenVPN?
Последнее время на рынке очень много VPN-решений как платных, так и бесплатных. До OpenVPN я использовал Hotspot Shield, у которого есть также бесплатная версия и расширение для браузера Google Chrome. Бесплатная версия мне не понравилась, потому что вечно доставала меня сообщениями, что у них есть Elite версия, которая якобы лучшая в мире и т.д. Хотя из личного опыта скажу, что часто в работе данный VPN-сервис подтормаживал, защиты очень мало и плохое шифрование. База доступных IP-адресов незначительная.
Довольно популярный в кругу продвинутых пользователей VPN-сервис Zenmate, имеющий немецкое происхождение. Довольно качественный, быстрый в платной версии, удобная защита и шифрование. Есть бесплатное расширение для браузеров, но там всего 5 свободных каналов. Поэтому пользоваться им неудобно. Плюс он требует регистрации, а потом достает рассылкой с рекламой и предложениями купить коммерческую версию.
Наверно многие в последние дни слышали и читали о VPN-сервисе TunnelBear с логотипом прикольного медвежонка. Он тоже имеет бесплатную версию, правда с ограниченным трафиком всего 500 МБ в месяц. Очень простой в управлении, легко включить и выключить одним нажатием. Но у знакомого стоит платная версия TunnelBear и он вечно жалуется, что сильно падает скорость соединения, иногда в 5 и более раз. Обращался в центр поддержки, где ответили, что это из-за защиты, которую они обеспечивают.
В сухом остатке
Как видите на рынке довольно много VPN-сервисов. Если вам необходимо как-то скрывать свой IP-адрес, чтобы использовать запрещенные или ограниченные в доступе у нас сервисы, то смело покупайте VPN-протокол. Все зависит от вашего желания и финансовых возможностей. По поводу бесплатных VPN помните, что за все нужно платить. Как говорит мой один знакомый: «Бесплатно — не значит даром».
Для тех, кто хочет знать больше
Подписывайтесь на наш нескучный канал в Telegram, чтобы ничего не пропустить.
OpenVPN, о котором вы так мало знали
OpenVPN, как много в этом слове. Мультиплатформенный, гибко настраиваемый, бесплатный VPN сервер с открытым исходным кодом, являющийся фактически стандартом «defacto» для организации доступа к внутренним корпоративным сетям. Большинство администраторов используют его с настройками по умолчанию или с типовыми конфигурациями широко описанными в разных HOW-TO. Но так ли прост OpenVPN, как он кажется на первый взгляд? В данной статье мы рассмотрим скрытые от глаз внутренние механизмы OpenVPN, которые кардинально меняют представление о его возможностях.
OpenVPN сервер распространяется в виде исходного кода или готовых к установке скомпилированных пакетов для различных операционных систем. В качестве библиотеки обеспечивающей шифрование используется OpenSSL.
Большинство конфигураций для связи клиентов с сервером, а также между серверами, предполагает использование связки приватных или приватно/публичных ключей для обеспечения безопасности внутреннего трафика. Для корпоративных сетей в режиме MultiPoint-To-SinglePoint обычно используется свой центр сертификации PKI, который легко строится либо при помощи easy-rsa, либо на основе XCA. Для межсервенной коммуникации типа Point-to-point, в основном используется конфигурация с общим ключом. Вспомним основные, всем известные механизмы и возможности.
Основные механизмы и возможности
Сертификатная аутентификация
Про неё написано огромное количество документации. Суть проста. Создаётся свой центр сертификации, который выпускает пользовательские сертификаты. С помощью центра сертификации обеспечивается контроль за подключением пользователей к OpenVPN серверу. При окончании времени действия сертификата или его отзыве, доступ пользователя блокируется. Приватные ключи с установленым на них паролем, выпускаемые совместно с сертификатом обеспечивают безопасность от несанкционированного подключения к внутренним ресурсам.
Приватные point-to-point ключи
С точки зрения подключения к ресурсам компании только одного пользователя/сервера, используется схема с приватными ключами. На одном из хостов генерируется ключ, который является общим для сервера и клиента.
Во всех случаях подключения для безопасности «рукопожатия» handshake между клиентом и сервером используется протокол Diffie-Hellmann.
Внешняя аутентификация пользователей
Для упрощения контроля за подключением пользователей, вместо схемы со своим PKI, можно использовать схему с внешней аутентификацией пользователей по логину/паролю. Данная схема удобна для аутентификации пользователей скажем по доменному логину/паролю. Для подключения к серверу в конфигурационный файл клиента добавляется сертификат сервера и ключ подписи передаваемых пакетов HARDENING OPENVPN SECURITY.
пример клиентского конфига
Часть серверного конфига для аутентификации клиентов через файл
Using alternative authentication methods
Данная схема удобна, но очень небезопасна.
Для повышения безопасности можно использовать подключаемые модули обеспечивающие проверку логина/пароля во внешних системах. Самым распространённым методом является системный PAM(Pluggable Authentication Modules).
В конфигурационный файл OpenVPN необходимо добавить строку
Маршрутизация
Т.к. основной задачей сервера является обеспечение доступа удалённых пользователей/серверов к внутренним ресурсам, сервер позволяет определять статическую маршрутизацию от клиентов к серверу и от сервера к клиентам. С точки зрения доступа клиентов к внутренним ресурсам, сервер при помощи протокола DHCP и директив «route» или «push route» позволяет передать клиенту маршруты внутренних сетей. Для оповещения самого сервера об удалённых сетях на стороне клиента используется «client config dir» (ccd), механизм позволяющий описать при помощи директивы «iroute» список внутренних сетей клиента, которые должны попасть в таблицу маршрутизации сервера для транзита в них трафика.
На этом «штатные» широкоиспользуемые возможности заканчиваются и начинается локальная кастомизация для каждого конкретного случая.
Дополнительные возможности OpenVPN
Рассмотрим дополнительные возможности OpenVPN, о которых может кто-то и слышал, но в реальности не видел или не использовал.
Безопасность сетей/Packet Filtering
Директивы блока (ACCEPT/DENY) задают действие по умолчанию для всех клиентов не указанных внутри блока.
Например файл для клиента user2
заблокирует трафик ко всем пользователям и сетям, но разрешит трафик в сторону клиента user1. Если у user1 не будет явным образом описано разрешение передачи трафика в сторону user2, то трафик будет ходить только в одну сторону user2->user1.
Или другой пример.
Отключить всё кроме доступа между пользователями и DNS сервером находящимся в локальной сети и тестовым контуром в сети 192.168.0.0/24
Механизм фильтрации активируется через конфигурационный файл, либо при подключении плагина «выставившего» флаг «OPENVPN_PLUGIN_ENABLE_PF».
Данную возможность мы обсудим позже.
Вторым режимом фильтрации трафика является встроенный в систему пакетный фильтр. Для его активации в конфиге не должно быть директивы «client-to-client». С точки зрения автоматизации включения/выключения необходимых правил при подключении/отключении клиентов удобнее всего использовать отдельные вставки в список правил, реализуемые либо через CHAINS в Iptables(Linux), либо в Anchors в PF(FreeBSD). Активация/деактивация правил обычно осуществляется через директивы client-connect/client-disconnect в конфигурационном файле сервера, вызывающие соответствующие скрипты при подключении/отключении пользователя.
Расширенная PAM аутентификация
Под расширенной PAM аутентификацией подразумевается изменение логики работы проверки логина и пароля пользователя. Достигается это либо установкой соответствующих плагинов для OpenVPN, обеспечивающих чтение и проверку данных во внешних источниках, либо подключением в систему библиотек позволяющих скриптовать любую логику. Одной из такой библиотек является pam_python, которая помогает скриптовать любую логику проверки логина/пароля через Python скрипты.
В случае её использования строка проверки пользователя меняется следующим образом.
Так как «под капотом» PAM находятся алгоритмы диалогов системы с пользователем или внешними библиотеками, то этими диалогами можно управлять. Например подключить OTP токены в систему. Библиотека LinOTP взята просто для примера, т.к. свою самописную библиотеку написанную во время тестирования я где-то потерял ¯\(ツ)/¯
Также примеры легко гуглятся по слову «pam_python».
Основной проблемой при работе с внешними PAM модулями является невозможность получить сессионное окружение OpenVPN внутри вызываемого Python или любого другого скрипта, вызываемого через системный pam. Т.е. скрипт обеспечивает только те функции по проверке логина/пароля, которые на него возложены.
«Отложенная» аутентификация
Сервер OpenVPN поддерживает так называемую «отложенную» аутентификацию. «Отложенная» аутентификация используется в случаях, когда сервис аутентификации не может обслужить запрос проверки логина/пароля в реальном режиме времени.
Плагины OpenVPN
Это отдельная параллельная вселенная, про которую может быть и знают, но из-за некоторой запутанности не умеют или боятся использовать. Да действительно, написание функционального плагина для OpenVPN требует программирования на C со всеми вытекающими. Примеры простых плагинов включены в исходное дерево OpenVPN или например есть плагин для демонстрации вызова методов из OpenVPN.
Попробуем разобраться как плагины работают со стороны OpenVPN.
Функции и параметры используемые для работы с плагинами описаны в отдельном файле
Основная задача плагина, при инициализации его сервером OpenVPN, передать список поддерживаемых плагином функций и при вызове любой из функций вернуть правильный код ответа, который будет понятен серверу.
Остановимся поподробнее на каждой группе. Логику работы мы будем рассматривать на основе парольной аутентификации пользователя.
При старте сервера, после чтения конфигурационного файла, сервер вызывает функции OPENVPN_PLUGIN_UP и OPENVPN_PLUGIN_ROUTE_UP. В переменном окружении вызываемых функций передаются основные параметры запущенного сервера.
Данные функции можно использовать для оповещений при старте сервера либо смене конфигурации.
При подключении клиента, OpenVPN запрашивает возможность активации внутреннего пакетного фильтра.
Как видно из дампа, появилась переменная pf_file. В данном файле должны находиться правила внутреннего пакетного фильтра для текущей обрабатываемой сессии.
Далее проверяется логин и пароль пользователя в функции OPENVPN_PLUGIN_AUTH_USER_PASS_VERIFY
Это единственное место где пароль в переменном окружении присутствует в открытом виде.
Результатом работы данной функции должны быть три варианта ответа.
Если сервер получает ответ OPENVPN_PLUGIN_FUNC_DEFERRED, то в работу вступает механизм «отложенной» аутентификации. Как мы видим, в переменном окружении появилась переменная «auth_control_file», содержимое данной переменной содержит имя файла, в котором будет ожидаться ответ от системы аутентификации. Ответом является помещённый в указанный файл символ 0(для разрешения доступа), 1(для запрета доступа). Параметр сервера «hand-window» определяет таймаут в секундах, в течении которого сервер будет ожидать ответ. Во время ожидания трафик от других клиентов не прерывается.
Так как мы работаем с парольной аутентификацией, то функции проверки сертификатов OPENVPN_PLUGIN_TLS_VERIFY не вызывается. Вместо этого сразу вызывается OPENVPN_PLUGIN_TLS_FINAL, подтверждающий установление сессии.
Далее срабатывает вызов OPENVPN_PLUGIN_IPCHANGE, вызываемый перед сменой ip адреса клиента.
Функция OPENVPN_PLUGIN_CLIENT_CONNECT_V2, вызывается при установке IP адреса внутренним DHCP сервером.
В переменном окружении появляются переменные содержащие параметры туннеля «ifconfig_pool_local_ip» и «ifconfig_pool_remote_ip».
Функция OPENVPN_PLUGIN_LEARN_ADDRESS вызывается при обучении OpenVPN сервером, связки IP адресов и маршрутов к ним. После выхода из этой функции активируется процедура применения настроек пакетного фильтра из файла. Переменное окружение OPENVPN_PLUGIN_LEARN_ADDRESS при этом соответствует фазе OPENVPN_PLUGIN_CLIENT_CONNECT_V2.
При отключении клиента вызывается функция OPENVPN_PLUGIN_CLIENT_DISCONNECT.
В переменном окружении добавляются длительность соединения и трафик пользователя.
Как вы успели заметить, в связи с обилием данных в разных вызовах, написание и отладка плагина на языке программирования C(C++) будет довольно трудоёмкой задачей.
Для расширения функционала было решено сделать «чудо» сначала для внутреннего проекта, а потом выложить его в свободный доступ 🙂
После долгого чтения исходных кодов OpenVPN и различных примеров узкоспециализированных плагинов, был написан проект, который в качестве языка программирования логики обработки сессии использует Python. Код представляет собой подключаемый к OpenVPN плагин на языке C, который все запросы поступающие в плагин, отправляет в Python модуль через c-api reference.
Python c-api reference работая с python файлами напрямую, некорректно работает с загрузкой python библиотек.
При инициализации плагина в OpenVPN, плагин возвращает масочный список всех функций, которые может обслужить. При наступлении очередной фазы подключения или внутреннего события, OpenVPN вызывает соответствующие функции из плагина. Плагин преобразует переменное окружение и параметры переданные функции в структуру, инициализирует python и передаёт структуру в соответствующую процедуру python модуля. Процедура возвращает плагину один из трёх ответов (0 — Success, 1 — Error, 2 — Deferred). Ответ транформируется и возвращается OpenVPN.
Обратите внимание, что все вызовы модуля являются «stateless», это означает, что процедуры не помнят и не знают, что происходило ранее в других вызовах. Ориентироваться можно только на переменное окружение передаваемое плагину из OpenVPN.
Внутри python модуля вы можете реализовать любую логику, подключая нужные библиотеки и ресурсы. Если вы не уверены в скорости выполнения проверок, то используйте «отложенные» подтверждения.
Используя группировку пользователей подключаемых к сервису, через pf_file можно довольно тонко настроить сетевое взаимодействие между пользователями и другими ресурсами. В свою очередь подключив плагин на мониторинг, всегда можно будет через management интерфейс OpenVPN управлять сессиями клиентов.
Во время тестирования проекта был разработан механизм генерации паролей, аналогичный jwt токенам, но имеющим меньший размер.
Суть проста. Токен содержит в себе идентификатор клиента и срок окончания доступа. Для подписи токена используется HMAC_SHA1 с закрытым ключом. После подписи токена, текстовое содержимое ксорится подписью и конвертится в base64. Таким образом получается «запечатывание» токена. «Запечатанный» токен используется в качестве пароля пользователя. При несанкционированном изменении блока с данными, поломается xor, если поломается xor, значит поломается проверка подписи. Без закрытого ключа подпись изменить не получится.
Если вы не хотите руками контролировать время действия пароля, то генерируете такой токен, и проверяете его на валидность внутри плагина, не вызывая внешние сервисы. Данная схема очень удобна для сессионной генерации паролей на определенное время. При этом вы можете во внешнюю систему управления передать содержимое токена и она сама настроится на отключение пользователя по окончании действия токена.
Надеюсь информация в данной статье была вам полезна.
Спасибо за потраченное на её прочтение время.
Если есть вопросы, попробую ответить на что смогу.
© Aborche 2019