Написание многострочного регулярного выражения для fail2ban

Вопрос или проблема

Я не уверен, правильный ли это регулярное выражение, но я пытаюсь добавить несколько строк в ignoreregex

Вот строки конфигурации в моем ddos.conf:

[Definition]
failregex = ^<HOST> -.*"(GET|POST).*
ignoreregex =.*(robots.txt|favicon.ico|jpg|png)
             ^<HOST> -.*"(GET|POST).*(Googlebot|bingbot)

Если код правильный, что мне добавить для множества строк

Вы можете добавить несколько регулярных выражений к failregex и ignoreregex (точно так же, как вы это сделали с ignoreregex), просто:

  • ignoreregex на самом деле не ожидает тега <HOST>, поэтому замените его на \S+ или что-то подобное;
  • ваши регулярные выражения уязвимы – не используйте захватывающие выражения (.*, .+ и т.д.), поэтому всегда старайтесь писать регулярные выражения как можно точнее и закреплять их. Например, из-за первого ignoreregex злоумышленник может добавить ?robots.txt к запросу, чтобы игнорировать находки.
  • таким же образом фейковый googlebot может продолжать свою атаку – недостаточно проверять только агента.

Написание многострочного регулярного выражения для fail2ban

Смотрите мой ответ на аналогичный вопрос на github.com / fail2ban #2971, comment-798429044.

Также обратите внимание на мой ответ на stackoverflow / 64857401 #65375323.

Ответ или решение

Для написания многострочного регулярного выражения (regex) для Fail2Ban, важно учитывать специфику работы с логами, чтобы наиболее точно идентифицировать нежелательные запросы для блокировки. Давайте рассмотрим ваш запрос о добавлении нескольких строк к ignoreregex в конфигурационном файле ddos.conf.

1. Понимание структуры failregex и ignoreregex

a. failregex

Ваша строчка:

failregex = ^<HOST> -.*"(GET|POST).*

Эта конструкция предполагает, что Fail2Ban будет искать строки в логах, начинающиеся с IP-адреса (<HOST>), за которым следует определенный шаблон (GET или POST).

b. ignoreregex

Конструкция:

ignoreregex =.*(robots.txt|favicon.ico|jpg|png)

здесь вы пытаетесь игнорировать запросы к определённым ресурсам, таким как robots.txt или favicon.ico.

2. Модификация вашего конфигурационного файла

Ваше актуальное выражение ignoreregex можно улучшить. Во-первых, <HOST> не является необходимым в этой секции, так как это выражение игнорирует хосты. Вместо этого можно использовать \S+ для захвата любого значащего символа.

Пример исправленной конфигурации:

[Definition]
failregex = ^<HOST> -.*"(GET|POST).*
ignoreregex = \S+ -.*"(GET|POST).*(robots.txt|favicon.ico|jpg|png)
               |^<HOST> -.*"(GET|POST).*(Googlebot|bingbot)

Объяснение:

  1. \S+ заменяет <HOST>, чтобы обнаруживать все IP-адреса.
  2. Используется оператор | для объединения условий игнорирования в одну строку. Это позволяет легко добавлять дополнительные правила прямо в одной секции без большого количества повторяющихся строк.

3. Усовершенствование регулярных выражений

Следует обратить внимание на уязвимости:

  • Использование выражений .* может приводить к ненадежному срабатыванию. Лучше использовать более специфичные конструкции.
  • Проверка только на User-Agent (например, Googlebot) недостаточна; хакеры могут легко вводить поддельные User-Agent строки.

Пример более строгого ignoreregex:

ignoreregex = \S+ -.*"(GET|POST).*(robots\.txt|favicon\.ico|\.jpg|\.png|\.jpeg)$
               |^(\S+) -.*"(GET|POST).*(Googlebot|bingbot).*

4. Проверка и тестирование

После внесения изменений важно протестировать ваши регулярные выражения с помощью утилит, таких как fail2ban-regex. Это поможет убедиться, что они правильно захватывают данные, которые нужно игнорировать, и не блокируют легитимные запросы.

Пример использования:

fail2ban-regex /path/to/access.log /etc/fail2ban/filter.d/ddos.conf

Заключение

Создание эффективного fail2ban фильтра требует тщательного выбора регулярных выражений, чтобы избежать ложных срабатываний. Используя указанные выше рекомендации, вы сможете улучшить свои конфигурации и повысить безопасность своей системы, минимизируя ненужные блокировки.

Эта информация может быть полезной как для администраторов, так и для корневых пользователей, стремящихся защитить свои серверы и приложения от DDoS-атак.

Оцените материал
Добавить комментарий

Капча загружается...