上一篇 下一篇 分享链接 返回 返回顶部

服务器被CC攻击怎么办:识别、拦截与复盘

发布人:泮崵 发布时间:4小时前 阅读量:3

CC 攻击是最常见也最消耗心力的攻击类型:流量不大(几十 M 到几百 M)、没有明显爆发曲线,但 CPU 打满、数据库排队、网站 502。它不触发机房的高防机制(因为流量太小),却能把业务拖垮。这篇讲 CC 攻击的完整处理:怎么识别、怎么在应用层和网关层拦截、被打期间的业务保全、以及事后的复盘与加固。

黑洞与流量型 DDoS 的处理见另一篇(15 分钟应急),这篇专注应用层攻击。

一、识别:确认这是 CC 而不是故障

CC 的典型特征四条,满足两条以上基本可以确认:

  • 流量正常但 CPU 异常:带宽不高,CPU 或 PHP-FPM 进程池打满
  • 访问日志高频重复:同一 URL 或同一类 URL 每秒几十上百次
  • UA 或来源集中:单一 UA、同一批 IP 段、或全部来自代理/数据中心段
  • 真实用户受影响:正常用户反馈卡顿或打不开,但监控显示总流量不高

快速定位命令:

  • tail -1000 access.log | awk '{print $1}' | sort | uniq -c | sort -rn | head -20:看高频来源 IP
  • tail -1000 access.log | awk '{print $7}' | sort | uniq -c | sort -rn | head -10:看高频 URL
  • ss -ant | awk '{print $1}' | sort | uniq -c:看连接状态分布,ESTAB 异常多且都指向同一接口

注意区分「被 CC」和「被刷」:营销活动、采集器、监控误配置也会造成高频访问。看访问目的是搜商品还是打登录接口,前者是正常流量,后者才是攻击。

二、拦截:从网关到应用的四层防线

层手段见效速度
Nginx 限频limit_req 按 IP 限请求速率分钟级
黑名单高频 IP/UA/URL 直接拒绝分钟级
人机校验关键接口加验证码或 JS 挑战小时级
缓存化被打的页面改静态缓存小时级,最治本

Nginx 限频的典型配置:

  • limit_req_zone $binary_remote_addr zone=one:10m rate=10r/s;
  • 对动态接口(登录、搜索、下单)单独设更严的 rate,静态资源放宽
  • burst 参数给小余量(如 burst=20 nodelay),避免误伤正常用户

黑名单的三个来源:日志统计出的高频 IP(注意排除自己的监控与办公网)、攻击者的 UA 特征、以及 IP 信誉库返回的数据中心段。代理池攻击的特点是 IP 分散,此时按 IP 封效率低,要靠频率限制与行为识别。

三、业务保全:被打期间让真实用户能用

拦截规则上线后,攻击还在继续,要做的是让真实流量绕开战场:

  • 静态化核心页面:首页与热门详情页改成静态缓存,攻击打到动态接口也伤不了页面展示。
  • 关键接口降级:登录、下单接口加队列与限流,宁可排队不可崩掉;支付回调接口加白名单。
  • 动静分离:静态资源切到 CDN,源站只留动态请求,攻击面直接减半。
  • 公告与安抚:如果部分功能受限,页面上给出说明,比用户自己猜强得多。

一个常见的决策错误是「临时关站」:对多数业务,半可用状态(浏览可以、下单排队)远好于完全关闭,关站超过一天的损失通常大于被攻击本身的损失。

四、溯源:搞清楚攻击者想要什么

CC 攻击是有目的的,识别目的能帮你判断接下来的策略:

  • 打特定接口(登录、注册、支付回调):可能是竞品或敲诈,重点加固该接口并联系服务商升级防护。
  • 打全站动态页:消耗资源的泛攻击,缓存化 + 限频就能顶住大部分。
  • 伴随撞库(登录接口高频且账号名多样):这是数据安全事件,除了限频还要检查账号安全与风控。
  • 伴随勒索信息:按敲诈勒索处理,保留证据,不建议支付。

日志留存的规范在这类时刻体现出价值:有完整 access log 与时间线,才能向服务商、平台甚至警方提供有效证据。

五、复盘与长期加固

