Рейтинг:0

Тестирование исторических журналов в fail2ban

флаг tk

Настраивать Я запускаю apache на сервере ubuntu. Я создал правило fail2ban, которое блокирует ip, когда они запрашивают слишком много страниц слишком быстро.

# Правило Fail2ban
failregex = ^.*?(:80|:443) <HOST> - .* "(GET|POST|HEAD).*$
ignoreregex =.*(.ico|.jpg|.png|.gif|.js|.css|.woff|.mp4)

найти время = 30
максимальная попытка = 10

Цель:
Я хотел бы запустить старый журнал apache для этого нового правила fail2ban, чтобы я мог видеть, блокирует ли он какие-либо законные запросы.

Попытка №1 Я думал, что смогу использовать fail2ban-regex для получения списка потенциально заблокированных пользователей, но у него нет такой функциональности.

Попытка №2 Я думал, что повторение исторических журналов в журнале, который в настоящее время просматривает fail2ban, заставит их проанализировать. После исправления небольшого зависания, когда строки журнала со старыми датами игнорировались (исправлено путем добавления к ним года), fail2ban начал их анализировать и блокировать IP-адреса. Однако мне достаточно было взглянуть на первый заблокированный IP-адрес, чтобы убедиться, что это неправильно. Рассматриваемый IP-адрес сделал всего 10 запросов, и они не были близки друг к другу по времени. Я могу только предположить, что fail2ban не использует метку времени строки журнала для определения достоверности, что делает этот метод тестирования провальным.

# эхо-пример
zcat other_vhosts_access.log.8.gz | sed -n 's/\/2022:/\/2032:/p' >> /var/log/apache2/fail2ban_test.log

Заключение Поскольку обе мои предыдущие попытки потерпели неудачу, я не могу придумать разумный способ решить эту проблему. Может ли кто-нибудь порекомендовать способ добиться того, что мне нужно? Или предложите понимание того, почему мое второе решение не работает.

Рейтинг:0
флаг il

Попытка №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-адресов (они, вероятно, никогда больше не вернутся).

флаг tk
Спасибо, себрес. Я не мог бы требовать более полного ответа. Я посмотрю на этот скрипт Python. Ваши улучшения регулярных выражений также очень ценятся. Что касается моих причин, я не пытаюсь проводить превентивные баны, а вместо этого пытаюсь выявить ложные срабатывания. Повторно запуская старые журналы, я надеюсь найти ситуации, когда пользователь был забанен за законное использование. Затем я бы изменил failregex, чтобы принять их. Выполнение бэктеста даст более быстрые и точные результаты, чем ручное тестирование.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.