2017-08-17 74 views
0

我目前正在优化我的fail2ban过滤器。Fail2ban未能匹配日期格式

我正则表达式之前是这样的:

<HOST> \- \- \[.*\] \"(GET|POST) .+ HTTP\/\d\.\d\" 40\d \d{2,5} \"(.*)\" \"(.*)\"$ 

,它是在为一个包含404错误这样的每一行:

<HOST> - - [16/Aug/2017:14:02:33 +0200] "GET /favicon.ico HTTP/1.1" 404 6494 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko" 

之后,我改变了:

\[.*\] 

通过

\[[0-9]{2}\/.{3}\/[0-9]{4}\:([0-9]{2}\:){2}[0-9]{2} \+[0-9]{4}\] 

但现在它与fail2ban不再匹配,而像regex101这样的网站仍然认可正确的模板! (不要介意\ HOST,如果我没有把这个词出现的话)。

我试图通过[0-9]/通过\/改变\ d\: 的fail2ban总是错过了线,我不知道为什么。 。

是否有人遇到同样的问题?谢谢 ! :)

+0

你是故意逃避两个'*'在第一正则表达式的结束?这似乎阻止了它的工作。 我可以通过以下方法使其与您的更改一起运行:http://regexr.com/3giqc – Bananaapple

+0

@Bananaapple不会在代码块语法之前忘记删除它。我的第二个正则表达式可以和你的在线工具一起工作,但不会与fail2ban:/ – Levrifon

+0

嗯,根据http://fail2ban.readthedocs.io/en/latest/filters。html#regular-expressions fail2ban使用Python的正则表达式,即使我测试它与特定的风格相比,你的正则表达式也能正常工作:https://www.debuggex.com/r/xC-YEMB4P-DM-Td2 - 这留下了两个选项然后。 1 - fail2ban中的错误,2 - 您的错误或其他疏忽。你测试过他们的命令行工具的正则表达式吗? ./fail2ban-regex --help – Bananaapple

回答

0

你需要躲避最后+和后]

\[[0-9]{2}/.{3}/[0-9]{4}:([0-9]{2}:){2}[0-9]{2} \+[0-9]{4}\]

而且,可能的话,正斜杠/ - 取决于特定的正则表达式的解释。

+0

感谢您的回答,这些符号已经逃脱,但Stackoverflow删除他们我纠正我的问题,谢谢;) – Levrifon

+0

@Levrifon你应该使用代码格式,而不是blockquotes。 –

+0

@SebastianProske谢谢:)我改变了对不起 – Levrifon

0

可能唯一需要的模式是:<HOST> .* 404这应该根据实际日志进行测试。 fail2ban-regex命令行实用程序对测试非常有用。

请注意,可能存在误报,因此在主机之后移动响应代码并在此之后获得日期/时间会更容易,在这种情况下^<HOST> 404会更加精确。

关于性能,看起来这将不太容易出错,并且如果不比更长的速度更快,速度会更快。请参阅下面有关过滤器性能提示的第二个链接

+0

感谢您的回答,这是工作是的,但它是最佳的执行时间? – Levrifon

+0

我已经回复了最佳执行时间问题。 – jeffmcneill