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

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

Продолжаю тему мониторинга различных систем и метрик серверов с помощью известной и бесплатной системы мониторинга заббикс. Сегодня я расскажу, как настроить мониторинг 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, так как редактировал под свои реалии, причем достаточно давно. Нюансов уже не помню, буду приводить свои конфиги как есть.

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

  1. Установка CentOS 8.
  2. Настройка CentOS 8.
  3. Установка и настройка zabbix сервера.

То же самое на Debian 10, если предпочитаете его:

  1. Установка Debian 10.
  2. Базовая настройка Debian.
  3. Установка и настройка zabbix на debian.

Настройка zabbix-agent на openvpn сервере

Для настройки мониторинга за openvpn подключениями, создадим скрипт автообнаружения пользователей. У меня директория для ccd файлов следующая - /etc/openvpn/ccd-users-udp. В связи с этим делаем скрипт /etc/zabbix/scripts/discover_vpn.sh

#!/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 и делаем исполняемым.

# chown zabbix. discover_vpn.sh && chmod +x discover_vpn.sh

Запустите файл и проверьте, что он выводит список пользователей из директории ccd в json формате.

Автообнаружение пользователей для мониторинга

Далее создаем конфиг с Userparameters - /etc/zabbix/zabbix_agentd.d/openvpn.conf следующего содержания:

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.

# systemctl restart zabbix-agent

Проверяем работу итемов.

# zabbix_agentd -t discovery.openvpn

Вы должны увидеть вывод в формате json, как и при запуске скрипта в консоли. Если это не так, то разбирайтесь, в чем проблема. Возможно права на скрипт не дали или ошиблись в конфигурации агента.

Далее можно взять какого-нибудь пользователя, который в данный момент подключен к openvpn серверу и посмотреть по нему информацию.

# zabbix_agentd -t user_status.openvpn[ovpn_user1]
user_status.openvpn[ovpn_user1]             [t|1]

Агент возвращает 1, что значит, что пользователь подключен. Таким же образом можете проверить все остальные UserParameter. После того, как убедитесь, что все работает, можете переходить к настройке zabbix сервера для мониторинга за openvpn подключениями.

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

На сервере zabbix никакой особой настройки для мониторинга openvpn подключений делать не надо. Достаточно просто импортировать готовый шаблон. Вы можете его взять на гитхабе, либо скачать у меня. Насколько я помню, не менял в нем ничего. Но это не 100%. В любом случае, если изменения и есть, то косметические. Например, интервалы обновления, либо перевод названий.

Скачать шаблон для openvpn подключений

После добавления шаблона, прикрепите его к хосту с openvpn сервером, где ранее настроили zabbix-agent. После этого данные начнут поступать на сервер мониторинга. Проверить это, как обычно, можно в Latest data.

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

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

Оповещение о подключении пользователя

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

Отключение уведомления о подключении openvpn пользователя

В общем, кастомизируйте данный шаблон на свой вкус. На этом по самой настройке мониторинга за openvpn пользователями на сервере zabbix все.

Заключение

Не понравилась статья и хочешь научить меня администрировать? Пожалуйста, я люблю учиться. Комментарии в твоем распоряжении. Расскажи, как сделать правильно!

Описанный способ мониторинга за подключениями openvpn пользователей не идеальный. Надежнее не привязываться к готовому списку пользователей, а напрямую анализировать лог файл openvpn. Иначе, если по какой-то причине пользователя не будет в списке, который формируется правилом автообнаружения, вы ничего не узнаете о подключениях. Особенно это актуально, когда мониторинг используется не просто для сбора информации, а для целей обеспечения безопасности, где важно фиксировать абсолютно все подключения.

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

Онлайн курс Основы сетевых технологий

Теоретический курс с самыми базовыми знаниями по сетям. Курс подходит и начинающим, и людям с опытом. Практикующим системным администраторам курс поможет упорядочить знания и восполнить пробелы. А те, кто только входит в профессию, получат на курсе базовые знания и навыки, без воды и избыточной теории. После обучения вы сможете ответить на вопросы:
  • На каком уровне модели OSI могут работать коммутаторы;
  • Как лучше организовать работу сети организации с множеством отделов;
  • Для чего и как использовать технологию VLAN;
  • Для чего сервера стоит выносить в DMZ;
  • Как организовать объединение филиалов и удаленный доступ сотрудников по vpn;
  • и многое другое.
Уже знаете ответы на вопросы выше? Или сомневаетесь? Попробуйте пройти тест по основам сетевых технологий. Всего 53 вопроса, в один цикл теста входит 10 вопросов в случайном порядке. Поэтому тест можно проходить несколько раз без потери интереса. Бесплатно и без регистрации. Все подробности на странице .

