Сервер: Nginx
Версия Fail2ban: v0.9.3
Похоже, что независимо от того, что я пробую, я не могу заставить fail2ban последовательно найти правильный хост из записи журнала.
/etc/fail2ban/filter/expanse-bot.conf:
[Definition]
failregex = ^(\d{2}|\d{3}) \| <HOST> \| .*\"Expanse indexes the network.*
The ^(\d{2}|\d{3})
ловит порт 80 или 443. Первоначально я попробовал использовать подстановочный знак в начале строки с ^.*
, но это не сработало.
Запись в журнале:
443 | 34.77.162.32 | - | [14/Mar/2021:11:08:23 -0500] | redacted-domain.com | "GET / HTTP/1.1" | 200 | 144126 | "-" | "Expanse indexes the network perimeters of our customers. If you have any questions
or concerns, please reach out to: scaninfo@expanseinc.com" | - | 123.45.67.89:1234
В /var/log/fail2ban.log
, он показывает эти странные IP адреса, которые не существуют в журнале:
2021-03-14 11:07:02,716 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 0.0.0.3
2021-03-14 11:07:03,656 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 0.0.0.4
2021-03-14 11:07:03,865 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 0.0.0.5
2021-03-14 11:07:04,075 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 0.0.0.6
Однако, затем он запрещает правильно?:
2021-03-14 11:13:48,075 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.13
2021-03-14 11:13:51,288 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.27
2021-03-14 11:15:19,595 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.16
2021-03-14 11:16:30,884 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.12
2021-03-14 11:18:14,208 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.18
2021-03-14 11:19:39,513 fail2ban.actions [10818]: NOTICE [expanse-bot] Ban 34.77.162.11
Конфигурация в моем /etc/fail2ban/jail.local
:
[expanse-bot]
enabled = true
filter = expanse-bot
logpath = /var/log/nginx/access.log
port = http,https
maxretry = 1
findtime = 3
bantime = 86400
action = iptables-allports[name=expanse-bot]
Как только он проходит через эти странные IP адреса, он делает все как задумано. Я просто не понимаю, что означает 0.0.0.*, когда его нет в журнале? Есть ли что-то, чего мне не хватает в основной конфигурации?
Хотя я не понимаю, как это возможно с привязанным failregex
, вроде вашего, я попытаюсь объяснить, как работает fail2ban.
Тег
может находить хосты также по его имени хоста. Чтобы избежать этого, вы можете использовать вместо него тег
(только> = v.0.10) или установить usedns = no
в тюрьме.
Разве у вас действительно нет строк, начинающихся с 2–3 цифр и вертикальной черты, и текста после них? Я имею в виду какую-то многострочную строку журнала ...
Fail2ban обычно сохраняет совпадения в базе данных, поэтому вы также можете получить оттуда совпавшие строки:
sqlite3 'file:/var/lib/fail2ban/fail2ban.sqlite3?mode=ro' "select * from bans where jail = 'expanse-bot' and ip like '0.0.0.%'"
Между прочим (\ d {2} | \ d {3})
можно заменить на \ d {2,3}
и универсальный . *
в конце не имеет никакого значения и может быть безопасно удален ( RE не привязан к концу сообщения). Но . *
в середине (перед «Expanse индексирует сеть») можно заменить на что-то более точное.
Если ваш RE изначально был отключен (и эти нечетные адреса появляются во время перезапуска) - это могут быть старые, ранее сопоставленные и заблокированные билеты (fail2ban восстанавливает активные IP-адреса после перезапуска).
Просто удалите их, отключив бан вручную см. fail2ban-client --help | grep unban
.