攻击平息后一周内完成复盘,输出四样东西:

  • 时间线:攻击开始、发现、响应、恢复各时点,算出实际 MTTR(平均恢复时长)
  • 暴露面清单:这次为什么能打成?哪个接口没有限频?哪个页面没有缓存?
  • 规则沉淀:本次生效的限频与黑名单规则固化到配置管理,下次直接用
  • 架构升级:把「限频 + 缓存 + CDN」三件套变成永久配置而不是临时补丁

长期视角:CC 攻击的成本极低(几十块钱的代理池就能发起),防御的本质是把「单个请求的处理成本」降到攻击者不划算的水平——缓存让请求不触达应用、限频让单 IP 的请求量有上限、人机校验让脚本成本上升。三条做到位,绝大多数 CC 会自行退去。

附:CC 应急物资清单

  • Nginx 限频配置模板(按接口分级,平时就写好)
  • 日志留存策略:access log 至少保留 30 天且可检索
  • 高频 IP 统计脚本(本文第一节的三条命令)
  • 告警规则:5xx 超阈值、单接口 QPS 异常
  • 静态化与缓存方案的开关路径,被打时能快速切换
  • CDN 控制台权限与紧急切换的操作手册
  • 服务商高防/清洗的联系方式与升级流程

攻击来临时,这份清单决定了你的恢复时间是 30 分钟还是 4 小时。

补一个完整的实战时间线供参考。某 WordPress 站被 CC:14:03 监控告警 5xx 超阈值;14:05 查日志发现搜索接口每秒 200+ 请求,来源集中在 40 个数据中心 IP 段;14:08 上线 Nginx 限频(搜索接口 5r/s,burst 10),5xx 恢复正常;14:20 攻击者换代理池继续打,频率限制开始误伤真实用户;14:35 搜索接口改缓存化(结果缓存 60 秒),QPS 降到源站可忽略的水平;15:10 攻击停止。全程一个多小时,业务只在代理池阶段出现过短暂抖动。复盘发现:搜索接口原本就没有缓存也没有限频,是唯一的暴露面。这个案例的结论很典型——CC 攻击打的是你架构里最便宜的那块短板。

常见问题

Q:CC 攻击要不要买高防?
应用层攻击靠高防清洗效果有限,清洗主要针对流量型。CC 的对策是限频、缓存、人机校验,在高防产品里对应「应用层防护」模块——买之前确认包含这部分。

Q:代理 IP 攻击怎么防?
单 IP 限频对代理池效果差,改用组合策略:频率 + 行为(无 referer、无 cookie、请求间隔恒定)+ 关键接口人机校验。识别「行为像机器」比识别「IP 是谁」更有效。

Q:限频会不会误伤正常用户?
会,所以要分层:静态资源放宽、动态接口严格、登录下单最严。灰度上线限频规则,观察误伤率再收紧阈值。

Q:WordPress 被打 wp-login.php 怎么办?
三件套:登录接口单独限频(如每 IP 每分钟 5 次)、改默认登录路径、开启二次验证。暴力破解类攻击用这三招基本免疫。

Q:怎么提前发现 CC?
告警设两条:5xx 比例超 1% 持续 3 分钟、单接口 QPS 超基线 5 倍。有了告警,发现时间从「用户投诉」提前到「攻击后几分钟」。

小结

CC 处理口诀:先识别(日志统计高频 IP/URL)→ 再拦截(限频 + 黑名单)→ 保业务(缓存化 + 降级)→ 查目的(打哪里暴露了什么)→ 做复盘(规则沉淀 + 架构升级)。

核心认知:CC 是消耗战,拼的是「单个请求的成本」。缓存与限频是成本最低收益最大的两件事,平时就配上,攻击来时你只是调低阈值,而不是从零搭建防线。

相关阅读:被 CC 攻击 72 小时的运维日志、服务器被打进黑洞:15 分钟应急、美国高防服务器:CC 与 DDoS 防护怎么配、OVH 高防和 Cloudflare 区别。

延伸阅读:服务器被打进黑洞:15分钟应急与迁移决策、高防服务器完全指南:口径、清洗与验收、被CC攻击72小时的运维日志。

目录结构
全文
微信公众号 微信公众号
微信客服 微信客服
电子邮箱: admin@qyun.net