Блокировка 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 в примере) находится в списке временно заблокированных.