Установка и настройка fail2ban

Рано или поздно проходится столкнуться с тем, что кто-то пытается получить ssh доступ к вашему серверу или к админ-панели, а может к какой-то скрытой части сайта, ломясь на несуществующие пути, создавая вредоносную нагрузку на сайт. В таких случаях нужен инструмент, позволяющий отследить эти ситуации и принять меры противодействия. Таким инструментом является замечательная утилита Fail2Ban.

Fail2Ban сканирует файлы журнала (например /var/log/apache/error.log) и блокирует IP-адреса, которые показывают вредоносные признаки — слишком много сбоев паролей, эксплойты поиска и т.д.

Обычно Fail2Ban используется для обновления правил брандмауэра для блокировки IP-адресов на определенное количество времени, хотя любое другое произвольное действие (например, отправка электронной почты) также может быть настроено.

Из коробки Fail2Ban поставляется с фильтрами для различных сервисов (apache, ssh, ftp, mail и т.д.).
Fail2Ban может уменьшить частоту попыток неправильной аутентификации, несанкционированного доступа к службам сервера или слабой DOS атаки, но он не может устранить риск слабой аутентификации или дыр в безопасности.

Содержание:

  1. Установка
  2. Настройка
  3. Фильтры
  4. Управление
  5. Советы
  6. Заключение


Установка

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

Debian / Ubuntu

CentOS

Gentu

Настройка

Файлы конфигурации находятся в директории /etc/fail2ban и её поддиректориях, из которых нужно выделить две:

  • action.d — содержит файлы с настройками действий которые может выполнить программа при обнаружении вредоносной активности;
  • filter.d — хранит файлы фильтров по которым определяется вредоносная активность.

Главный файл конфига лежит в корне /etc/fail2ban и называется jail.conf, он содержит настройки по умолчанию, а также jail секции с настройками связки (ловушки) «filter + action», определяющей какой фильтр использовать и какое действие выполнять если фильтр нашёл совпадение, а также некоторые дополнительные параметры.

Конфиги имеют расширение .conf и тут есть важный момент, НЕ рекомендуется редактировать файлы с данным расширением, т.к. они могут быть (и будут) перезаписаны при обновлении программы. Для избежания этого необходимо скопировать существующий файл и изменить расширение на .local . Файлы с таким расширением переопределяют указанные параметры конфигурации главного файла.

Скопируем основной конфиг в файл jail.local:

Рассмотрим данный конфиг детальней. Секция [DEFAULT] содержит в себе основные правила, заданные по умолчанию для Fail2ban. Особо интересующие нас это:

ignoreip — через пробел перечисляется какие IP-адреса НЕ будут блокироваться вовсе. Указывать как отдельные адреса (например 127.0.0.1) так и подсети указав маску (пример: 192.168.0.0/16).

bantime — время в секундах, в течение которого подозрительный IP будет заблокирован. По умолчанию 10 минут;

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

destemail — если Вы хотите получать на почту уведомления от программы тут указывается Ваш email. Для отправки почты по умолчанию используется sendmail, следовательно необходимо чтобы он была настроен или же написать свой action конфиг который будет отправлять почту иными способами.

sender — адрес от кого пришло сообщение, для удобства можно localhost заменить на hostname сервера.

С самими важными настройками по умолчанию всё, далее следуют jail секции которые рассмотрим подробнее.

Фильтры

Для начала рассмотрим jail секции, так как в них подключаются как фильтры так и action сценарии.

