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就自动失效了,除非后续更新升级一下。