如何针对恶意用户开数百标签页的行为进行请求速率限制?
单IP请求速率限制的可行方案(适配WordPress + LiteSpeed环境)
一、LiteSpeed 原生速率限制(优先推荐)
直接利用LiteSpeed Web服务器的原生功能,在Web层拦截高频请求,性能远优于PHP脚本方案,不会额外消耗PHP资源。
- 控制台配置:登录LiteSpeed服务器控制台,进入「Server Configuration > Security > Rate Limiting」,设置单IP的请求阈值(比如每分钟30次),触发后返回429状态码或临时封禁。
- .htaccess 快速配置:如果不想操作控制台,可在网站根目录的
.htaccess中添加规则,全局限制单IP请求频率:<IfModule Litespeed> # 全局单IP限频:每分钟最多30次请求 RewriteEngine On RewriteCond %{REQUEST_METHOD} GET|POST RewriteRule .* - [E=LSLIMIT:%{REMOTE_ADDR}] Header set X-LiteSpeed-RateLimit "30/60" env=LSLIMIT # 针对AJAX请求单独设置更严格限制(每分钟20次) <Files "admin-ajax.php"> Header set X-LiteSpeed-RateLimit "20/60" env=LSLIMIT </Files> </IfModule> - LiteSpeed Cache 插件配置:如果习惯在WordPress后台操作,打开LiteSpeed Cache插件的「安全 > 速率限制」,直接设置单IP请求次数、封禁时长,还能针对特定URL(如AJAX接口)单独配置规则。
二、服务器防火墙层面限制(最高效拦截)
在网络层直接拦截高频请求,完全不占用Web服务器资源,适合大流量攻击场景。以iptables为例:
# 限制80端口单IP每分钟最多60个新连接 iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 60 -j DROP # 对443端口做同样限制 iptables -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --set iptables -A INPUT -p tcp --dport 443 -m state --state NEW -m recent --update --seconds 60 --hitcount 60 -j DROP
执行后可通过iptables -L -n查看规则是否生效,若需要重启后保留规则,可执行iptables-save > /etc/iptables/rules.v4(不同系统路径可能有差异)。
三、WordPress 插件辅助限制
如果不想接触服务器配置,可选择专门的安全插件实现速率限制:
- Wordfence Security:开启「Rate Limiting」功能,可设置单IP的全局请求频率,还能针对登录、AJAX等关键路径单独配置,同时附带恶意IP库拦截功能。
- Perfmatters:不仅有速率限制,还能优化WordPress性能,减少攻击带来的负载压力,适合注重性能的站点。
四、Cloudflare 免费版规则优化
虽然你提到攻击被判定为合法访问,但可通过调整Cloudflare规则提升防护力度:
- 利用免费版的1条速率限制规则名额,在「安全 > WAF > 速率限制规则」中创建规则,设置单IP每分钟最多50次请求,触发后要求验证(如Turnstile验证码)。
- 针对AJAX请求创建单独规则:当请求URL包含
admin-ajax.php时,将阈值设为每分钟20次,过滤异常高频的AJAX调用。 - 开启「浏览器完整性检查」,过滤掉请求头不规范的自动化请求。
为什么不推荐PHP $_SESSION方案?
该方案依赖PHP处理每个请求,攻击发生时CPU已满载,PHP脚本无法及时处理;且未登录用户可能未启用SESSION,容易被绕过,防护效率极低,不适合应对大规模高频请求攻击。
内容的提问来源于stack exchange,提问作者Niko
相关产品推荐
相关产品推荐

