Веб интерфейс для OpenVPN

Для популярного VPN сервера, который часто используют для объединения корпоративных сетей, а также доступа удалённых пользователей к локальным ресурсам, существует множество различных способов настройки и управления. Я расскажу про наиболее известные бесплатные веб интерфейсы для управления OpenVPN сервером. За основу возьму мои заметки из Telegram канала по данной теме.

Углубленный онлайн-курс по MikroTik

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Реклама ИП Скоромнов Д.А. ИНН 331403723315

Ovpn-admin

Для OpenVPN на первый взгляд кажется, что существует много различных веб панелей. Но когда начинаешь в них разбираться, оказывается, что одна платная, а бесплатная версия урезана, другая уже давно не поддерживается, третья в какой-то своей логике всем управляет и хранит данные. На деле выбирать особо то и не из чего.

Сегодня покажу ещё один вариант, который поначалу показался каким-то костыльным из-за недостатка документации, но когда немного разобрался, решение понравилось. Речь пойдёт про open source проект от известного аутсорсера flant - ovpn-admin.

📌 У ovpn-admin следующие возможности:

  • Запуск через одиночный бинарник с передачей всех параметров через ключи. Есть готовый контейнер для автоматического запуска. Я тестировал в нём.
  • Веб интерфейс для добавления и удаления пользователей, просмотра статуса их подключения и передачи маршрутов
  • Экспортер для Prometheus и шаблон для Grafana с метриками: срок жизни сертификата, кол-во подключенных пользователей, информация о подключенных пользователях (время подключения, ip адрес, трафик)
  • Подключение пользователем с использованием пароля или без, возможность скачать готовый конфиг сразу с включённым в него сертификатом
  • Helm чарт для запуска в Kubernetes, собственно, продукт оптимизирован для запуска в кубере, может хранить сертификаты в секретах

Мне понравилось это решение тем, что оно, во-первых, полностью автоматизирует запуск сервера, а во-вторых, максимально похоже на администрирование стандартного openvpn сервера, установленного вручную. Тут всё на своих местах: конфиг сервера, шаблон конфига пользователей, директория с сертификатами, с настройками пользователей. Для тех, кто знаком с openvpn сервером не будет никаких проблем с тем, чтобы разобраться, как это всё работает.

Установка

Показываю, как запустить ovpn-admin в рабочем режиме. Не знаю, почему в самой репе не оставили краткой инструкции. Либо я её не нашёл. В общем, сделал в итоге так:

# git clone https://github.com/flant/ovpn-admin.git
# cd ovpn-admin

Теперь правим некоторые параметры docker-compose.yaml:

OVPN_PASSWD_AUTH: "true" # включена аутентификация по паролю, можно отключить, если не надо
OVPN_SERVER: "1.2.3.4:7777:tcp" # ip адрес, на котором запущен сервер и к которому будут подключаться клиенты, соответственно порт и протокол, по которому будут подключаться
OVPN_METRICS_PATH: "/metrics" # url, на котором будут жить метрики Prometheus

Остальные параметры я оставил по умолчанию. Собираем и запускаем контейнер:

# ./start.sh

Дожидаемся запуска и идём в веб интерфейс управления: http://1.2.3.4:8080/. Он будет доступен без аутентификации. Его нужно закрыть либо файрволом, либо basic_auth на прокси.

Расскажу про несколько полезных директорий и файлов:
- .ovpn-admin/easyrsa_master/pki - сертификаты пользователей
- .ovpn-admin/ccd_master - файлы конфигурации пользователей
- .ovpn-admin/setup/openvpn.conf - параметры сервера openvpn
- .ovpn-admin/templates - шаблон конфигурации клиента, настроек ccd

Структура и расположение файлов типичны для openvpn сервера. На эту панель легко переехать с работающего сервера, либо наоборот съехать, если не понравится, забрав все настройки и пользователей. Можно спокойно залезть в какие-то файлы и руками поправить параметры. Это ничего не сломает, так как всё состояние хранится только в них.

Я всё это запустил, настроил, попробовал. Добавил метрики Прома, установил шаблон Графаны. Забрать можно тут. У меня заработало сразу. На деле вроде бы и ничего особенного, но задачу по управлению и тем более мониторингу сильно упрощает. Не нужно самому парсить статус лог сервера. Там хоть и ничего сложного, я парсил для Zabbix, но тут это сделали за нас.

