几天以来,有人向我网络服务器上托管的 wordpress 网站发送了数千个请求。
此请求的通用日志行是:
60.173.10.250 - - [23/Nov/2013:18:24:46 +0100] "GET /archivio/mgilbert/ HTTP/1.0" 200 24758 "http://www.**********.it/archivio/mgilbert/#comment-9768++++++++++++Result:+chosen+nickname+%22Tiedimmox%22;+nofollow+is+found;+success+%28from+first+page%29;+BB-code+not+working;" "Mozilla/5.0 (Windows NT 5.1; rv:15.0) Gecko/20100101 Firefox/15.0.1
由于这个请求,网站所有者收到了大量的电子邮件。请求来自不同的 IP 地址,因此我无法使用 IP 地址作为过滤器来阻止它们。
有什么方法可以阻止此类请求吗?
答案1
该网站正在受到机器人、脚本、恶意软件或一般不良因素的攻击。IP 地址将始终变化,因为这就是这些系统的工作原理。一个父主服务器控制着全球大量受感染的系统。并利用这些受感染的系统传播越来越多的恶意软件。
既然你说这是一个 WordPress 网站,那么安装的 WordPress 版本很可能存在漏洞。如果可能的话,应该升级。
另一个选择是安装ModSecurity。或者,如果您的托管服务已安装该功能,请要求他们激活它。ModSecurity 是一款出色的工具,可充当您的 Apache2 托管网站与攻击之间的 Web 服务器级防火墙。但话虽如此,配置起来可能很麻烦。有时误报可能会妨碍您网站的正常运行。
除此之外,另一个好办法是设置.htaccess/.htpasswd
密码保护wp-admin.php
。绝大多数机器人在输入密码后立即死亡,您的服务器是安全的。这可能会给管理 WordPress 网站的任何人带来不便——因为他们现在必须记住两组密码——但这是一种非常有效的阻止攻击的方法。
答案2
如果你使用 nginx,你可以匹配任何标头,并返回 403(禁止)
例如(我首先想到的,所以检查语法)
如果 $user_agent =~ /Gecko/20100101 Firefox/15.0.1/ { 返回 403; }
在 apache 上,您可以加载 mod_security,但它以大量误报而闻名,特别是当您有大量 vhosts 时。
如果你的盒子在互联网上,有一个公共 IP,另一个选择是使用 iptables 限制传入请求,
iptables -A 输入 -p tcp --syn -m 限制 --limit 1/s --limit-burst 3 -j 返回
编辑:作为短期解决方案,你可以
位置 =~ /archivio/mgilbert { 返回 403; }