Fail2ban мониторинг в Zabbix

Fail2ban — простая в использовании программа, которая отслеживает log-файлы запущенных сервисов и программ и на основании различных правил блокирует по IP нарушителей.

Установка Fail2ban в Ubuntu элементарная, сначала обновим пакеты:

apt-get update

и установим саму программу:

apt-get install fail2ban

В этой статье я не буду рассматривать установку самого zabbix-agent, подразумевается, что он уже установлен на сервере куда вы хотите установить fail2ban.

Fail2ban настройка

У программы два основных файла конфигурации:

  1. /etc/fail2ban/fail2ban.conf — отвечает за настройки запуска процесса Fail2ban.
  2. /etc/fail2ban/jail.conf — содержит настройки защиты конкретных сервисов, в том числе sshd.

Параметры из секции [DEFAULT] применяются ко всем остальным секциям, если не будут переопределены.

Подробнее по каждому из основных параметров файла jail.conf:

ignoreip — IP–адреса, которые не должны быть заблокированы. Можно задать список IP-адресов разделённых пробелами, маску подсети, или имя DNS–сервера.

bantime — время бана в секундах, по истечении которого IP–адрес удаляется из списка заблокированных.

maxretry — количество подозрительных совпадений, после которых применяется правило. В контексте [ssh] — это число неудавшихся попыток логина, после которых происходит блокировка.

enabled — значение true указывает что данный jail активен, false выключает действие изолятора.

port — указывает на каком порту или портах запущен целевой сервис. Стандартный порт SSH–сервера — 22, или его буквенное наименование — ssh.

filter — имя фильтра с регулярными выражениями, по которым идёт поиск «подозрительных совпадений» в журналах сервиса. Фильтру sshd соответствует файл /etc/fail2ban/filter.d/sshd.conf.

logpath — путь к файлу журнала, который программа Fail2ban будет обрабатывать с помощью заданного ранее фильтра. Вся история удачных и неудачных входов в систему, в том числе и по SSH, по умолчанию записывается в log–файл /var/log/auth.log.

Рекомендации по настройке Fail2ban

Не рекомендуется оставлять параметр ignoreip со значением по умолчанию 127.0.0.1/8, это создаёт очевидную угрозу в многопользовательских системах — если злоумышленник получил доступ хотя–бы к одному shell–аккаунту, то он имеет возможность беспрепятственно запустить bruteforce–программу для атаки на root или других пользователей прямо с этого–же сервера.

Новая опция findtime — определяет длительность интервала в секундах, за которое событие должно повториться определённое количество раз, после чего санкции вступят в силу. Если специально не определить этот параметр, то будет установлено значение по умолчанию равное 600 (10 минут). Проблема в том, что ботнеты, участвующие в «медленном брутфорсе», умеют обманывать стандартное значение. Иначе говоря, при maxretry равным 6, атакующий может проверить 5 паролей, затем выждать 10 минут, проверить ещё 5 паролей, повторять это снова и снова, и его IP забанен не будет. В целом, это не угроза, но всё же лучше банить таких ботов.

Файл jail.conf не рекомендуется править. Нужно создать свой с расширением .local , который будет иметь более высокий приоритет по сравнению с jail.conf

Пример файла:

[DEFAULT]
## Постоянный IP-адрес.
## Если не переопределить ignoreip здесь,
## то стоит закомментировать этот параметр в jail.conf.
ignoreip = 57.66.158.131

 ## если в течении 1 часа: 
findtime    = 3600
 ## произведено 6 неудачных попыток логина: 
maxretry    = 6
 ## то банить IP на 24 часа:
 bantime     = 86400 

Перезапускаем Fail2ban:

service fail2ban restart
* Restarting authentication failure monitor fail2ban        [ OK ]
tail /var/log/fail2ban.log
2013-01-20 22:00:35,911 fail2ban.jail   : INFO   Jail 'ssh' stopped
2013-01-20 22:00:35,916 fail2ban.server : INFO   Exiting Fail2ban
2013-01-20 22:00:36,257 fail2ban.server : INFO   Changed logging target to
/var/log/fail2ban.log for Fail2ban v0.8.6
2013-01-20 22:00:36,258 fail2ban.jail   : INFO   Creating new jail 'ssh'
2013-01-20 22:00:36,259 fail2ban.jail   : INFO   Jail 'ssh' uses poller
2013-01-20 22:00:36,271 fail2ban.filter : INFO   Added logfile = /var/log/auth.log
2013-01-20 22:00:36,271 fail2ban.filter : INFO   Set maxRetry = 6
2013-01-20 22:00:36,272 fail2ban.filter : INFO   Set findtime = 3600
2013-01-20 22:00:36,272 fail2ban.actions: INFO   Set banTime = 86400
2013-01-20 22:00:36,298 fail2ban.jail   : INFO   Jail 'ssh' started

