Назад | Перейти на главную страницу

fail2ban находит совпадения, но не банит

Я использую fail2ban 0.9.7 на CentOS 7 вместе с обратным прокси-сервером Apache, пытаясь заблокировать ботов, пытающихся получить доступ к моему серверу в качестве открытого прокси, например:

221.8.179.164 - - [10/Jun/2019:22:04:19 +0200] "CONNECT auth.riotgames.com:443 HTTP/1.1" 405 235 "-" "Mozilla/5.0 (Windows NT 6.1; rv:27.0) Gecko/20100101 Firefox/27.0"

Некоторые из этих запросов по какой-то причине возвращают 200, хотя ProxyRequests выключен.

Вот моя конфигурация:

apache-badhosts.conf

[Definition]
failregex = ^<HOST> - -.*"(GET|POST|HEAD|CONNECT).*(bad_host_1|bad_host_2|bad_host_3).*"$

ignoreregex =

jail.conf

[apache-badhosts]
port     = http,https
# I made sure this is the proper path
logpath  = /var/log/httpd/access_log
bantime  = 172800
maxretry = 1
enabled  = true

И вот результат fail2ban-regex :

user@host /e/fail2ban> sudo fail2ban-regex /var/log/httpd/access_log /etc/fail2ban/filter.d/apache-badhosts.conf

Running tests
=============

Use   failregex filter file : apache-badhosts, basedir: /etc/fail2ban
Use         log file : /var/log/httpd/access_log
Use         encoding : UTF-8


Results
=======

Failregex: 10797 total
|-  #) [# of hits] regular expression
|   1) [10797] ^<HOST> - -.*"(GET|POST|HEAD|CONNECT).*(bad_host_1|bad_host_2|bad_host_3).*"$
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [13813] Day(?P<_sep>[-/])MON(?P=_sep)Year[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-

Lines: 13813 lines, 0 ignored, 10797 matched, 3016 missed
[processed in 2.44 sec]

fail2ban.log

Журнал почти пуст и показывает только sshd запреты.

Почему fail2ban не запрещает IP-адреса, хотя находит совпадения, используя указанное выше регулярное выражение?

Скорее всего у вас нет pyinotify установлен в вашей системе, из-за чего fail2ban не может получить изменения файла журнала. У меня была такая же проблема, и я решил ее с помощью этого.

1.

Установить pyinotify

yum install python-inotify

2.

После его установки отредактируйте свой jail.local и положи

[myjail]
...
backend = pyinotify
...

3.

systemctl restart fail2ban

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

Для меня проблема заключалась в том, что fail2ban смотрел не тот файл журнала.

Мои тюрьмы nginx не работали, так как они использовали logpath = %(nginx_error_log)s который /var/log/nginx/error.log. Однако все обращения, включая 4xx и 5xx, регистрировались в /var/log/nginx/access.log.

Обмен %(nginx_error_log)s с участием %(nginx_access_log)s починил это.

Чтобы узнать, какой файл журнала использует тюрьма, вы можете проверить сообщение запуска /var/log/fail2ban.log:

Creating new jail 'nginx-http-auth'
Jail 'nginx-http-auth' uses pyinotify {}
Initiated 'pyinotify' backend
Added logfile: '/var/log/nginx/error.log' (pos = 0, hash = da39a3ee5e6b4b0d3255bfef95601890afd80709)