我试图通过以下配置避免令人讨厌的xmlrpc攻击:
server {
listen 443 ssl default deferred;
server_name myserver.com;
...
}
server {
listen 80;
server_name myserver.com;
location /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
return 444;
}
return 301 https://$host$request_uri;
}
显然,位置块无法正常工作,因为对/xmlrpc.php的请求会被重定向,如日志所示:
[02/Jun/2016:11:24:10 +0000] "POST /xmlrpc.php HTTP/1.0" 301 185 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
如何在不将其重定向到HTTPS的情况下立即放弃对/xmlrpc.php
的所有请求?
答案 0 :(得分:2)
XMLRPC攻击是一种常见的攻击,它允许攻击者使用随机身份验证凭据不断调用您的xmlrpc.php文件。
你需要使用像Fail2Ban这样的实用程序,它可以非常有效地阻止和防止你的WordPress站点遭受常见的xmlrpc攻击。
如果您不从外部发布内容,首先禁用XMLRPC。在主题的function.php
文件
add_filter( 'xmlrpc_enabled', '__return_false' );
在.conf
文件中添加以下内容
location = /xmlrpc.php {
deny all;
access_log off;
log_not_found off;
}
然后,您需要在服务器上安装Fail2Ban
apt-get install fail2ban iptables
或
yum install fail2ban
安装后,您需要编辑jail.conf文件
vim /etc/fail2ban/jail.conf
在jail.conf
文件中添加以下代码行
[xmlrpc]
enabled = true
filter = xmlrpc
action = iptables[name=xmlrpc, port=http, protocol=tcp]
logpath = /var/log/apache2/access.log
bantime = 43600
maxretry = 2
这将读取access.log文件(提供访问日志的实际路径)并查找失败的尝试。如果它检测到超过2次尝试失败,则会在您的iptables中添加攻击者IP地址。
现在,我们必须为fail2ban创建一个过滤器。在终端
中键入此内容cd /etc/fail2ban/filter.d/
vim xmlrpc.conf
在此过滤器文件中粘贴以下定义
[Definition]
failregex = ^<HOST> .*POST .*xmlrpc\.php.*
ignoreregex =
现在,只需重新启动fail2ban服务
service fail2ban restart or /etc/init.d/fail2ban/restart
查看此类日志
tail -f /var/log/fail2ban.log
同样在您的iptables中,您将不断看到许多必须看到连接拒绝错误的条目。
watch iptables -L
持续监控。它应该立即阻止xmlrpc攻击,你应该在你的iptables中看到很多条目。
如果有依赖于XMLRPC的插件,您可以在配置文件中允许自己的IP。
答案 1 :(得分:0)
你可以这样试试:
location ^~/xmlrpc.php {
deny all;
access_log off;
log_not_found off;
return 444;
}