Обязательными для указания являются:

  • enabled — включат/выключает jail;
  • port — указывает какие порты должны быть заблокированы, обычно указываются именованный формат портов (ssh, http, https и т.п.). Данную опцию можно не указывать если передавать порты в action-script через опцию action;
  • filter — название подключаемого фильтра (имя файла фильтра без расширения);
  • logpath — путь к файлу/файлам логов которые будет парсить фильтр, допускается использование wildcard (например /var/log/nginx/*error.log выберет все файлы заканчивающиеся на error.log).

Также для каждого jail могут быть переопределены глобальные значения action, maxretry, bantime, findtime, maxretry. К тому же опция action может содержать несколько значений, что позволяет выполнять несколько сценариев действий для одного события.

Пример записи:

Сами фильтры представляют набор regex выражений (Python спецификации) по которым они ищут признаки вредоносной активности.

Также, может содержать секцию [INCLUDES], в которой указываются файлы содержание которых должно быть включено в данный конфиг.

Секция [Definition] содержит опции:

  • failregex — перечень regex выражений на соответствие которым проверяется лог файл. Может содержать несколько выражений, каждое начинается с новой строки;
  • ignoreregex — список regex выражений при соответствии которым событие не будет считаться вредоносным.

Обязательной для указания в regex выражении является встроенное выражение <HOST>. Это предопределённое регулярное выражение, которое ищет в указанном месте IP-адрес и делает его доступным из выражения <ip> в action скриптах. Если <HOST> не указано Fail2Ban будет писать в лог ошибку «No ‘host’ group«.

Пришло время написать свой jail и фильтр которые бы имели практическое применение. Для этого напишем фильтр, который будет nginx error log на предмет попыток поиска панели управления phpMyAdmin.

Добавим в конец jail.local следующие строки:

Мы определили jail с названием nginx-pma, к которому подключили фильтр с таким же названием (они не обязательно должны совпадать),  указали порты которые будут заблокированы, указали путь к файлам логов и назначили количество попыток с одного IP равное трём. Значения опций, которые не были определены, будут взяты из секции [DEFAULT] файла jail.conf или jail.local (если переопределены в нём).

Действие по умолчанию это iptables-multiport, оно приведёт к блокировке IP, но не отправит Вам email уведомление. Если же уведомление получать надо, можно изменить дефолтный action:

Здесь я скопировал и немного подредактировал присутствующий в конфиге action_mw, создав action_sm и установил его в качестве действия по умолчанию. Редактировал я action_mw затем, что он присылает whois данные о заблокированном IP, что не всегда бывает нужно.

Далее создаём файл фильтра c именем nginx-pma.local (можно создавать свои фильтры с расширением .conf, но вдруг при обновление появится фильтр с тем же именем и затрёт Ваш, да и искать свои конфиги по расширению .local потом проще):

Добавляем туда строки:


Перезагружаем сервис fail2ban:

Для проверки валидности регулярных выражений есть встроенный функционал. Так регулярку можно проверить несколькими способами, общий синтаксис команды таков:

В роли каждого из аргументов log, regex и ignoreregex может выступать как отдельная строка так и файл (логфайл, файл фильтра). Указывать «ignoreregex» не обязательно.

Примеры:

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

которая выведет текущее состояние (также покажет список IP в бане на данный момент) или заглянув в лог (например, если нужно узнать кто попадался в бан, но уже помилован):

Управление

Программа Fail2Ban состоит из двух компонентов:

  • fail2ban-server — серверная часть, которая запускается в фоновом режиме и выполняет всю работу;
  • fail2ban-client — служит для взаимодействия и управления серверной частью.

Приведу некоторые полезные команды. Старт/стоп сервера:

Перечитать конфигурацию без остановки сервера:

Вывести список какие jails сейчас включены:

Показать состояние указанного jail:

Убрать из бана указанный IP:

Запустить / остановить указаный jail:

Советы

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

1) fail2ban вызывает высокую загрузку CPU / fail2ban high CPU load averages

При старте fail2ban начинает парсить указанные в настройках jail файлы логов. И тут нужно проверить, а какого размера Ваш лог файл? Вполне возможно (особенно, если данная программа ставиться после злонамеренной активности, записи о которой раздули лог), что какой-то из файлов, а то и не один весит несколько гигабайт (может даже десятков!). Ну и что? А то, что в мониторе процессов Вы увидите как fail2ban загрузил CPU по максимуму.

Как по мне, хороший вариант, в такой ситуации, воспользоваться утилитой logrotate.

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

2) После запуска fail2ban сервер выдаёт 502 Bad Gateway / Fail2Ban causes 502 Bad Gateway

Стало сюрпризом, но, как оказалось, давно известная особенность о которой никто не предупреждает, после старта fail2ban, через небольшой промежуток времени (до минуты), веб-сервер выдаст вместо сайта сообщение «502 Bad Gateway». Причина в том, что сервер обращается сам к себе (особенно если у Вас nginx проксирующий запросы) и fail2ban воспринимает это как вредоносную активность.

Решением является добавление в ignoreip всех адресов сервера, как локальных (включая 127.0.0.1) так и внешнего IP, в общем всех что вы найдёте командой «ip addr».

Заключение

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

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

В целом Fail2Ban — это очень гибкий инструмент, из коробки предоставляющий набор фильтров для самых популярных сервисов (sshd, apache, qmail, proftpd, sasl, asterisk и т.п.) и широкий набор действий (iptables, tcp-wrapper, shorewall, mail notifications и т.п.), а также позволяющий легко создавать свои action сценарии и фильтры под каждый частный случай.

Вот пожалуй и всё что нужно для того, чтобы начать пользоваться данной утилитой. Удачного использования и пусть Ваши сервера будут в безопасности!


2 комментария к “Установка и настройка fail2ban

  1. Очень интересный способ защиты от ботов изложен. Благодарствую! Буду пробовать внедрять 🙂

Добавить комментарий для Кирилл Отменить ответ

Ваш e-mail не будет опубликован. Обязательные поля помечены *