我目前正在设置一个过滤器来过滤针对名为的文件的 POST 攻击xmlrpc.php
。日志访问中应监控的请求如下所示:
1.99.437.201 - - [01/Feb/2016:01:57:14 +0000] "POST /xmlrpc.php HTTP/1.1" 200 631 "-" "curl/7.30.0"
监狱长这样:
[xmlrpc]
enabled = true
filter = xmlrpc
action = iptables[name=xmlrpc, port=http, protocol=tcp]
logpath = /srv/www/logs/access.log
bantime = 43600
maxretry = 5
我的过滤器是:
[Definition]
failregex = ^<HOST> .*POST .*xmlrpc\.php.*
ignoreregex =
我正在尝试找出正则表达式无法捕获日志尝试的原因。您能解释一下这<HOST>
到底代表什么吗?
答案1
正<HOST>
则表达式非常智能。除其他事项外,它还知道 IP 地址由 4 个八位字节组成,每个八位字节可以具有 0 到 255 之间的值。问题中的 IP 地址是 1.99。437.201 不符合此规范,因此不会匹配<HOST>
正则表达式。如果您更改第二个八位字节以满足规范,则您的正则表达式将按预期工作
$ cat log
1.99.237.201 - - [01/Feb/2016:01:57:14 +0000] "POST /xmlrpc.php HTTP/1.1" 200 631 "-" "curl/7.30.0"
$ fail2ban-regex log "^<HOST> .*POST .*xmlrpc\.php.*"
Running tests
=============
Use failregex line : ^<HOST> .*POST .*xmlrpc\.php.*
Use log file : log
Use encoding : UTF-8
Results
=======
Failregex: 1 total
|- #) [# of hits] regular expression
| 1) [1] ^<HOST> .*POST .*xmlrpc\.php.*
`-
Ignoreregex: 0 total
Date template hits:
|- [# of hits] date format
| [1] Day(?P<_sep>[-/])MON(?P=_sep)Year[ :]?24hour:Minute:Second(?:\.Microseconds)?(?: Zone offset)?
`-
Lines: 1 lines, 0 ignored, 1 matched, 0 missed [processed in 0.00 sec]
答案2
我使用更简单的方法来阻止所有xmlrpc.php
攻击。
只需将此代码放入您的.htaccess
文件中:
<Files "xmlrpc.php">
Order Allow,Deny
Deny from all
</Files>
此代码将保护您的 Wordpress 免受所有僵尸网络的攻击。