BotBan

Новости проекта

Ботов можно останавливать до запуска сайта: список для файрвола и журнал для fail2ban

Повторяющиеся адреса ботов закрываются на сервере до PHP: список для ipset, nginx и .htaccess с автообновлением и журнал для fail2ban.

Модуль BotBan работает внутри PHP. Чтобы показать боту страницу блокировки, сервер уже должен принять запрос и запустить интерпретатор. Это дешевле страницы сайта — на одном из подключённых сайтов 34 мс процессора против 87, — но не бесплатно, и бот, который возвращается тысячу раз в час, платит этой ценой тысячу раз. Теперь такие адреса можно закрыть раньше, на самом сервере.

Список для сервера и файрвола. На странице «Адреса ботов» появилась карточка с отдельным списком в четырёх форматах: команды для ipset, строки deny для nginx, блок для .htaccess и просто адреса. В него идут записи вашего чёрного списка и адреса, которые движок за сутки не меньше трёх раз блокировал как программу: сканер, библиотека вместо браузера, поиск файлов с паролями, браузер под управлением скрипта.

Это не та таблица, что ниже на странице. У адреса, закрытого на сервере, нет ни проверки, ни кнопки «Я человек», поэтому правила строже: блокировки «по сумме признаков» в список не идут, как и общие адреса операторов, сети поисковых систем, ваш белый список и адреса, с которых за сутки приходил хоть кто-то похожий на человека. Через двое суток тишины адрес уходит из списка сам. Пока сайт в режиме наблюдения, список пуст.

Автообновление. Список меняется каждые несколько минут, поэтому для своего сервера есть скрипт: раз в десять минут он забирает список по токену API и передаёт его ipset или nginx. Устроен он как модуль — при любой ошибке на сервере всё остаётся как было: не скачался список — действуют прежние правила, nginx не принял файл — возвращается предыдущий. Если обновление остановилось совсем, записи истекают сами через двое суток.

Журнал для fail2ban. Модуль 1.4.9 умеет записывать адреса заблокированных программ в файл — настройка ban_log, по умолчанию выключена. fail2ban читает его и закрывает адрес в файрволе за секунды, не дожидаясь обновления списка. В журнал попадают только те блокировки, что годятся для списка.

Прежняя выгрузка «Конфигурация nginx» убрана: она собиралась из всех пойманных адресов, включая тех, кто получил одну проверку, а для запрета на сервере этого мало.

Два честных ограничения. Это не защита от DDoS: атаку, которая забивает канал, гасит только провайдер. И рой, в котором каждый адрес приходит один-два раза, список не ловит — таких по-прежнему останавливает модуль.

Установка по шагам — в базе знаний: «Список для файрвола и fail2ban».