Вы можете настроить Nginx для кэширования ответов, в том числе ответов с ошибкой, такой как 404. Однако, насколько я знаю, вы не можете подсчитать количество ошибок (но это не должно иметь значения).
Единственная проблема здесь в том, что если вы создаете новую страницу, а ранее она кэшировалась как 404, то она не будет работать. По крайней мере, не сразу (в зависимости от того, сколько времени требуется вашему кешу до тайм-аута).
Хотя это определенно сильно поможет. Все обращения, которые в противном случае перешли бы к вашему бэкенду и сгенерировали ошибку 404, будут остановлены в экземпляре Nginx и снова и снова будут возвращать одну и ту же ошибку 404.
Другой способ - определить местоположение и запустить команду (которая затем может запустить ipset
чтобы добавить IP-адрес). Итак, что-то вроде:
расположение /phpmyadmin.php {
content_by_lua_block {
os.execute("/usr/bin/block-ip.sh")
}
}
Однако я не слишком уверен, как вы могли справиться со многими путями.
Мой собственный опыт с фейл2бан
заключается в том, что он довольно медленный и «отсталый» (не активный). Однако, если вы действительно хотите полностью заблокировать IP-адрес, проще всего иметь свое приложение. отправить сообщение на внешний интерфейс, где вы можете запустить iptables
заблокировать ИП. Для этого вам нужно перенаправить исходный IP-адрес, который Nginx не делает по умолчанию, но легко добавить X-переадресовано-для
заголовок, что ваше приложение. затем можете отправить обратно в небольшой инструмент, который вы используете для добавления IP-адресов в свой iptables
. Обратите внимание, что вы не должны напрямую добавлять его в iptables
. Вместо этого вы должны использовать список. Для этого посмотрите на ipset
.
Если вы не можете изменить свои приложения для таких и хотите использовать фейл2бан
, вам придется проверить журналы Nginx и обнаружить те пути, которые вам не нравятся.