fail2ban的一个奇怪的正则表达式问题

打算用fail2ban,对一些服务进行防护。

要匹配的正则表达式,想着用fail2ban-regex测试一下先。

首先用fail2ban-regex 'test 192.168.1.1' '.*

试了一下发现是miss,这个正则没有命中。

一开始很纳闷,读了一点源码发现

fail2ban-regex 在对一行日志进行校验的时候,尝试从字符串中提取日期,用于记录访问失败的时间点。

于是随手写了一个

fail2ban-regex 'test 2012-02-02 11:09:23 192.168.1.1' '.*

在本地测试可以了,但是服务器上还是miss 这就奇怪了

首先发现版本不一致 线上是0.11.1 ,本地下载了的代码是0.8的

再次阅读0.11.1 的代码,最终发现,这个代码把年份的正则普遍定义为了202\d

这这这

再次测试 fail2ban-regex 'test 2022-02-02 11:09:23 192.168.1.1' '.*

就可以被match到了。

于是乎,得出一个结论,这服务器要是坚持到2030年,fail2ban就自动失效了,除非后续更新升级一下。