Сам по себе 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), так что просто назначаем его тому хосту, с которого нужно снимать данные и через пару минут получаем следующее
Ссылка для скачивания шаблона для импорта
У вас шаблон по ссылке имеет название Mysql Discovery Fixer, и к fail2ban, похоже, никакого отношения не имеет.
Не могли бы вы исправить шаблон?
Вы правы. Спасибо, исправил