fail2ban 没有禁止但匹配日志

fail2ban 没有禁止但匹配日志

我尝试使用 fail2ban 创建暴力破解保护。使用 fail2ban 测试,它匹配我想要匹配的日志,但使用我的测试暴力破解网站并有 7 次以上登录失败,它不会禁止我的 IP 地址。

筛选:

[Definition]
failregex = <HOST>:.*"POST /login.*" 200 .*$
ignoreregex =

监狱:

[shop-brute-force]
enabled  = true
filter   = shop-brute-force
logpath  = /etc/exampleorg/shop/log/access.log
maxretry = 7
findtime = 60
bantime  = 900
ignoreip =

日志示例(使用...、88.88.88.88 和 example.org 匿名化):

2022/04/01 08:09:25.413720 88.88.88.88:10729 - - [01/Apr/2022:08:09:25 +0000] "POST /login?target=%2Fshop%2F HTTP/1.1" 200 2192 "https://example.org/login?target=%2Fshop%2F" "..."

测试:

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

Use   failregex filter file : shop-brute-force, basedir: /etc/fail2ban
Use         log file : /home/user/test.log
Use         encoding : UTF-8


Results
=======

Failregex: 3 total
|-  #) [# of hits] regular expression
|   1) [3] <HOST>:.*"POST /login.*" 200 .*$
`-

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [106] Year(?P<_sep>[-/.])Month(?P=_sep)Day 24hour:Minute:Second(?:,Microseconds)?
`-

Lines: 106 lines, 0 ignored, 3 matched, 103 missed
[processed in 0.02 sec]

Missed line(s): too many to print.  Use --print-all-missed to print all 103 lines

答案1

我尝试使用 fail2ban 创建暴力破解保护
failregex = ... 200 ...

这不一定是暴力破解尝试,因为 200 是常规响应,表示 OK... 通常,像 401 或 403 这样的代码表示未经授权的尝试,或者如果服务以 200 响应,它会在某些日志文件或日志中写入额外的日志条目(不一定写入access.log)。但这里还有另外一些事情非常值得怀疑,更不用说理论上可以使用其他方法进行暴力破解POST

但是我的测试强制该网站登录失败7次以上......
Lines: 106 lines, 0 ignored, 3 matched, 103 missed

您没有提供与这 7 次尝试相对应的完整日志摘录。并且fail2ban-regex只找到 3 个与您的相关的匹配项failregex(这根本不好,例如未锚定且有 catch-all,但没关系 - 匹配项不在那里)。可能它会将其他内容记录为您的示例中的单个日志行,因为您的 RE 基本上与此相匹配。因此,请使用与您所做的所有 7 次尝试相对应的完整日志摘录来更新您的问题。

最后但同样重要的一点是,更好的 RE 看起来应该是这样的:

failregex = ^\s*<ADDR>:\d+ [^"]*"[A-Z]+ /login\b[^"]*" 200\b

但是我仍然不确定您是否真的会使用它(由于我上面提到的第 200 个问题等)。

如果只是测试(有 3 条日志行),而你确实在实际日志中看到了所有 7 条日志行,则可以检查此有关 fail2ban 无法禁止的可能原因的常见问题解答。例如,它可能不正确backend(将其设置auto为与文件相关的监控)或不合适的禁止操作或 fail2ban 方面存在一些错误(也请检查 fail2ban.log)。

相关内容