我在 CentOS 7 上使用 fail2ban 0.9.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"
ProxyRequests
尽管已关闭,其中一些请求仍因某种原因返回 200 。
这是我的配置:
apache-badhosts.conf
[Definition]
failregex = ^<HOST> - -.*"(GET|POST|HEAD|CONNECT).*(bad_host_1|bad_host_2|bad_host_3).*"$
ignoreregex =
监狱配置文件
[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,尽管它使用上面的正则表达式找到了匹配项?
答案1
很可能您没有pyinotify
在系统上安装,这导致 fail2ban 无法获取日志文件修改。我遇到了同样的问题,并使用此方法解决了它。
1.
安装pyinotify
yum install python-inotify
2.
安装后,编辑jail.local
并输入
[myjail]
...
backend = pyinotify
...
3.
systemctl restart fail2ban
答案2
这并不是上述问题的确切解决方案,但可能会对其他人有所帮助:
对我来说,问题在于 fail2ban 监视了错误的日志文件。
我的 nginx jails 无法工作,因为它们使用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
修复它。
要查看 jail 使用哪个日志文件,您可以检查启动消息/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)