Рейтинг:2

fail2ban определяет IP-адрес злоумышленника, но не блокирует его и медленно читает логи.

флаг br

Через несколько дней я получаю атаки с некоторых IP-адресов на мой nginx. Я решил использовать fail2ban для автоматического запрета, но заметил, что это работает не очень хорошо. Я вижу в журналах, что IP-адреса обнаруживаются, но не блокируются, как ожидалось.

Мой файл тюрьмы:

[nginx-40x-требование]
включено = верно
бантайм.rndtime = 2800
бантайм.инкремент = истина
порт = http,https
фильтр = nginx-40x-req
путь к журналу = /var/log/nginx/access.log
максимальная попытка = 5

и мой фильтр выглядит так:

[Определение]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<HOST>",

На моем nginx я добавил карту для обнаружения его запросов и возвращает 403 при обнаружении. Логи выглядят так:

{"status": 403, "request_time": 0,000, "remote_addr": "xx.xx.xx.xx", "@timestamp": "2021-09-03T18:32:34+02:00", "type ": "nginx", "hostname": "vps-e642f340", "host": "d.itsyjd.com", "uri": "/v2/speed_test", "request": "GET https://d .itsyjd.com/v2/speed_test HTTP/1.1", "request_method": "GET", "request_proto": "http", "request_proto_proxy": "-", "request_uri": "/v2/speed_test", "request_args ": "-", "server_proto": "HTTP/1.1", "body_bytes_sent": 552, "http_referer": "-", "http_user_agent": "Mozilla/5.0 (Linux; Android 8.0; MHA-AL00 Build/HUAWEIMHA -AL00; wv) AppleWebKit/537.36 (KHTML, как Gecko) Version/4.0 Chrome/57.0.2987.132 MQQBrowser/6.2 TBS/044304 Mobile Safari/537.36 (совместимый; Baiduspider/2.0;+http://www.baidu.com/ search/spider.html)", "msec": 1630686754.923, "upstream_connect_time": -, "upstream_header_time": -, "upstream_response": -, "pipe": "p", "gzip_ratio": "-", "brotli_ratio ": "-", "remote_user": "-", "bad_request": "1"}

На моем fail2ban я вижу много сообщений о том, что IP-адрес был обнаружен:

2021-09-03 18:34:31,494 fail2ban.filter [32586]: INFO [nginx-40x-req] Found xx.xx.xx.xx - 2021-09-03 18:29:33

Но это все еще не запрет этих IP-адресов.

Одна вещь, которую я заметил, это то, что скорость чтения fail2ban ниже, чем скорость журнала, поэтому я начал думать, что, возможно, это проблема, потому что, когда эти IP-адреса забанены, а fail2ban читает в режиме реального времени, другие IP-адреса блокируются без проблем. . Max_retry равно 5, и все IP-адреса были обнаружены более 5 раз, поэтому они должны быть забанены.

Кто-нибудь знает, что я могу делать неправильно (потому что это то, чего я не вижу).

С наилучшими пожеланиями.

РЕДАКТИРОВАТЬ: После написания этого сообщения я увидел, что оно банит, но работает очень медленно. Примерно за 15 минут забанил около 4 IP-адресов из примерно 11, при том, что каждую секунду их обнаруживают много раз.

EDIT2: очистка журнала с помощью простого эхо "" > <файл журнала> спровоцировал запреты.

Моя версия fail2ban 0.10.2.

Поскольку проблемный злоумышленник заблокирован и получает всего несколько запросов, fail2ban читает в режиме реального времени и банит:

2021-09-03 18:46:13,759 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:46:13
2021-09-03 18:46:13,909 fail2ban.actions [32586]: УВЕДОМЛЕНИЕ [nginx-40x-req] Бан XX.XX.XX.XX
2021-09-03 18:46:18,855 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:46:18
2021-09-03 18:47:07,004 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:47:06
2021-09-03 18:48:34,390 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:34
2021-09-03 18:48:54,230 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,231 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:48:54
2021-09-03 18:48:54,335 fail2ban.actions [32586]: УВЕДОМЛЕНИЕ [nginx-40x-req] Бан XX.XX.XX.XX
2021-09-03 18:50:08,488 fail2ban.filter [32586]: INFO [nginx-40x-req] Found XX.XX.XX.XX - 2021-09-03 18:50:08

Так что я все еще думаю, что проблема может быть в скорости чтения.

РЕДАКТИРОВАТЬ3:

Наконец, я обновил версию fail2ban до 0.11.2, добавил шаблон даты и изменил детектор адресов. Теперь кажется, что файл nginx читается намного быстрее.

[Определение]
failregex = ^{"status": (400|401|403), "request_time": [0-9\.]+,\s+"remote_addr": "<ADDR>",
datepattern = "@timestamp": "%%Y-%%m-%%dT%%H:%%M:%%S%%z"
Michael Hampton avatar
флаг cz
Какая версия fail2ban?
флаг br
Привет, Майкл, последняя версия Debian 10: 0.10.2. Теперь, когда злоумышленник забанен, а другой злоумышленник выполняет всего несколько запросов, похоже, это работает. Я все еще думаю о том, что проблема в скорости чтения.
Michael Hampton avatar
флаг cz
Возможно, ваш журнал был слишком большим. Вы регулярно меняете журналы nginx?
флаг br
Проблема в том, что он становится большим, когда атакующий атакует, и fail2ban не может достаточно быстро его прочитать. Я очищал лог-файл несколько раз во время своих тестов, потому что это первая мысль, поэтому лог-файл почти пуст.
флаг br
Один вопрос: Fail2ban хранит обнаруженные IP-адреса в памяти или пытается прочитать диапазон «findtime» в файле?
Рейтинг:2
флаг il
  1. Не рекомендуется отслеживать журнал доступа, см. fail2ban/wiki :: Лучшая практика особенно часть «Уменьшить паразитный лог-трафик».
  2. Неподходящие регулярные выражения также могут привести к тому, что fail2bans «скорость чтения может быть медленнее, чем скорость журнала», просто я не вижу, что ваш RE не очень хорош. Но это можно сделать быстрее, только для этого нужно изменить формат логирования. Также указание единичных и точных даташаблон может помочь ускорить обработку.
  3. Все вместе это могло создать известное состояние гонки, fail2ban был затронут до версии 0.10.5, см. https://github.com/fail2ban/fail2ban/issues/2660 подробности (исправление было выпущено в v.0.10.6 / v.0.11.2)

Также обратите внимание на ответы на похожие вопросы, например https://github.com/fail2ban/fail2ban/issues/3021#issuecomment-834287295.

флаг br
Спасибо! Я ничего не смог найти об этом, но ссылка ясна. Я обновился до последней версии и внес некоторые изменения в фильтр. Теперь вроде бы быстрее, а также похоже, что атакующий остановился.

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

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