时间戳

时间戳

我知道如何使用fail2ban以及如何配置监狱,但我对它的实际工作原理感到不舒服。

问题是,有一个特殊的监狱选项激起了我的好奇心:findtime

当我配置过滤器时,需要使用主持人关键字(匹配IP地址),以便fail2ban可以知道要比较的IP,并在必要时禁止。好吧。

但是时间没有这样的事情:fail2ban 无法知道将一行添加到日志文件的确切时间,因为没有TIME关键字,对吗?实际上,它可以在任何时间线上扫描文件,并且仍然可以工作。

我猜这意味着fail2ban正在定期扫描文件:它在内部设置扫描时间,以便它可以findtime通过比较自己的扫描日期来处理选项。

首先,我说得对吗?如果是这样,扫描频率是多少?如果有很多大的日志文件需要经常扫描,难道不会成为瓶颈吗?

那么,如果扫描频率优于findtime选项会发生什么情况呢?这是否意味着fail2ban适应了findtime它发现的最小选项来设置其最小扫描频率?

答案1

首先。这(也许)不是一个答案,但也许比评论更好(而且有点长)。

时间戳

找到你的陈述:

实际上,它可以在任何时间线上扫描文件,并且仍然可以工作。

与文档冲突。你是什​​么意思工作

手册#filters (v 0.8) 指出:

如果您要创建自己的失败正则表达式,您应该了解以下一些事项:

  • [...]

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

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

请注意,日志文件可以是配置好的包括时间戳以及格式的时间戳。 (其中包括消息正如评论中提到的。)

另请参阅此线程,特别是消息 #14 和 #19:

两个例子:

请注意,您还可以使用以下命令进行测试:

fail2ban-regex /var/log/auth.log /etc/fail2ban/filter.d/sshd.conf

1 无时间戳:

$ fail2ban-regex ' [1.2.3.4] authentication failed' '\[<HOST>\] authentication failed'

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

Use   failregex line : \[<HOST>\] authentication failed
Use      single line :  [1.2.3.4] authentication failed


Results
=======

Failregex: 0 total

Ignoreregex: 0 total

Date template hits:

Lines: 1 lines, 0 ignored, 0 matched, 1 missed
|- Missed line(s):
|   [1.2.3.4] authentication failed
`-

2 带时间戳:

$ fail2ban-regex 'Jul 18 12:13:01 [1.2.3.4] authentication failed' '\[<HOST>\] authentication failed'

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

Use   failregex line : \[<HOST>\] authentication failed
Use      single line : Jul 18 12:13:01 [1.2.3.4] authentication failed


Results
=======

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

Ignoreregex: 0 total

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

Lines: 1 lines, 0 ignored, 1 matched, 0 missed

扫描次数

手动#反应时间:

评估反应时间是相当困难的。 Fail2ban 等待1秒在检查要扫描的新日志之前。在大多数情况下这应该没问题。但是,登录失败的次数可能会多于 maxretry 指定的次数。

在这方面还请参阅此线程:回复:Bug#481265:fail2ban:轮询间隔不可配置

但下可选但推荐的软件一找到加明。

Gamin 是一个文件更改监视器。 Gamin 极大地受益于支持“inotify”的内核。因此,不再需要主动轮询来获取文件修改。

如果安装了 Gamin 并且backendinjail.conf设置为汽车(或者加明) - 将使用Gamin。

答案2

重要的是要注意,日期不必位于行的开头,当且仅当您让正则表达式使用通配符“识别”它时。

例如:假设tomcat7日志文件中有一些像这样的行:

1.2.3.4 - - [13/Feb/2017:02:47:44 -0300] "GET /manager/html HTTP/1.1" 401 2486
1.2.3.4 - - [13/Feb/2017:02:47:45 -0300] "GET /manager/html HTTP/1.1" 401 2486
1.2.3.4 - - [13/Feb/2017:02:47:45 -0300] "GET /manager/html HTTP/1.1" 401 2486
1.2.3.4 - - [13/Feb/2017:02:47:45 -0300] "GET /manager/html HTTP/1.1" 401 2486
1.2.3.4 - - [13/Feb/2017:02:47:45 -0300] "GET /manager/html HTTP/1.1" 401 2486
1.2.3.4 - - [13/Feb/2017:02:47:46 -0300] "GET /manager/html HTTP/1.1" 401 2486

看看它们,日期不是开头,这应该是一个问题。

尽管如此,如果您使用具有“日期空间”的正则表达式对其进行测试,则测试将匹配:

$ fail2ban-regex '1.2.3.4 - - [13/Feb/2017:02:47:44 -0300] "GET /manager/html HTTP/1.1" 401 2486' '<HOST> - - \[.*\] "GET .* HTTP/1.1" 40\d \d+$'

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

Use regex line : <HOST> - - \[.*\] "GET .* HTTP/1.1" 40\d \d+$
Use single line: 1.2.3.4 - - [13/Feb/2017:02:47:44 -0300] "GET /man...

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] <HOST> - - \[.*\] "GET .* HTTP/1.1" 40\d \d+$
`-

Ignoreregex: 0 total

Summary
=======

Addresses found:
[1]
    1.2.3.4 (Mon Feb 13 02:47:44 2017)

Date template hits:
2 hit(s): Day/MONTH/Year:Hour:Minute:Second

Success, the total number of match is 1

相关内容