1

我在 nginx 上设置了一些特定的规则,阻止了一些 url 和一些扩展(aspx、sh、jsp 等)。我还为 403|429|410 错误启用了自定义访问日志文件,因此我只能在一个地方获得所有拒绝访问的日志。

我的目标是让 fail2ban 读取此日志,并且对于每个以 403 错误结尾的 GET/POST,IP 都应该被禁止。

1) nginx.conf 将记录自定义错误日志文件,如下所示:

log_format 限制 '$time_local - $remote_addr "$request" $status';

这是一个日志条目:

03/Jan/2017:15:53:01 +0100 - 1.2.3.4 "GET /aaa.jsp HTTP/1.1" 403

2)我有一个像这样的fail2ban过滤器(取自这里

^<HOST> .* "(GET|POST) [^"]+" 403

3)我试过fail2ban-regex

fail2ban-正则表达式 /var/log/nginx/access-live-limitbot-website.log /etc/fail2ban/filter.d/nginx-403.conf

这是输出

Results
=======

Failregex: 0 total

Ignoreregex: 0 total

Date template hits:
|- [# of hits] date format
|  [1] Day/MONTH/Year:Hour:Minute:Second
`-

Lines: 2 lines, 0 ignored, 0 matched, 2 missed
|- Missed line(s):
|  217.19.158.242 "POST /wp-login.php HTTP/1.1" 403
|  03/Jan/2017:15:53:01 +0100 - 217.19.158.242 "GET /aaa.jsp HTTP/1.1" 403
`-

而且我永远不会得到与错误代码匹配的条目。

有人会根据我的自定义日志帮助我使用正则表达式吗?

谢谢你

4

1 回答 1

2

Fail2ban 对日期格式很挑剔。另外,为了便于匹配,我建议重新排序日志中的项目。

有关日期格式,请参阅此处的文档:

为了让日志行匹配你的failregex,它实际上必须匹配两部分:行的开头必须匹配时间戳模式或正则表达式,并且行的其余部分必须匹配你的failregex。如果失败正则表达式使用前导 ^ 进行锚定,则锚点指的是行剩余部分的开始,在时间戳和中间空格之后。

与时间戳匹配的模式或正则表达式当前没有记录,用户无法读取或设置。请参阅 Debian 错误 #491253。如果您的日志具有 fail2ban 不期望的时间戳格式,则这是一个问题,因为它将无法匹配任何行。因此,您应该针对示例日志行测试任何新的失败正则表达式,如下例所示,以确保它匹配。如果 fail2ban 无法识别您的日志时间戳,那么您有两个选择:或者重新配置您的守护程序以使用更常见格式的时间戳进行日志记录,例如上面的示例日志行;或提交错误报告,要求包含您的时间戳格式。

对于重新排序,诸如日期时间-状态-主机(-其他东西)之类的东西将有助于创建一个简单的模式,例如 403。

因此,您的日志应如下所示:

03-01-2017 15:53:01 403 1.2.3.4 "GET /aaa.jsp HTTP/1.1"

你的模式可以是

403 <HOST>

您可以从命令行运行它以验证为:

fail2ban-regex '03-01-2017 15:53:01 403 1.2.3.4 "GET /aaa.jsp HTTP/1.1"' '403 <HOST>'

产生输出:

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

Use regex line : 403 <HOST>
Use single line: 03-01-2017 15:53:01 403 1.2.3.4 "GET /aaa.jsp HTTP...

Matched time template Day-Month-Year Hour:Minute:Second
Got time using template Day-Month-Year Hour:Minute:Second

Results
=======

Failregex: 1 total
|- #) [# of hits] regular expression
|  1) [1] 403 <HOST>
`-

Ignoreregex: 0 total

Summary
=======

Addresses found:
[1]
    1.2.3.4 (Tue Jan 03 15:53:01 2017)

Date template hits:
2 hit(s): Day-Month-Year Hour:Minute:Second

Success, the total number of match is 1
于 2017-08-25T06:50:28.637 回答