零基础搞定服务器CC攻击防护:从入门到落地
什么是CC攻击?为什么要防护?
CC攻击(Challenge Collapsar,即挑战黑洞)是一种针对应用层的DDoS攻击,通过大量伪造的HTTP请求耗尽服务器资源,导致网站卡顿甚至崩溃。
对于个人站长或小企业,一台低配服务器很容易被打瘫。防护CC攻击不需要复杂的硬件,通过软件层面就能有效缓解。
本文基于常见环境(Linux服务器 + Nginx + 宝塔面板),用最直接的方法帮你上手。
动手前需要准备的几件事
- 确认服务器环境:执行
cat /etc/os-release查看Linux发行版;执行nginx -v确认Nginx版本(建议1.18+)。 - 拥有root权限:登录SSH后执行
sudo -i切换到root,或者使用具有sudo权限的用户。 - 备份关键文件:Nginx主配置文件
/etc/nginx/nginx.conf和站点配置文件(常见于/etc/nginx/conf.d/或宝塔的/www/server/nginx/conf/)。 - 选择防护方式:新手推荐先配置宝塔面板的Nginx防火墙(免费插件),再补充Nginx原生限流作为兜底。
两步搞定核心防护配置
第一步:安装并配置宝塔Nginx防火墙
进入宝塔后台 → 软件商店 → 搜索“Nginx防火墙” → 安装免费版(或付费增强版)。
安装后进入设置界面:
- 开启CC防御开关
- 设置单IP每秒请求次数(建议10次/秒,高于此值触发拦截)
- 开启人机验证(对可疑请求弹出JS验证,对搜索引擎无影响)
- 点击全局配置 → IP黑白名单:添加你自己的IP到白名单,避免误封
验证:访问网站首页,打开浏览器开发者工具(F12),查看“网络”请求,应显示正常200状态。若出现503且响应头包含 bt_ccdeny,说明防护生效。
第二步:Nginx原生限流加固(即使面板宕机也有效)
编辑Nginx主配置文件(宝塔路径 /www/server/nginx/conf/nginx.conf,
非宝塔路径 /etc/nginx/nginx.conf),
在 http { } 块内添加:
limit_req_zone $binary_remote_addr zone=cc:10m rate=10r/s;
然后在站点 server { } 块中的 location / 内添加:
limit_req zone=cc burst=20 nodelay;
参数含义:rate=10r/s 是每秒最多10个请求,burst=20 允许瞬间多20个请求排队,nodelay 表示排队请求不延迟处理。
保存后执行 nginx -t 测试配置正确性,再执行 nginx -s reload 重载。
避坑指南:最容易出错的五个地方
- burst设置过小:如果网站有正常跳跃式访问(如刷新页面),
burst=5会导致频繁拦截。建议从burst=20开始,观察日志调整。 - 未排除静态资源:图片、CSS、JS等静态文件应单独
location ~* \.(jpg|png|css|js)$ {}并在该块内关闭限流(limit_req off;),否则会影响页面加载。 - 仅依赖单层防护:建议同时开启宝塔防火墙+Nginx限流+CDN三层。CDN推荐Cloudflare免费版,可以过滤大量恶意流量。
- 忘记更新规则:攻击特征变化后,宝塔防火墙规则库需要手动更新(设置页面点击“更新规则”)。
- 忽略系统参数调优:修改
/etc/sysctl.conf中net.ipv4.tcp_tw_reuse = 1和net.core.somaxconn = 65535,减少TIME_WAIT堆积。执行sysctl -p生效。
如何验证防护效果?
- 查看访问日志:Nginx日志路径通常为
/var/log/nginx/access.log,执行tail -f /var/log/nginx/access.log观察请求频率,如果大量请求被返回503或444(宝塔拦截码),说明防护正在工作。 - 使用压力测试工具(本地执行,不要攻击自己线上服务器):安装
ab(apt install apache2-utils),执行ab -c 50 -n 2000 http://你的网站/观察错误率。正常情况下大部分请求应被拦截。 - 监控资源占用:执行
top -bn1 | grep -E '^%CPU|^MiB Mem'查看CPU和内存,若攻击期间资源保持稳定说明防护有效。
总结:照着以上步骤完成配置后,你的服务器已经具备了基础的CC攻击抵御能力。
如果后续遇到更猛烈的攻击,可以进一步限流(降低rate值)或接入高防CDN。
记住,没有一劳永逸的防护,定期检查日志和调整参数才是长期安稳的关键。