Новый jail fail2ban страшно включать сразу на бан. Фильтр для веба, который выглядел безобидно, может поймать мониторинг, вебхук платёжной системы или собственный офис, и узнаете вы об этом от клиента, который не может зайти на сайт. Безопаснее сначала посмотреть, кого jail забанил бы, ничего при этом не блокируя. Разберём, как сделать такой режим наблюдения в обычном fail2ban и как он устроен в KIPBan.
Шаг 0. Проверить фильтр на старом журнале
Первая проверка не требует включать jail вообще. Утилита fail2ban-regex прогоняет журнал через фильтр и показывает совпадения:
fail2ban-regex /var/log/nginx/access.log /etc/fail2ban/filter.d/nginx-botsearch.conf --print-all-matched | less
Смотрите не на число совпадений, а на сами строки и адреса. Если среди них есть ваш мониторинг, офис или адреса партнёров, фильтр нужно поправить или добавить эти адреса в ignoreip.
Ограничение у такой проверки одно: она показывает совпавшие строки, а не забаны. Сколько адресов наберут порог maxretry за окно findtime, она не считает. Для этого и нужен режим наблюдения.
Шаг 1. Jail, который считает, но не банит
В поставке fail2ban есть действие dummy: оно ничего не блокирует, а только записывает забаненные адреса в файл. Если назначить jail только это действие, fail2ban будет работать как обычно, вести счётчики и «банить», но брандмауэр не тронет:
# /etc/fail2ban/jail.d/nginx-botsearch-watch.local
[nginx-botsearch]
enabled = true
port = http,https
logpath = /var/log/nginx/access.log
maxretry = 2
findtime = 10m
bantime = 1h
action = dummy
fail2ban-client reload
fail2ban-client status nginx-botsearch
Через несколько часов или сутки смотрите, кого jail «забанил»:
grep 'nginx-botsearch.*Ban ' /var/log/fail2ban.log
cat /var/run/fail2ban/fail2ban.dummy
Если в списке только сканеры и боты, переключайте jail на бан: уберите строку action = dummy, тогда сработает действие по умолчанию из banaction, и выполните fail2ban-client reload.
Как читать счётчик «забанил бы»
- Своих адресов нет — переключайте на бан.
- Свои есть, но их немного — добавьте их в
ignoreipи понаблюдайте ещё сутки. - Своих много — фильтр слишком широкий. Типичные причины: правило на код 404 или 403 без уточнения, правило на пустой User-Agent или на пустой запрос. Так ходят мониторинг, балансировщики и клиенты API, банить их нельзя.
- Никого нет — либо атак этого типа на сервер нет, либо jail смотрит не в тот журнал. Проверьте
logpathкомандойfail2ban-client get ИМЯ logpath.
Порог и окно
Порог maxretry и окно findtime зависят от того, что ловит jail:
- Однозначные признаки атаки: запрос к
/.git/config, строкаsqlmapв User-Agent, известный эксплойт в URL. Случайно так не ходят, порог 1. Сканеры почти всегда приходят с отдельного адреса и делают одну-две попытки, с порогом 5 они не попадут в бан никогда. - Перебор паролей: ошибиться может и живой человек, порог 3–5 за 10 минут.
- Медленный перебор: боты, которые делают попытку раз в несколько минут, обходят окно в 10 минут. Для них подходит окно в час или сутки с тем же порогом.
Как это сделано в KIPBan
В KIPBan режим наблюдения — это режим по умолчанию для каждого нового jail:
- Включение. Кнопкой «Включить jail» в отчёте анализа журналов или «Добавить jail» на странице сервера. Выбрать можно только шаблоны, которые подходят к найденным на сервере журналам.
- Наблюдение. Новый jail считает, кого забанил бы, и ничего не блокирует. Счётчик виден в кабинете.
- Переключение на бан — когда видно, что свои под него не попадают. Адрес блокируется как обычно в KIPBan: со сроками, растущими при повторах, с уведомлением в Telegram и с отправкой в общую базу.
- Настройки. Порог от 1 до 100 срабатываний, окно от минуты до суток, до 20 jail на сервер.
- Применение. Агент сам пишет конфигурацию fail2ban, проверяет её и перезапускает fail2ban без потери банов, всё в течение 5 минут. Если какой-то jail fail2ban не принимает, остальные применяются, а в кабинете видна ошибка.
- Журналы. Jail берёт те же журналы, что нашёл анализ, и раз в час обновляет список. Новый сайт на сервере подхватывается сам.
Whitelist KIPBan действует и здесь: адреса из него не блокируются ни одним jail. Внесите туда офис и VPN до того, как переключать jail на бан.
Ограничения: jail из кабинета есть только для Linux с агентом 21.6 и новее, настраивается для каждого сервера отдельно, а выбирать можно только из каталога шаблонов KIPBan. Свои jail в jail.local агент, как и раньше, подключает к KIPBan сам.
Вопросы
Как включить jail fail2ban без блокировки?
Назначьте jail только действие dummy: action = dummy. fail2ban будет вести счётчики и записывать «забаненные» адреса в журнал и в файл /var/run/fail2ban/fail2ban.dummy, но брандмауэр не тронет.
Как посмотреть, какие строки ловит фильтр fail2ban?
Командой fail2ban-regex с ключом --print-all-matched: она прогоняет журнал через фильтр и выводит все совпавшие строки. Ничего при этом не блокируется.
Какой maxretry ставить для сканеров?
Для однозначных признаков сканирования, вроде запроса к .git/config или User-Agent sqlmap, порог 1. Сканеры обычно делают с одного адреса одну-две попытки и до порога 5 не доходят.