ServerAdmin.ru
31.6K subscribers
851 photos
57 videos
23 files
3K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Ресурс включён в перечень Роскомнадзора
Download Telegram
Впервые увидел и попробовал очень удобную панель управления для OpenVPN. Если быть точным, то это скорее панель наблюдения за пользователями OpenVPN сервера. Речь пойдёт про проект openvpn-monitor.

С его помощью можно посмотреть следующую информацию о пользователях:

▪️имя пользователя;
▪️время подключения;
▪️внутренний и внешний IP пользователя;
▪️суммарный трафик;
▪️время подключения и соответственно время онлайна;
▪️расположение пользователя на географический карте.

При желании пользователя можно отключить через веб интерфейс.

Openvpn-monitor представляет из себя веб интерфейс, написанный на Python, запущенный через обычный веб сервер Nginx или Apache. Информацию о пользователях он берёт через стандартную management console сервера OpenVPN. Её надо включить. Для этого достаточно добавить в конфиг сервера:

management 127.0.0.1 5555

или

management 0.0.0.0 5555

Не забудьте ограничить доступ к консоли с помощью файрвола. Можно ещё паролем закрыть, но я бы не рассчитывал только на него. Лучше полностью скрыть. Также можно открыть доступ к ней через unix socket. Подробности в документации.

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

Я тестировал в Docker. Показываю сразу рабочий вариант, на котором я остановился:

# docker run -d --name openvpn-monitor \
  -e OPENVPNMONITOR_DEFAULT_DATETIMEFORMAT="%%d/%%m/%%Y" \
  -e OPENVPNMONITOR_DEFAULT_LATITUDE=55 \
  -e OPENVPNMONITOR_DEFAULT_LONGITUDE=37 \
  -e OPENVPNMONITOR_DEFAULT_MAPS=True \
  -e OPENVPNMONITOR_DEFAULT_MAPSHEIGHT=500 \
  -e OPENVPNMONITOR_DEFAULT_SITE=Test \
  -e OPENVPNMONITOR_SITES_0_ALIAS=UDP \
  -e OPENVPNMONITOR_SITES_0_HOST=97.145.145.233 \
  -e OPENVPNMONITOR_SITES_0_NAME=OVPN-UDP \
  -e OPENVPNMONITOR_SITES_0_PORT=5555 \
  -e OPENVPNMONITOR_SITES_0_SHOWDISCONNECT=True \
  -p 8181:80 ruimarinho/openvpn-monitor

Здесь указана широта и долгота Москвы как стартовая точка на карте и IP адрес VPN сервера. SITES_0 задаёт параметры одного сервера. Можно в одну панель добавить несколько, задавая настройки соответственно SITES_1_, SITES_2_ и т.д.

Это вся настройка. Теперь можно идти в IP интерфейс на порт 8181 и смотреть информацию о пользователях. Не забудьте его тоже скрыть от посторонних глаз либо за Firewall, либо за любой веб сервер с режимом обратного прокси. Встроенной аутентификации у openvpn-monitor нет.

🌐 Сайт / Исходники

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#openvpn
2👍122👎3
Возник вопрос вчера на тему OpenVPN. Можно как-то собирать статистику по подключениям пользователей и выводить отчёт? В целом, задача эта решаема, так как OVPN сервер выдаёт всю статистику о своём состоянии и пользователях как через встроенную консоль управления, так и через лог файл, который задаётся параметром status в конфигурационном файле.

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

Мониторинг openvpn подключений пользователей в zabbix

Идея сбора статистики в том, что при подключении пользователя срабатывает триггер, при отключении он гаснет. И всё. Zabbix сам собирает всю статистику. Потом по ней можно какой-то отчёт сделать и выгрузить его в CSV. Триггерам можно повесить отдельный тэг и самую низкую важность, чтобы они больше нигде не отсвечивали.

Тут получается немного нецелевое использование системы мониторинга, но зато ничего самому по аналитике делать не надо: искать какую-то панель для этого, агрегировать данные и т.д.

