我必须承认,正则表达式一直是我的弱点。我从来没有坐下来花足够的时间学习它们以有效地使用它们。但是,我真的不知道为什么这不匹配。我正在尝试制作一个自定义的 failregex 来阻止人们试图利用任何 xmlrpc.php 错误(并且他们一直在尝试这样做)。
我在 Ubuntu 16.04.2 上使用 fail2ban v0.9.3,Apache 2.4.18。
这是我的正则表达式:
<HOST> - - \[\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} +\d{4}\] "POST /xmlrpc.php HTTP/1.0" 200
这是一个不匹配的示例行(IP 替换为 0):
0.0.0.0 - - [06/Apr/2017:07:45:42 +0000] "POST /xmlrpc.php HTTP/1.0" 200 752 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
我无法弄清楚为什么它不匹配。据我所知,这应该是完全匹配的。任何人都可以透露一些信息吗?
此外,让 + 和 - 符号的时区偏移量匹配会很好……我认为HTTP/1.0
用HTTP/1.\d{1}
它替换应该匹配 1.0 和 1.1,对吗?
提前致谢!
编辑:在使用fail2ban-regex 在命令行上玩弄之后,我发现它的正则表达式<HOST> - - \[
将匹配所有行。但是,第二个我将其更改为<HOST> - - \[\d{2}
它根本不匹配任何行。这似乎没有道理!
编辑 2:嗯,与此同时,我正在使用<HOST> - - \[.* "POST /(xmlrpc|wp-login).php HTTP/1.\d" 200
并且与我想要的行匹配。但是,我仍然很想知道为什么我原来的不匹配,因为我宁愿使用更具体的正则表达式而不是我现在使用的广泛的正则表达式。
试试这个正则表达式 - 我用 regexr.com 测试过它,它肯定是匹配的:
<HOST> - - \[\d{2}\/\w{3}\/\d{4}(:\d{2}){3} \+0000\] "POST \/xmlrpc.php HTTP\/1.0" 200
Run Code Online (Sandbox Code Playgroud)
问题之一是没有逃避斜线 - 这需要完成。
编辑(在我看到你的编辑后):我试着简化它并想出了匹配的:
failregex = ^<HOST> - - \[.*\] "POST \/xmlrpc.php.*$
Run Code Online (Sandbox Code Playgroud)
这不是你想要的,但它有效