Снятие статистики Fail2Ban с помощью Zabbix

Сам по себе Fail2ban очень крутой и гибкий инструмент. Немного подробнее об этом продукте и настройке можно почитать тут, а сейчас речь пойдет о том как снимать с него статистику с помощью системы мониторинга Zabbix.
Архитектуру fail2ban создают так называемые Jail (тюрьма), которая состоит из фильтра и действия. По умолчанию активна самая распространенная Jail — ssh. Можно просто сделать

# service fail2ban restart

и утилита уже начнет блокировать злоумышленников, которые подбирают пароль к нашему серверу.
Интересной является утилита fail2ban-client, с помощью которой можно управлять сервисом и конфигурацией.
С её помощью мы и будем снимать статистику.
Два примера вывода клиента
1)

# fail2ban-client status
Status
|- Number of jail:	1
`- Jail list:		ssh

2)

# fail2ban-client status ssh
Status for the jail: ssh
|- filter
|  |- File list:	/var/log/auth.log
|  |- Currently failed:	1
|  `- Total failed:	178
`- action
   |- Currently banned:	0
   |  `- IP list:
   `- Total banned:	8

Как видим есть кое что интересное
Так как fail2ban работает от пользователя root, то и zabbix нам придётся запустить от этого пользователя.
Для этого в zabbix_agent.conf зададим 2 параметра:

AllowRoot=1
User=root

Возможно кто то решит эту проблему через sudoers, а мне этот вариант вполне подходит.
Теперь расширим функционал zabbix добавив несколько дополнительных айтемов. Для этого создадим файл, к примеру /etc/zabbix/zabbix_agentd.d/fail2ban.conf.

UserParameter=fail2ban.discovery,fail2ban-client status | grep 'Jail list:' | sed -e 's/^.*:\W\+//' -e 's/\(\w\+\)/{"{#JAIL}":"\1"}/g' -e 's/.*/{"data":[\0]}/'
UserParameter=fail2ban.total_failed[*],fail2ban-client status $1 | grep 'Total failed:' | grep -E -o '[0-9]+'
UserParameter=fail2ban.total_banned[*],fail2ban-client status $1 | grep 'Total banned:' | grep -E -o '[0-9]+'
UserParameter=fail2ban.currently_failed[*],fail2ban-client status $1 | grep 'Currently failed:' | grep -E -o '[0-9]+'
UserParameter=fail2ban.currently_banned[*],fail2ban-client status $1 | grep 'Currently banned:' | grep -E -o '[0-9]+'

Для FreeBSD есть нюанс. Необходимо установить пакет GNU Sed и поправить одну букву в команде

# cd /usr/ports/textproc/gsed/
# make -DBATCH install clean

Скрипт определения будет иметь вид

UserParameter=fail2ban.discovery,fail2ban-client status | grep 'Jail list:' | gsed -e 's/^.*:\W\+//' -e 's/\(\w\+\)/{"{#JAIL}":"\1"}/g' -e 's/.*/{"data":[\0]}/'

Всё остальное останется как и было.
Теперь можно применить настройки, просто перезапустив агента

# service zabbix-agent restart

И сразу проверим, применились ли настройки

# zabbix_agentd -p | grep ^fail2ban.
fail2ban.discovery                            [t|{"data":[{"{#JAIL}":"ssh"}, {"{#JAIL}":"exim"}]}]
fail2ban.total_failed                         [t|]
fail2ban.total_banned                         [t|]
fail2ban.currently_failed                     [t|]
fail2ban.currently_banned                     [t|]

Отлично! Метрики добавились, обнаружение работает. Попробуем получить значения

# zabbix_agentd -t 'fail2ban.total_failed[ssh]'
fail2ban.total_failed[ssh]                    [t|54]
# zabbix_agentd -t 'fail2ban.total_banned[ssh]'
fail2ban.total_banned[ssh]                    [t|4]
# zabbix_agentd -t 'fail2ban.currently_failed[ssh]'
fail2ban.currently_failed[ssh]                [t|0]
# zabbix_agentd -t 'fail2ban.currently_banned[ssh]'
fail2ban.currently_banned[ssh]                [t|1]

Шаблон включает в себя LLD ( Low Level Discovery), так что просто назначаем его тому хосту, с которого нужно снимать данные и через пару минут получаем следующее
zabbix-fail2ban
Ссылка для скачивания шаблона для импорта

Снятие статистики Fail2Ban с помощью Zabbix: 2 комментария

  1. Игорь

    У вас шаблон по ссылке имеет название Mysql Discovery Fixer, и к fail2ban, похоже, никакого отношения не имеет.
    Не могли бы вы исправить шаблон?

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