答案1
你可以采取很多措施来阻止攻击者消耗你的资源。
(重新)考虑对管理区域使用密码保护
您可能有充分的理由不在所有或部分网站上使用此方法,但请不要低估此技术的实用性。尽可能使用。
通过要求用户在 Web 服务器级别登录,您可以最大限度地减少攻击者可能造成的损害,限制应对这些攻击所需的资源,并进一步保护可能存在漏洞的网站。
限制管理员登录到 IP 白名单(Web 服务器)
您可以拒绝访问您网站的部分内容。即使您必须开放相当大的 IP 子网,也比让全世界都访问要好!
在 nginx 中它可能看起来像这样:
location /wp-admin {
# block one workstation
deny 192.168.1.1;
# allow anyone in 192.168.1.0/24
allow 192.168.1.0/24;
# drop rest of the world
deny all;
}
使其更难找到
暴力攻击会做出许多假设。如果您可以重命名 wp-admin 文件夹、重命名 wp-login.php 或在非标准端口上运行 wp-admin,那么您就不必花费宝贵的资源来验证这些暴力登录。
尝试fail2ban
http://wordpress.org/plugins/wp-fail2ban/
fail2ban 是您可以实施的最简单、最有效的安全措施之一,可以防止暴力猜测密码攻击。
fail2ban 有一些有趣的功能:
阻止使用错误用户名登录的尝试
许多攻击者会尝试使用常见用户名(例如 admin)登录。最好不要使用这些用户名,这样您就可以阻止任何尝试使用这些用户名登录的人。
WPf2b 现在允许您指定一个正则表达式,如果请求的用户名匹配,它将简化登录过程
定义('WP_FAIL2BAN_BLOCKED_USERS','^admin$');
ip 白名单 (fail2ban)
这里的想法是列出将作为请求的远程 IP 出现的可信代理的 IP 地址。
define('WP_FAIL2BAN_PROXIES','192.168.0.42,192.168.0.43');
答案2
我马上就能想到几种可能性;按照对合法用户的侵入性大致增加的顺序:
- 重命名
wp-login.php
为其他名称?(升级时需要维护,依靠隐蔽性实现安全性,但应该能够阻止大多数非针对性脚本攻击,同时尽量减少合法用户的麻烦。) - CPU 限制 Web 服务器进程?(导致 Web 服务器在请求泛滥时变得有些迟缓,但即使在面临重击的情况下也应允许服务器维护;即使只剩下 5% 的 CPU 也应该足够了。可能还需要与数据库服务器进程协调。)
wp-login.php
在前端负载均衡器或防火墙中限制请求的速率?(在请求泛滥时会给合法用户带来麻烦,但至少服务器的其余部分(包括对博客内容的公共访问)应该可以继续顺利运行。)
答案3
我编写了一个 WordPress 插件,您可能会觉得它很有用。
不良行为有很好的跟踪记录阻止这些暴力攻击。它是一种极简主义的 Web 应用程序防火墙,可以在 WordPress 加载完成之前很早就阻止链接垃圾邮件和其他一些恶意流量,从而节省 CPU 和其他资源。(我说极简主义是因为可以做什么仅有的与您在 Web 服务器或单独设备上可以执行的操作相比,此层的操作是最少的,尽管它是为没有其他选择的人设计的。
您可以在WordPress 插件库。
由于您运行服务器,您可能还想使用ModSecurity与核心规则集。许多“不良行为”的规则都在这里重新实施(在其中查找我的名字和/或“不良行为”的名字),并且规则集还包含许多其他可能对您有帮助的规则。