Подключаем к Zabbix

Для Zabbix уже есть готовые шаблоны, скачать можно здесь.

Выбирайте нужную вам версию:

zabbix шаблоны fail2ban

и устанавливайте в zabbix, для этого идем в «настройка» — >»шаблоны» и импортируем скаченный шаблон:

Импорт шаблона в Zabbix

Затем подключаем шаблон к нужному узлу сети: «настройка» ->»узлы сети», выбираем нужный узел и подключаем шаблон.

Подключаем шаблон fail2ban

Мои настройки Fail2ban

Я буду защищать ssh соединения от брутфорса и apache, вот так выглядит мой «боевой» файл настроек jail.local:

 [DEFAULT]
# Постоянный IP-адрес.
# Если не переопределить ignoreip здесь,
# то стоит закомментировать этот параметр в jail.conf.
 ignoreip = 192.168.0.138
 [ssh]
# если в течении 1 часа:
 findtime    = 3600
 port = 30022
# произведено 6 неудачных попыток логина:
 maxretry    = 6
# то банить IP на 24 часа:
 bantime     = 86400
 [apache]
# выявляем неудачные попытки ввода пароля
 enabled  = true
 port     = http,https
 filter   = apache-auth
 logpath  = /var/log/apache/error.log
 maxretry = 4
 bantime  = 86400
#[apache-noscript]
 [noscript]
# выявляем потенциальные сканирования для применения эксплойтов и php уязвимостей
 enabled  = true
 port     = http,https
 filter   = apache-noscript
 logpath  = /var/log/apache/error.log
 maxretry = 6
#[apache-overflows]
 [overflows]
# выявляем попытки переполнения Апача
 enabled  = true
 port     = http,https
 filter   = apache-overflows
 logpath  = /var/log/apache/error.log
 maxretry = 2
# выявляем неудачные попытки в поиске домашней директории на сервере
# [apache-nohome]
 [nohome]
 enabled = true
 port = http,https
 filter = apache-nohome
 logpath = /var/log/apache/error.log
 maxretry = 2

Настройка zabbix-agent для Fail2ban

Вносим изменения в конфигурационный файл zabbix-agent. У меня в Ubuntu он находится по пути etc/zabbix/zabbix_agent.conf . В самый конец файла добавляем:конец файла добавляем:

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

 UserParameter=fail2ban.total_failed[],sudo fail2ban-client status $1 | grep 'Total failed:' | grep -E -o '[0-9]+' 

UserParameter=fail2ban.total_banned[],sudo fail2ban-client status $1 | grep 'Total banned:' | grep -E -o '[0-9]+'

 UserParameter=fail2ban.currently_failed[],sudo fail2ban-client status $1 | grep 'Currently failed:' | grep -E -o '[0-9]+' 

UserParameter=fail2ban.currently_banned[],sudo fail2ban-client status $1 | grep 'Currently banned:' | grep -E -o '[0-9]+'

Теперь необходимо разрешить пользователю zabbix запускать программу fail2ban-client — в файл etc/sudoers добавляем строку (сразу после строчки «root ALL=(ALL:ALL) ALL»):

zabbix  ALL=(ALL) NOPASSWD: /usr/bin/fail2ban-client

Перезапускаем zabbix-agent командой:

sudo /etc/init.d/zabbix-agent restart

Смотрим, появились ли данные в web интерфейсе Zabbix. Возможно придется подождать пару минут.

Отображение fai2ban в zabbix

На этом все.

Проблемы и решение:

У меня было, что после настройки, zabbix ругался на то что данные приходят не в формате JSON.

Решение:

в файле jail.local переименовать секции:

было [apache-overflows]

стало [overflows]

Похоже, что не нравилось тире в названии.

Vladimir

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