Помогла статья? Подписывайся на telegram канал автора

Анонсы всех статей, плюс много другой полезной и интересной информации, которая не попадает на сайт.

Автор Zerox

Zerox
Владимир, системный администратор, автор сайта. Люблю настраивать сервера, изучать что-то новое, делиться знаниями, писать интересные и полезные статьи. Открыт к диалогу и сотрудничеству.

27 комментариев

  1. Аватар

    Special characters "\, ', ", `, *, ?, [, ], {, }, ~, $, !, &, ;, (, ), , |, #, @, 0x0a" are not allowed in the parameters.

    Что делать?

  2. Аватар
    Сергей

    Здравствуйте Владимир. Подскажите пожалуйста какой вывод будет у команды zabbix_agentd -t num_user.openvpn

  3. Аватар

    Получил динамический список пользователей (SED):

    UserParameter=discovery.openvpn
    
    # cat /var/etc/openvpn/openvpn-status.log | sed -n '/Connected Since/,/ROUTING/p' | sed 's/,.*//' | sed                     's/^/,{"{#VPNUSER}":"/' | sed 's/$/"}/' | sed -e '1d' -e '$d' | sed -e '1s/^/{"data"\:[/' -e '$s/$/]}/'
    
    
    UserParameter=discovery.openvpn,cat /var/etc/openvpn/openvpn-status.log | sed -n '/Connected Since/,/ROUTING/p' | sed 's/,.*//' | sed 's/^/,{"{#VPNUSER}":"/' | sed 's/$/"}/' | sed -e '1d' -e '$d' | sed -e '1s/^/{"data"\:[/' -e '$s/$/]}/'
    UserParameter=user_status.openvpn[*], cat /var/etc/openvpn/openvpn-status.log | grep $1, >/dev/null && echo 1 || echo 0
    UserParameter=num_user.openvpn, cat /var/etc/openvpn/openvpn-status.log | sed -n '/Connected Since/,/ROUTING/p' | sed -e '1d' -e '$d' | wc -l
    UserParameter=user_byte_received.openvpn[*], if [ "`grep -c $1, /var/etc/openvpn/openvpn-status.log`" != "0" ]; then cat /var/etc/openvpn/openvpn-status.log | grep $1, | tr "," "\n" | sed -n '3p' ; else echo "0" ; fi
    UserParameter=user_byte_sent.openvpn[*], if [ "`grep -c $1, /var/etc/openvpn/openvpn-status.log`" != "0" ]; then cat /var/etc/openvpn/openvpn-status.log | grep $1, | tr "," "\n" | sed -n '4p' ; else echo "0" ; fi
    • Zerox

      Спасибо за полезную информацию.

    • Аватар

      Была лишняя запятая.
      Подправил

      cat /tmp/openvpn-status.log | sed -n ‘/Connected Since/,/ROUTING/p’ | sed ‘s/,.*//’ | sed ‘s/^/,{«{#VPNUSER}»:»/’ | sed ‘s/$/»}/’ | sed -e ‘1d’ -e ‘$d’ | sed -e ‘1s/^/{«data»\:[/’ -e ‘$s/,/]}/’

      Не хватало привилегий делал в pfSense. Вышел из положения созданием симлинка через кронтаб:

      0,15,30,45 * * * * /usr/bin/find /tmp/openvpn-status.log||/bin/ln /var/etc/openvpn/openvpn-status.log /tmp/openvpn-statu
      s.log&&/bin/chmod 755 /tmp/openvpn-status.log
  4. Аватар

    Нашёл иное решение проблемы автообнаружения пользователей без использования ccd. При генерации сертификата вместе с ключами меняется файл index.txt (я использовал пакет easy-rsa из репозиториев). В файле упоминаются все выпущенные сертификаты. В начале строки с действующим сертификатом стоит буква V, показывающая, как я понял, что сертификат валиден. Осталось в скрипте автообнаружения прописать что-то вроде "users=`grep "V" /etc/zabbix/scripts/index.txt | grep -v "vm-vpn-1" | cut -d= -f7 | cut -d\/ -f1`" и список текущих пользователей готов.
    Файл index.txt надо после каждой генерации скрипта переносить в папку со скриптами заббикса, например, потому что нечего OpenVPN-серверу глядеть куда не надо :)
    И всё будет работать. За скрипт и статью спасибо.

    • Zerox

      Да, я тоже знаю этот файл и так же думал его распарсить. У меня как-то не пошла идея с мониторингом, поэтому развивать не стал. По факту никому он оказался не нужен.

  5. Аватар
    Алексей

    Добрый день.
    Делал все по инструкции, менял лишь пути к скрипту и логам.

    К сожалению в элементах данных напротив необходимого элемента (Template App OpenVPN: openvpn num_user) пишет значение Not supported и восклицательный знак Unsupported item key.

    Прошу помощи, куда копать, и как можно решить данную проблему.

    Zabbix 4.0 Appliance

    Так же пробовал другие варианты и инструкции, но там вообще глушняк.

    • Zerox

      Начать нужно с того, что проверить все итемы через консоль на сервере с zabbix-agent. Примеры у меня показаны в статье:
      zabbix_agentd -t discovery.openvpn
      zabbix_agentd -t user_status.openvpn[ovpn_user1]
      и т.д.

      • Аватар
        Алексей

        Проверял, и еще раз сейчас перепроверил, они отрабатывают как нужно.
        Сервер заббикс общается с агентом нормально(так же работает шаблон linux), данные идут.

        А что можно еще проверить?

      • Аватар
        Алексей

        По логам сервера zabbix бьется ошибка
        964:20200128:083301.896 item "192.168.0.15:num_user.openvpn" became not supported: Unsupported item key.

        В принципе, других ошибок по хосту 192.168.0.15(OpenVPN Server) я не вижу

      • Аватар
        Алексей

        Продолжаю копать.
        Параметры UserParameters воткнул в конфиг агента заббикса.

        Чтобы проверить приходят ли запросы от итемов на сервер заббкса, поменял выдал полные права пользователю заббикс
        в папке /etc/sudoers.d создал фаил zabbix_openvpn, и прописал в нем
        Defaults:zabbix !requiretty
        zabbix ALL=(ALL) NOPASSWD: ./etc/openvpn/discover_vpn.sh

        Зашел на сервер заббикса, и выполнил команду

        zabbix_get -s 192.168.0.15 -k discovery.openvpn

        в итоге получил нормальный вывод, как от команды zabbix_agentd -t discovery.openvpn на самом клиенте.
        {
        "data":[
        {"{#VPNUSER}":"11111"}
        ,{"{#VPNUSER}":"22222"}
        ,{"{#VPNUSER}":"33333"}
        ]
        }
        Однако все так же не могу побороть проблему, все так же статус в Discovery rules - Unsupported item key.

        Для проверки работает ли вообще передача параметров, создал простенький итем, и указал в конфиге агента подходящий параметр, параметр передается корректно.

        Какие есть еще варианты проверки, что может быть? Все таки очень хотелось бы, чтобы данный функционал заработал.

  6. Аватар

    Возникла сложность:
    [root@openvpn ~]# sudo -u zabbix /etc/zabbix/scripts/discover_vpn.sh
    ls: cannot access /etc/openvpn/keys/easy-rsa-master/easyrsa3/pki/issued: Permission denied
    {
    "data":[
    ]
    }

    Скрипт не выполняется от имени заббикса, права не особо помогли. в чем может быть сложность
    sudoers так же правился но ошибка та же

    openvpn num_user - работает

    Как лучше обойти предоставление прав так глубоко?

  7. Аватар

    Хотелось бы узнать про уровень логирования в настройках server.conf,userparameter только первый отрабатывает,в остальных пишет что zabbix unsuported

    • Аватар
      Николай

      Насколько я помню, это несоответствие типов данных между скриптом и шаблоном забикса

  8. Аватар

    Хмм... Можно сделать по другому: в файле конфигурации openvpn использовать опцию "client-connect" - данная опция вызывает внешний скрипт при подключении к серверу кого-либо. А в этом скрипте уже прописываем всё, что душе угодно, к примеру оповещение на почту или запись в бд. С помощью следующих переменных получаем доп. информацию: ${common_name}, ${HOSTNAME}, ${untrusted_ip}, ${ifconfig_pool_remote_ip}

  9. Аватар
    Александр

    а можете сбросить xml под Zabbix 4.0. при импорте шаблона нет триггеров, всего один элемент данных

    • Zerox

      Там правило автообнаружения есть. Оно создает итемы и триггеры на хостах.

      • Аватар

        На стороне zabbix сервера а именно в "Элементах данных" пиишет что Value "cat: /var/log/openvpn/openvpn-status.log: Permission denied
        0" of type "string" is not suitable for value type "Numeric (unsigned)"

      • Аватар

        Спасибо помогло частично openvpn num_user отображает нормально,остальные параметры 0

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

Ваш адрес email не будет опубликован.

Нажимая кнопку "Отправить комментарий" Я даю согласие на обработку персональных данных.