Попытка №1
непосредственно не видел, но...
Хотя новейшие версии fail2ban-regex поддерживают выходные параметры, вы можете сделать что-то вроде этого:
fail2ban-client установить "$jail" banip $(
fail2ban-regex -o 'ip' /var/log/path/some.log какой-то фильтр | сортировать --unique | тр '\n' ' '
)
это было бы подходящим только в том случае, если бы вы нашли какие-либо IP-адреса, делающие сбои независимо от количества/времени. В вашем случае это было бы бессмысленно, по крайней мере, без дополнительной предварительной обработки.
Попытка № 2 Я думал, что повторение исторических журналов в журнале, который в настоящее время просматривает fail2ban, заставит их проанализировать.
Это не сработало бы, потому что fail2ban на самом деле не учитывал бы время сообщения правильно: либо оно было бы слишком старым (если оно было зарегистрировано без изменений), либо оно было бы неправильным (если сейчас зарегистрировано как время сбоя, потому что вам нужно учитывать максретри
и найти время
при реальном использовании).
Обратите внимание, что fail2ban будет пытаться сейчас - найти время
по старту (ибо другие сообщения ему не интересны, т.к. слишком устарели), см. https://github.com/fail2ban/fail2ban/issues/2909#issuecomment-758036512.
В любом случае, на данный момент это вряд ли возможно со стандартными инструментами fail2bans из коробки (по крайней мере, если это средство «повторного сканирования» из RFE выше не будет реализовано и выпущено).
Но так как fail2ban (как и fail2ban-regex
) это модуль на питоне, можно было бы с фильтром из питона писать баны в какой-то лог или отправлять их напрямую в основной инстанс fail2ban, см. https://github.com/fail2ban/fail2ban/issues/2909#issuecomment-1039267423 для такого примера скрипта.
Также учтите, что ваш фильтр крайне уязвим и медлителен, лучше перепишите его максимально точно, как здесь:
failregex = ^"<ADDR>" \S+ \S+ [^"]*"[A-Z]+ /(?:\S+/)*[^\.]*(?:\.(?!ico|jpg|png |gif|js|css|woff|mp4)\w+)? [^"]+"
И последнее, но не менее важное: зачем вам это вообще нужно? Если джейл с таким фильтром активен и такие краулеры возвращаются, они будут забанены, как только сделают максретри
сбои во время найти время
, настроенный для джейла. Превентивный запрет на самом деле не нужен, и он просто будет беспокоить вашу подсистему сетевого фильтра большим количеством IP-адресов (они, вероятно, никогда больше не вернутся).