Centos
fail2ban 找到匹配項,但不禁止
我在 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"
其中一些請求由於某種原因返回 200,但
ProxyRequests
已關閉。這是我的配置:
apache-badhosts.conf
[Definition] failregex = ^<HOST> - -.*"(GET|POST|HEAD|CONNECT).*(bad_host_1|bad_host_2|bad_host_3).*"$ ignoreregex =
監獄.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]
失敗2ban.log
日誌幾乎是空的,只顯示
sshd
禁令。為什麼fail2ban 不禁止IP,儘管它使用上面的正則表達式找到匹配項?
很可能你沒有
pyinotify
在你的系統上安裝這會導致 fail2ban 無法獲取日誌文件修改。我遇到了同樣的問題並使用它修復了它。
–
安裝
pyinotify
yum install python-inotify
–
安裝後,編輯
jail.local
並放置[myjail] ... backend = pyinotify ...
–
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)