Ovpn-admin

Simple OpenVPN Server

В комментариях к одной из заметок проскочила ссылка на небольшой проект, где одним скриптом реализована установка OpenVPN сервера с простеньким веб интерфейсом - Simple OpenVPN Server. Я постоянно использую OpenVPN, так что решил на него глянуть, раньше не видел.

В репозитории представлен bash скрипт, который выполняет установку стандартного сервера OpenVPN, вместе с ним Nginx с запароленным доступом к небольшой админке, где можно добавлять и удалять пользователей. Больше ничего нет.

На первый взгляд ничего особенно и похожих панелей много. Но лично мне понравилась реализация. Сейчас расскажу подробнее.

Установка

Установка с помощью этого скрипта выглядит следующим образом:

# wget https://raw.githubusercontent.com/theonemule/simple-openvpn-server/master/openvpn.sh
# chmod +x openvpn.sh
# ./openvpn.sh --adminpassword=serveradmin --host=339119.simplecloud.ru --dns1=62.76.76.62 --dns2=77.88.8.1 --vpnport=1194 --protocol=udp --email=zeroxzed@gmail.com

Ключи задают: пароль администратора для доступа к админке, имя сервера для выпуска бесплатных сертификатов, dns сервера, которые будут передаваться клиентам в виде настроек, порт сервера и протокол, на котором он будет работать, email, который будет зарегистрирован в let's encrypt при выпуске сертификата.

Дальше скрипт выполняет следующие действия:

  1. Устанавливает необходимые пакеты.
  2. Загружает набор скриптов easy-rsa и генерирует необходимые сертификаты.
  3. Формирует конфигурацию openvpn на основе переданных параметров.
  4. Добавляет настройки iptables для NAT и роутинга соединений клиентов.
  5. Формирует шаблон для конфигураций пользователей.
  6. Получает сертификаты и настраивает виртуальных хост в Nginx.
  7. Скачивает скрипты для виртуального хоста, которые создают конфигурации пользователей и отзывают сертификаты.

В конце скрипт выдал ошибку на перезапуск службы apache. Не знаю, зачем там эта команда. Возможно, автор просто ошибся. Сам apache не устанавливается в систему. Я вручную перезапустил Nginx:

# systemctl restart nginx

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

Теперь отдельно про пару моментов, которые мне понравились. Реализация очень простая. Все конфигурации служб на своём месте. То есть после работы скрипта можно про него забыть и дальше управлять всем этим, как-будто вы всё поставили вручную. Скрипт установки легко читается, можно изменять.

Меня отдельно привлёк веб интерфейс, а точнее то, как он реализован. В директории /var/www/html находятся два bash скрипта: index.sh и download.sh. Их выполнение настроено в Nginx вот так:

location ~ \.sh$ {
gzip off;
fastcgi_pass unix:/var/run/fcgiwrap.socket;
include /etc/nginx/fastcgi_params;
fastcgi_split_path_info ^(.+?\.sh)(/.*)$;

Я первый раз вижу такую реализацию. В скриптах смесь html и bash. То есть по сути интерфейс управления написан на bash и привязан к кнопочкам на страничках.

Эти скрипты легко приспособить под ваш OpenVPN сервер, который управляется полностью консольно. Если вам надоело добавлять и отзывать пользователей через CLI, можете взять эти скрипты и прикрутить куда-то к себе в закрытый контур.

Реализовано там всё обычными консольными командами, типа таких:

./easyrsa build-client-full $client nopass
./easyrsa --batch revoke $client

и т.д. То есть всё максимально стандартно. Нужно будет только пути поправить под свои реалии и всё.

Вот такой необычный проект для быстрой настройки OpenVPN сервера. Мне в целом понравилось. У меня есть свои подобные скрипты для установки сервера, создания и удаления пользователей. Писал в своё время, чтобы управлять серверами.

Важно понимать, что данный веб интерфейс практически по умолчанию обладает RCE уязвимостью, поэтому использовать его можно только строго в закрытом контуре с доступом только системных администраторов, которые занимаются управлением сервером и пользователями.

"</a

Access Server

Для веб интерфейса OpenVPN сервера есть отличное родное решение - Access Server. У него есть только один минус - это платный продукт. Есть бесплатная версия с суровым ограничением - не больше двух vpn подключений к серверу. Это позволяет его использовать только для одной цели - личный сервер для единоличного использования. Да и то, лично мне двух подключений не хватит.

Если для вас такое ограничение не критично - то смело пользуйтесь. Ничего лучше нет. Можно установить на свой сервер или арендованную VPS. У многих хостеров есть готовые шаблоны, чтобы сразу развернуть установленный продукт и начать использовать.

Основные возможности:

  •  управление через веб интерфейс, cli, api
  • создание нового клиента и конфигурации для него в один клик
  • ограничение доступа клиентов по ip
  • возможность настройки протокола и порта, на котором будет работать openvpn сервер
  • логи с информацией о подключениях клиентов
  • различные способы аутентификации: ldap, radius, AD, pam

Побудило меня написать эту заметку информация о том, что для данного решения есть лекарство, которое позволяет снять ограничение бесплатной версии. Я настоятельно не рекомендую использовать подобное где-то в продакшене. В этом нет большой необходимости, так как есть аналоги, а рисков возникает много. А для личного использования можно и попробовать.

Openvpn Access Server

Рутокен VPN

В комментариях к заметке об OpenVPN был упомянут любопытный российский продукт Рутокен VPN. Меня он очень заинтересовал, так что решил его сразу же проверить. Это Open Source продукт на базе OpenVPN с веб панелью для управления.

В репозитории есть инструкция по установке. В ней указано, что сервис предназначен для работы в Ubuntu 20. Не знаю, с чем связана привязка к конкретной системе. Наверное поленились оформить поддержку остальных. Хотя бы в Docker контейнер всё это поместили бы, чтобы работало на любом Linux.

Взял Ubuntu 20.04 и установил на неё по инструкции. Там всё очень просто и быстро, не буду приводить шаги по установке. После перезагрузки зашёл по внешнему IP на веб интерфейс. Указал типовые настройки, необходимые для работы сервера OpenVPN и сгенерировал корневой сертификат.

Далее создал пользователей. Там идея такая, что пользователи могут сами заходить на веб интерфейс, генерировать себе конфигурацию, скачивать её вместе с клиентом. Сам клиент тоже Open Source, называется Рутокен VPN клиент. Он нестандартный, так как поддерживает работу с фирменным USB токеном Рутокен ЭЦП. Веб интерфейс довольно простой, как и сам функционал. Можно менять настройки сервера и управлять клиентами. Хотя у всех примерно так же, потому что это типовой функционал OpenVPN Server.

Дальше меня ждал сюрприз. Когда зашёл новым пользователем в веб интерфейс, заметил, что мне предлагают подготовить Рутокен ЭЦП для установки на него сертификата, либо сделать конфиг для смартфона. То есть идея в том, что этот продукт заточен под работу со своими родными токенами.

Тут я немного приуныл, потому что привязка к токенам резко сужает круг вероятных пользователей. Хотя если вам нужно именно это, то решение отличное. Токен сейчас стоит порядка 2500р. Неплохое решение для удалённых корпоративных пользователей, которых, кстати, можно импортировать из AD.

Потом прикинул, что формат конфигов openvpn одинаковый, что для смартфона, что для компьютера. Сделал конфигурацию для смарта, поставил на комп обычный OpenVPN Client и скормил ему этот конфиг. Без проблем подключился к серверу и вышел в интернет с его ip адресом. Отправлять весь трафик клиента через VPN - опция, которую можно указать через веб интерфейс.

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

Всё это бесплатно и от разработчика в РФ.

Рутокен VPN

Заключение

Если вы знаете, а тем более использовали какой-то ещё функциональный и удобный веб интерфейс для OpenVPN Server, поделитесь информацией в комментариях.

Забыл упомянуть ещё один важный момент. Управление OpenVPN сервером через веб интерфейс реализовано во многих программных шлюзах типа PfSense, OPNSense, Clearos и т.д.

Углубленный онлайн-курс по MikroTik.

Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Реклама ИП Скоромнов Д.А. ИНН 331403723315

Автор Zerox

Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству. Если вам интересно узнать обо мне побольше, то можете послушать интервью. Запись на моем канале - https://t.me/srv_admin/425 или на сайте в контактах.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.
Используешь Telegram? Подпишись на канал автора →
This is default text for notification bar