Блокировка IP на MITIGATOR с Nginx и log2ban
Описана настройка следующей схемы защиты web-сервера:
- log2ban анализирует
access.log, куда Nginx пишет о запросах; - IP добавляется в список заблокированных через MITIGATOR API.
Клиент MITIGATOR API
Имеется скрипт mitigator.py (скачать)
для управления MITIGATOR, в частности, для временной блокировки IP-адреса
через MITIGATOR API. При необходимости скрипт можно доработать самостоятельно
для совершения любых других действий на MITIGATOR. Скрипт использует только
стандартные модули, работает с Python 2.7+ и Python 3.
Для запуска скрипта нужна учетная запись MITIGATOR и ID политики защиты
(например, 42 в URL .../policies/42 при заходе на MITIGATOR).
Также скрипт принимает IP и время блокировки в секундах.
Описание всех параметров печатается с ключом --help (-h).
Настройка log2ban
Утилита log2ban анализирует логи и при обнаружении привышения
за отведенное лимита запросов время выполняет действия по блокировке.
По ссылке приведена инструкция по установке в разделе «Install scripts»
и команда запуска log2ban. Вместо встроенного ipset-control.sh
при интеграции нужно пользоваться API или интерфейсом MITIGATOR.
Разместим скрипт блокировки:
install mitigator.py /usr/local/binНастройки log2ban указываются в log2ban.py:
-
Команда, которая будет выполняться для блокировки IP:
BAN_IP_COMMAND = "mitigator.py --server <server> --user <user> --password <password> --no-verify --policy <policy> tbl block --ip \"%s\" --time <bantime>"Метки
<server>,<user>,<password>,<policy>и<bantime>нужно заменить на реальные значения;\"%s\"оставить как есть — ip-адрес будет передан log2ban при выполненнии. Ключ--no-verifyнужен, если MITIGATOR работает с самоподписанным сертификатом, и необходимо отключить его проверку. -
Настройка подключения к базе данных
MONGODB_HOST. Если база заблокированных IP не нужна, указываетсяMONGODB_HOST = None. -
Команда для чтения лога
ECHO_LOG_COMMAND, формат лога (см. документацию).
Проверка работы
Трафик должен идти через MITIGATOR, должна быть включена общая защита и защита выбранной политики.
Имитировать атаку можно утилитой httperf:
httperf --server 192.0.2.20 --num-conn 100При успешной настройке через несколько секунд после запуска httperf
на сервере можно видеть, что log2ban отработал и вызвал исполнение
скрипта блокировки
На MITIGATOR можно в карточке TBL политики проверить, что IP атакующего (192.0.2.20 в примере) находится в списке временно заблокированных.