Дополнительно можно сделать отдельный Dashboard с информацией об активных сессиях. Там же добавить виджет с историей подключений и отключений и т.д. В целом удобно и заменяет многие простые панели без непосредственно управления. При этом лично мне именно в Zabbix функциональность подобного рода нравится больше, чем примерно то же самое, но в Grafana с метриками от какого-нибудь экспортера Prometheus. По крайней мере из тех, что я видел.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#zabbix #openvpn
1👍91👎3
В настоящее время есть много технологий VPN, с помощью которых можно объединять подсети и подключать к ним внешних клиентов. Речь идёт не о блокировках и всем, что с этим связано, а об условно корпоративных VPN. Определённую популярность набрали сервисы на основе WireGuard, которые строят с его помощью mesh сети. Это не чистый WG, а программная обвязка вокруг него на дополнительном ПО. Примеры: Nebula, Tailscale, ZeroTier, Netmaker.

Я же хочу рассказать про старый добрый OpenVPN, который несмотря на все прочие современные реализации VPN остаётся актуален и удобен. И это не привычка и нежелание переходить на что-то новое, а объективное удобство. Перечислю несколько основных фактов, которые держат на OpenVPN.

1️⃣ Первый и самый главный – OpenVPN сервер умеет передавать клиенту во время подключения различные настройки, в том числе сетевые маршруты. Например, клиент подключается и мы ему тут же сообщаем, что он весь свой трафик должен завернуть в VPN. А когда нам это не нужно, перечисляем только список подсетей, которые заворачиваются в VPN.

Например, у меня есть несколько VPN серверов с внешними IP. Я их использую для доступа к закрытым ресурсам, куда разрешён доступ только мне. На этих VPN серверах перечислены по IP адресам те серверы, куда я должен подключаться через VPN. В момент моего подключения к OVPN серверу я получаю список маршрутов до этих IP адресов через VPN сервер. И только туда. Весь остальной трафик будет ходить напрямую.

Помимо маршрутов можно передавать и другие настройки. Несколько примеров:
- настройка своего внутреннего DNS сервера;
- разрешение клиентов взаимодействовать друг с другом;
- настройки внутреннего IP адреса;
- разрешение, запрет на подключение;
- разрешение, запрет сжатия трафика;
- и многие другие.

Всё это управляется централизованно на сервере. На клиентах никаких настроек менять не надо. Один раз передали конфиг с зашитыми сертификатами и всё.

2️⃣ Помимо передачи маршрутов клиентам внутри OVPN сети есть своя реализация динамической маршрутизации. Если у вас филиальная сеть объединена с помощью OVPN, вы у пользователей весь нужный трафик направляете в VPN туннель. А на OVPN сервере управляете, какие подсети какой филиал обслуживает. Добавился новый филиал - добавили его в список маршрутов и указали, что за новую подсеть отвечает новый сервер в филиале. Настройки клиентов трогать не надо, пускать поверх VPN сети ospf и bgp тоже. Реализация очень простая в настройке и управлении. Возможно для очень больших сетей этого будет недостаточно, но для малых и средних вполне.

3️⃣ Гибкость в возможностях аутентификации. Вы можете использовать традиционную для OVPN аутентификацию по сертификатам, можно оставить только логин с паролем, можно подключать внешний скрипт для аутентификации, а там уже реализовывать любую логику.

Можно всё убрать и настроить простой туннель вообще без какой-либо аутентификации и шифрования:

# openvpn --remote 1.2.3.4 --dev tun1 --ifconfig 10.4.0.1 10.4.0.2
# openvpn --remote 4.3.2.1 --dev tun1 --ifconfig 10.4.0.2 10.4.0.1

Всё, серверы видят друг друга по указанным внутренним IP адресам.

4️⃣ OVPN сервер поддерживает оба протокола TCP и UDP, можно использовать любой порт. Вкупе с предыдущим пунктом, одна технология VPN покрывает очень широкий спектр задач. Вы можете все потребности закрывать только с помощью OpenVPN.

5️⃣ Есть клиенты под все системы. Сервер очень старый, есть куча инструкций, понятны параметры, много специалистов. Всё расписано и изучено за многие годы.

6️⃣ Проблему с производительностью решили отдельным модулем ядра для OpenVPN. Я не слежу за его изменениями. Приехал он уже или нет в ядро или хотя бы в виде пакета в базовые репозитории. Но уже года два его можно скачать и самостоятельно установить, если сильно нужно.

