宝塔免费版能防cc攻击但能力很基础,仅支持简单ip频率限制,无ua识别、cookie跟踪等功能,易误封;专业版需分层配置+白名单+referer/user-agent过滤才能有效防护。

宝塔免费版能防CC攻击吗?能,但很基础
宝塔免费版自带的 Nginx防火墙 确实有CC防御开关,但它只做最简单的“单位时间+同一IP+任意URI”计数,比如60秒内超20次就封。没有UA识别、没有Cookie会话跟踪、不区分GET/POST、也不看Referer或路径前缀——这意味着正常用户点快一点、页面带多个AJAX请求、或者用手机浏览器预加载,都可能被误拦。
- 勾选【开启CC防御】后,
触发周期和触发频率必须人工试错调整:博客类建议从60秒/30次起步;电商详情页多的站点,得提到60秒/80次才不至于卡住用户 - 封禁是临时的,默认1小时,但面板里看不到实时拦截日志,只能去
/www/wwwlogs/your-site.error.log搜403或limit - 一旦误封,得手动进【黑名单】页签删IP,不能按网段批量清,也不能导出分析
真要控QPS,必须手写Nginx limit_req
宝塔面板的「访问限制」功能(在站点设置里)只支持黑白名单和地域屏蔽,完全不支持每秒请求数(QPS)控制。想限流,就得直接改Nginx配置,靠 limit_req_zone 和 limit_req 这两个指令。
- 在站点配置文件的
http块顶部加:limit_req_zone $binary_remote_addr zone=perip:10m rate=5r/s; - 再在
location / {}块里加:limit_req zone=perip burst=10 nodelay; - 改完必须点【保存】→【重载配置】,不是重启Nginx,否则会中断服务
-
burst=10表示允许突发10个请求排队,nodelay让这10个立刻放行(不匀速),适合前端资源加载;若去掉nodelay,就会把超量请求匀速放出,可能拖慢首屏
注意:rate=5r/s 是硬上限,但Nginx实际统计的是“每秒平均”,不是严格滑动窗口——比如前0.1秒来了5个,后面0.9秒一个没来,下一秒又来5个,它不会拦。真正严控得上专业版或WAF。
专业版CC规则怎么设才不误伤?关键在分层+白名单
宝塔专业版的CC模块有四档模式(普通/严格/智能/自定义),但直接开「智能模式」不一定好——它依赖流量基线学习,新站没历史数据,容易把上线压测当攻击。
- 【全局配置】里先关掉「增强模式」,避免对静态资源(JS/CSS)也限流;「四层防御」可开,它能挡掉TCP层的无效连接
- 【网站配置】中单独为登录接口(如
/api/login)加规则:路径填/api/login(精准匹配),设成60秒/20次,动作选「拒绝访问」 - 一定要配【蜘蛛池】并启用云端识别,否则百度、Googlebot爬虫扫站会被当成CC源封掉
- 在【IP白名单】里加上你自己的办公IP、运维跳板机IP,以及CDN回源IP段(比如Cloudflare的
173.245.48.0/20),不然开了CC,CDN自己都回源失败
别只盯着IP限流,漏掉Referer和User-Agent就等于开门
很多CC攻击用伪造UA+随机Referer绕过基础防护,而免费版防火墙根本不看这两项。专业版虽支持UA黑白名单,但默认不启用,得手动开。
- 在【全局配置】→【UA过滤】里,把常见爬虫UA(如
Googlebot、Baiduspider)加白;把明显异常的(如sqlmap、masscan)加黑 - 若需更细粒度,比如只限流非浏览器请求,得回Nginx配置里用
map:map $http_user_agent $is_bot { default 0; "~*sqlmap|nmap|gobuster" 1; } limit_req_zone $is_bot zone=botlimit:10m rate=1r/s;然后在location /里加limit_req zone=botlimit if=$is_bot;
注意:if= 参数要求 Nginx ≥1.13.6,宝塔旧版Tengine不支持,会报 unknown directive "limit_req" 错误——先执行 nginx -v 看版本,再决定是否升级或换方案。
规则越细,配置越容易冲突;白名单没加全,CDN或监控系统就可能失联。这事没法一劳永逸,得盯日志、看拦截量、定期调参。










