宝塔面板怎么防 CC 攻击?Nginx 限速配置实操
很多小站长用宝塔面板管理服务器,被 CC 打了之后想找"宝塔防 CC 怎么配"。这篇讲实操。
先说结论:宝塔自带的防护能挡住小规模 CC 和扫描,但挡不住真正的分布式 CC。它是「应急手段」,不是「解决方案」。
宝塔有哪些防护功能
| 功能 | 位置 | 作用 |
|---|---|---|
| Nginx 免费防火墙 | 软件商店 | IP 黑名单、UA 过滤、频率限制 |
| 网站防火墙(付费) | 软件商店 | CC 防护、SQL 注入、XSS |
| 系统防火墙 | 安全 | 端口控制、IP 黑白名单 |
| Nginx 配置 | 网站 → 设置 → 配置文件 | limit_req 限速 |
方案一:Nginx 限速(免费,最实用)
在宝塔的「网站 → 设置 → 配置文件」里,找到 http 块,加入限速规则:
# 定义限速区:按 IP 限制,10MB 内存,每秒 10 个请求
limit_req_zone $binary_remote_addr zone=req_limit:10m rate=10r/s;
# 定义连接数限制
limit_conn_zone $binary_remote_addr zone=conn_limit:10m;
然后在 server 块里应用:
server {
# 突发允许 20 个,超出的排队
limit_req zone=req_limit burst=20 nodelay;
# 单 IP 最多 20 个并发连接
limit_conn conn_limit 20;
# 超限返回 429 而不是 503(更友好)
limit_req_status 429;
limit_conn_status 429;
}
参数怎么定:
rate=10r/s:正常用户不会一秒点 10 次,这个值对大多数网站够用burst=20:允许瞬间 20 个请求(页面加载会并发请求多个资源)nodelay:突发部分立即处理,不排队
方案二:针对登录接口单独限速
登录接口最容易被 CC 打,因为它要查数据库、算密码哈希,最耗资源。
# 登录接口单独限速:每分钟 5 次
location = /api/login {
limit_req zone=req_limit burst=5 nodelay;
limit_req_status 429;
# 可选:只允许 POST
limit_except POST { deny all; }
proxy_pass http://127.0.0.1:8080;
}
方案三:UA 和 Referer 过滤
低级的 CC 工具 UA 是空的或者是固定值,可以直接拦:
# 拦截空 UA
if ($http_user_agent = "") {
return 403;
}
# 拦截常见攻击工具 UA
if ($http_user_agent ~* "(curl|python|java|scrapy|bot)") {
return 403;
}
注意:UA 过滤只能挡低级的,改一下 UA 就绕过了。别指望这个。
方案四:宝塔付费防火墙
宝塔的「网站防火墙」插件(付费,约 100 元/年)有 CC 防护功能:
- CC 防御:可设置单 IP 访问频率、封禁时长
- 人机验证:可疑请求弹验证码
- IP 黑名单:自动封禁高频 IP
对小站来说够用,但要注意:
- 会消耗服务器 CPU(规则匹配需要算力)
- 可能误杀正常用户(尤其用了 CDN 的情况)
- 分布式 CC 完全无效(每个 IP 只发一点点)
用 CDN 的话要特别注意
如果你在宝塔前面套了 CDN,Nginx 看到的 IP 全是 CDN 节点的 IP,不是真实用户 IP。
这时候按 IP 限速会把 CDN 节点封掉,导致全站不可访问。
解决:配置 real_ip 模块
# 在 http 块里
set_real_ip_from 0.0.0.0/0; # 生产环境应填 CDN 的 IP 段
real_ip_header X-Forwarded-For;
real_ip_recursive on;
配完之后,$binary_remote_addr 才是真实用户 IP。
验证方法:配好后看 Nginx 日志里的 IP,如果还是 CDN 节点的 IP,说明没生效。也可以用
curl -H "X-Forwarded-For: 1.2.3.4" 测试。
宝塔防护的上限在哪
说清楚,避免期望过高:
| 攻击类型 | 宝塔能防吗 |
|---|---|
| 小规模 CC(单 IP 高频) | ✅ 能 |
| 扫描、暴力破解 | ✅ 能 |
| 分布式 CC(代理池) | ❌ 不能 |
| DDoS 流量攻击 | ❌ 完全不能 |
| UDP Flood | ❌ 完全不能 |
核心原因:宝塔是在你的服务器上做软件层过滤。如果攻击流量已经把带宽打满,软件层根本收不到请求,配什么都没用。
而且软件过滤本身要消耗 CPU——被 CC 打的时候,防护规则反而可能成为压垮服务器的最后一根稻草。
正确的防护层次
- 带宽层:靠服务商的清洗中心,本地做不了
- 网络层:防火墙规则、IP 黑名单
- 应用层:Nginx 限速、WAF(宝塔在这层)
- 业务层:会话校验、验证码、风控
宝塔只能覆盖第 3 层的一部分。真正的 DDoS 防护必须在第 1 层解决。
小站的务实建议
- 先把 Nginx 限速配上,免费且有效,能挡掉大部分低级 CC
- 登录接口单独限速,这是最容易被针对的地方
- 关掉不必要的端口,减少攻击面
- 日志开起来,被打时能分析
- 真被大规模打了,别死磕宝塔,上专业防护或者套 CDN
小结
宝塔的防护是「够用但不强」:
- 日常防护、挡扫描、挡低级 CC → 够用
- 分布式 CC、DDoS → 挡不住
如果游戏业务被持续攻击,光靠宝塔解决不了,需要的是节点级的防护。对比可以看 游戏盾和高防 IP 到底选哪个。