Заметка получилась большая. Написал сходу, какие мысли пришли в голову. Я OpenVPN люблю и использую давно. При этом другие реализации и настраиваю, и использую. Как минимум WG и L2TP использую постоянно, а раньше ещё PPTP.

#openvpn
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍127👎7
Расскажу кратенько с конкретными примерами, как я настраиваю ограничение на доступ к серверам и сервисам по статическим IP адресам и потом подключаюсь к ним, используя некоторое количество арендованных VPS для этих целей.

Я уже давно практикую и остальным советую не оставлять публичный доступ через интернет к сервисам, которые не являются публичными. Например, тот же SSH я открываю только для белого списка своих IP адресов. Для iptables это обычно выглядит так:

SSH_WLIST=100.189.229.125,141.73.66.12,187.91.13.196,83.208.103.44,194.139.219.214
iptables -A INPUT -i enp5s0 -s $SSH_WLIST -p tcp --dport 22 -j ACCEPT

В скрипте с правилами задана переменная со списком моих IP адресов и правило для SSH на его основе.

На VPS с перечисленными IP адресами настроены сервера OpenVPN. Они используются для различных задач, в том числе в качестве шлюзов для подключения к закрытым серверам. При подключении со своих рабочих машин я не направляю весь трафик в VPN. Это неудобно и мешает работе. В общем случае я использую прямой выход в интернет для типовых задач в виде сёрфинга в интернете, просмотра видео и т.д.

При подключении по VPN я получаю только те маршруты, что мне нужны. Например, я хочу подключаться к серверу c IP адресом 233.129.58.85 через конкретный OpenVPN сервер. Я иду на него и добавляю на сервере к конфигурации, привязанной к сертификату, который я использую при подключении, следующую настройку:

push "route 233.129.58.85 255.255.255.255"

При подключении по VPN ко мне в систему приедет маршрут до 233.129.58.85 через этот сервер. Подключение по SSH к этому серверу пойдёт через VPN. В настройке маршрута можно указать не только IP адрес, но и DNS имя. Примерно так:

push "route ya.ru 255.255.255.255"

Чтобы это сработало, в конфигурации клиента, для которого добавлен такой маршрут, должен быть добавлен параметр:

allow-pull-fqdn

В итоге на рабочей машине у меня настроен клиент OpenVPN с готовыми подключениями к различным VPN серверам. Когда мне надо подключиться к той или иной инфраструктуре, я подключаюсь к нужному VPN серверу и получаю маршруты только туда. Всё остальное остаётся неизменным. Весь трафик в VPN я не направляю, уже существующие соединения не рвутся. Одновременно могут быть активны разные OpenVPN соединения. Все маршруты управляются с серверов. На самом клиенте я ничего не меняю.

В такую схему легко добавляются новые VPS, новые пользователи (❗️), новые сертификаты со своими привязанными к ним настройками, и всё это управляется централизованно через сервера. Сами клиенты трогать не надо.

📌 Полезные ссылки по теме:

▪️Основные преимущества OpenVPN сервера
▪️Настройка allow-pull-fqdn
▪️Одновременный запуск нескольких клиентов OpenVPN
▪️Запуск OpenVPN сервера на разных внешних IP адресах
▪️Запускаем OpenVPN сервер за 443 портом веб сервера

На днях на одном из моих серверов протух CA, который был выпущен 10 лет назад. Такие встречаются долгожители. И это не первый случай. Писал и заметки здесь по этой теме, и статья на сайте есть.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#openvpn
2👍170👎6
В комментариях к одной из заметок проскочила ссылка на небольшой проект, где одним скриптом реализована установка 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 сервера. Мне в целом понравилось. У меня есть свои подобные скрипты для установки сервера, создания и удаления пользователей. Писал в своё время, чтобы управлять серверами.

📌 Пара полезных ссылок по данной теме:

◽️Подборка вариантов настройки и управления OpenVPN сервера через web интерфейс
◽️Ovpn-admin - простой веб интерфейс в виде одного бинарника для управления Ovpn сервером

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#openvpn
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍164👎4