Сегодня я расскажу, как настроить мониторинг openvpn подключений в zabbix с помощью автообнаружения конфигов пользователей. Способ придуман не мной, приведу ссылку на github страницу проекта.
Идея настроить мониторинг openvpn подключений с помощью zabbix витала у меня давно, но никак не доходили руки. Когда выбрал время и сел настраивать, сходу не придумал, а как же лучше это сделать. Так как в задаче много нюансов, то и подходов тоже может быть несколько.
Изначально я думал как-нибудь распарсить лог openvpn и вытаскивать подключенных пользователей оттуда. После того, как внимательно посмотрел на основной лог, понял, что это не самая простая задача, пришлось бы повозиться, чтобы все отладить.
Перед настройкой решил погуглить и посмотреть, что уже есть из готового. И сразу же нашел вот этот проект — https://github.com/Grifagor/zabbix-openvpn. Идею быстро понял, оценил все плюсы и минусы и решил не заморачиваться сам, а взять готовое, благо тут все в комплекте:
Скрипты
Конфиги
Шаблон с автообнаружением, графиками и триггерами.
Шаблон имеет следующие элементы в своем составе:
1.Итемы для мониторинга за полученным и переданным трафиком пользователя.
2.Итемы для мониторинга за статусом подключения, отключения пользователя.
3.Триггер со срабатыванием на подключение и отключение пользователя.
4.График полученных, отправленных данных в байтах.
5.График со статусом подключения пользователя.
6.Количество подключенных пользователей к openvpn серверу.
Все эти итемы, графики и триггеры создаются автоматически для каждого пользователя.
Минус один и весьма существенный — добавление итемов в виде отдельных пользователей работает через автообнаружение конфигураций пользователей в директории с ccd. Для того, чтобы приведенный способ мониторинга openvpn подключений работал, у вас должны существовать индивидуальные конфигурации пользователей, заданные в конфиге openvpn параметром client-config-dir.
Сами конфигурации пользователей могут быть пустыми. Их содержимое не используется. Они нужны только для того, чтобы получить имя пользователя и затем по этому имени анализировать лог файл состояния openvpn, настроенный с помощью параметра status в конфигурации openvpn сервера.
В принципе, скрипт обнаружения пользователей можно переделать и искать логины по сертификатам, если они у вас хранятся на сервере. Но с этим тоже есть нюансы. Какие-то сертификаты могут быть отозваны, либо вообще не храниться на сервере. Им там, по большому счету, делать нечего.
С учетом указанных особенностей мониторинга openvpn, переходим к настройке. Возможно, у меня что-то не будет совпадать точь в точь с тем, что есть в репозитории github, так как редактировал под свои реалии, причем достаточно давно. Нюансов уже не помню, буду приводить свои конфиги как есть.
Настройка zabbix-agent на openvpn сервере
Для настройки мониторинга за openvpn подключениями, создадим скрипт автообнаружения пользователей. У меня директория для ccd файлов следующая — /etc/openvpn/ccd-users-udp. В связи с этим делаем скрипт /etc/zabbix/scripts/discover_vpn.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/bin/bash path=/etc/openvpn/ccd-users-udp users=`ls -F $path | sed 's/\///g'` # array of users name echo "{" echo "\"data\":[" comma="" for user in $users do echo " $comma{\"{#VPNUSER}\":\"$user\"}" comma="," done echo "]" echo "}" |
Сохраняем его, назначаем владельца zabbix и делаем исполняемым.
1 |
chown zabbix. discover_vpn.sh && chmod +x discover_vpn.sh |
Запустите файл и проверьте, что он выводит список пользователей из директории ccd в json формате.
Далее создаем конфиг с Userparameters — /etc/zabbix/zabbix_agentd.d/openvpn.conf следующего содержания:
1 2 3 4 5 |
UserParameter=discovery.openvpn,/etc/zabbix/scripts/discover_vpn.sh UserParameter=user_status.openvpn[*], cat /var/log/openvpn/status-users-udp.log | grep $1, >/dev/null && echo 1 || echo 0 UserParameter=num_user.openvpn, cat /var/log/openvpn/status-users-udp.log | sed -n '/Connected Since/,/ROUTING/p' | sed -e '1d' -e '$d' | wc -l UserParameter=user_byte_received.openvpn[*], if [ "`grep -c $1, /var/log/openvpn/status-users-udp.log`" != "0" ]; then cat /var/log/openvpn/status-users-udp.log | grep $1, | tr "," "\n" | sed -n '3p' ; else echo "0" ; fi UserParameter=user_byte_sent.openvpn[*], if [ "`grep -c $1, /var/log/openvpn/status-users-udp.log`" != "0" ]; then cat /var/log/openvpn/status-users-udp.log | grep $1, | tr "," "\n" | sed -n '4p' ; else echo "0" ; fi |
Не забудьте в конфиге поменять пути к status логу. У меня он живет по адресу /var/log/openvpn/status-users-udp.log.
Перезапускаем zabbix-agent.
1 |
systemctl restart zabbix-agent |
Проверяем работу итемов.
1 |
zabbix_agentd -t discovery.openvpn |
Вы должны увидеть вывод в формате json, как и при запуске скрипта в консоли. Если это не так, то разбирайтесь, в чем проблема. Возможно права на скрипт не дали или ошиблись в конфигурации агента.
Далее можно взять какого-нибудь пользователя, который в данный момент подключен к openvpn серверу и посмотреть по нему информацию.
1 2 |
zabbix_agentd -t user_status.openvpn[ovpn_user1] user_status.openvpn[ovpn_user1] [t|1] |
Агент возвращает 1, что значит, что пользователь подключен. Таким же образом можете проверить все остальные UserParameter. После того, как убедитесь, что все работает, можете переходить к настройке zabbix сервера для мониторинга за openvpn подключениями.
Мониторинг openvpn подключений в zabbix
На сервере zabbix никакой особой настройки для мониторинга openvpn подключений делать не надо. Достаточно просто импортировать готовый шаблон. Вы можете его взять на гитхабе, либо скачать у меня. Насколько я помню, не менял в нем ничего. Но это не 100%. В любом случае, если изменения и есть, то косметические. Например, интервалы обновления, либо перевод названий.
[wpfilebase tag=file id=3 /]
После добавления шаблона, прикрепите его к хосту с openvpn сервером, где ранее настроили zabbix-agent. После этого данные начнут поступать на сервер мониторинга. Проверить это, как обычно, можно в Latest data.
После подключения какого-нибудь пользователя, вы получите уведомление и увидите информацию об этом на дашборде.
Если вам это не нужно, то отключите в шаблоне триггер. Если сам триггер все же нужен, но не нужны уведомления о подключениях пользователей, отключите уведомления по триггеру в общем правиле по отправке оповещений, если оно используется.
В общем, кастомизируйте данный шаблон на свой вкус. На этом по самой настройке мониторинга за openvpn пользователями на сервере zabbix все.
Заключение
Описанный способ мониторинга за подключениями openvpn пользователей не идеальный. Надежнее не привязываться к готовому списку пользователей, а напрямую анализировать лог файл openvpn. Иначе, если по какой-то причине пользователя не будет в списке, который формируется правилом автообнаружения, вы ничего не узнаете о подключениях. Особенно это актуально, когда мониторинг используется не просто для сбора информации, а для целей обеспечения безопасности, где важно фиксировать абсолютно все подключения.