Centos

fail2ban 找到匹配項,但不禁止

  • April 20, 2020

我在 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)

引用自:https://serverfault.com/questions/970854