网站如何防范 CC 攻击,cc 攻击防火墙配置方案

网站访问突然变慢,登录后台查看,CPU直接跑满,数据库连接池也被占满,但是流量监控看不出异常,没有出现大规模流量涌入,遇到这种情况,大概率是遭到CC攻击。

CC攻击和粗暴的流量洪水攻击不一样,它比拼的不是带宽资源,而是服务器处理性能。攻击者借助大量代理IP或者被控肉鸡,模拟普通用户访问行为,持续请求消耗资源较重的页面,像是登录接口、搜索功能、需要查询数据库的动态页面。单个请求看起来完全合规,但成千上万请求并发过来,服务器CPU、内存、数据库连接资源就会被耗尽。正常用户发起的请求只能排队等待,最终无法得到响应,页面直接卡死。

网站如何防范 CC 攻击,cc 攻击防火墙配置方案

这种攻击最难处理的一点,就是传统防护手段效果有限。直接封禁单个IP没有意义,攻击者使用全球范围的代理IP池,封掉一个IP马上切换新地址,根本无法全部拦截。设置统一的访问频率上限,阈值调低会误拦截真实访客,阈值调高又拦不住攻击流量。相关数据显示,传统防护方案针对新型CC攻击,漏防率可以超过40%,正常用户误拦截率最高可达15%。

想要有效抵御CC攻击,不能只依靠单一拦截手段,需要搭建一套由外到内的分层防护架构,每层承担一部分拦截任务,保障正常用户请求可以顺利抵达业务逻辑。

最外层防护思路,就是不让攻击流量直接触达源服务器。最常用方案是接入CDN或者高防IP,修改域名解析指向CDN节点。用户和攻击者的请求都会先到达CDN节点,源站真实IP被隐藏。很多攻击脚本无法扫描到真实IP,攻击行为就会终止。CDN节点带宽充足、节点分布广泛,可以承接一部分攻击流量。如果网站主要面向国内访客,还能在DNS层面设置地域访问限制,仅开放国内IP访问,直接过滤大量海外自动化扫描和攻击请求。

如果你使用Cloudflare这类免费CDN,平台自带Under Attack Mode防护开关。开启之后,所有访客访问网站前,都会先加载5秒人机校验页面。该机制拦截自动化脚本效果很好,但缺点明显,真实用户访问体验下降,每次访问都要等待校验。这个功能适合攻击高峰期临时启用,攻击结束后关闭,长期开启会流失访客。

CDN过滤掉一部分攻击流量之后,剩余流量会到达Nginx这类Web服务器,这一层做精细化限流,拦截伪装程度较低的异常请求。

Nginx搭配两个模块使用防护效果更好。limit_conn用来管控并发连接数量,限制同一个IP同时维持的连接总数。配置时先在http块定义共享内存区域,示例limit_conn_zone $binary_remote_addr zone=addr:10m;,10MB内存大约能够存储16万个IP记录。接着在server或者location配置段添加limit_conn addr 10;,代表单个IP最多保持10个并发连接。CC攻击大量短连接刷资源的行为,在这一步就能拦截不少。

但limit_conn存在短板。攻击者使用长连接反复发送请求,在Keep-Alive状态持续调用接口,并发连接数不会很高,但请求频率极高,这种场景就需要limit_req补充防护,管控请求速率。配置同样先定义速率存储区域,limit_req_zone $binary_remote_addr zone=req:10m rate=10r/s;,含义为单个IP每秒最多允许10次请求。之后在location内启用limit_req zone=req burst=20 nodelay;。burst=20代表允许最多20个突发请求,nodelay表示这20个突发请求不排队,直接处理。burst数值不能设置过大,否则防护效果下降;设置过小,普通用户快速点击页面就容易被误拦截。

限流之外,Nginx还可以增加特征过滤规则。很多CC攻击脚本编写粗糙,请求头带有明显特征,例如User-Agent为空,或是使用Python-requests、curl这类工具默认标识。直接在Nginx配置拒绝这类异常UA,能够拦截一部分低级自动化脚本。还可以根据访问日志统计高频恶意IP段,批量封禁。

如果使用宝塔面板这类可视化管理工具,内置Nginx防火墙插件,一键开启CC防护,填写访问频率阈值即可,不用手动编写配置,对于不熟悉命令行的人来说是最简单的方案。

服务器层面的限流存在共同局限,只能依靠IP、连接数量、请求频率等维度判断,没办法区分请求来自真人还是脚本。攻击者把请求频率调整到和正常用户接近,这种方式就很难识别。

这时就需要应用层防护,也就是WAF网页应用防火墙接管防护。WAF分析维度比Nginx更加细致,能够解析完整请求内容,包含Cookie、Referer、URL路径、参数特征。依靠这些信息,WAF可以配置更精细的规则。举个例子,登录接口正常用户一分钟提交次数一般不超过几次,可以设置每分钟5次或者10次上限,超出阈值触发验证码或者直接拦截。搜索接口阈值可以放宽,用户存在多次搜索需求,但也不可能一分钟几十次检索。

WAF规则配置一般有多个维度。基础方式是基于源IP做频率限制;其次基于Cookie校验,很多攻击脚本不会携带合法Cookie或者伪造Cookie,WAF校验Cookie有效性完成拦截;还可以针对URL单独限速,资源消耗高的接口设置更严格阈值。华为云WAF的CC防护规则支持基于源IP、Cookie、请求头、Referer等多条件组合做限速。

现在不少WAF加入行为分析能力。系统会先学习网站正常流量基线,包含请求间隔、访问页面路径、资源加载顺序。真实用户访问网站,大多从首页进入,再点击链接跳转内页,请求间隔长短不一,不会保持固定节奏。攻击脚本大多直接请求目标接口,跳过前置页面,请求间隔要么完全一致,要么毫无规律。WAF对比这些行为特征,识别非真人请求,触发人机校验。验证方式不再局限简单验证码,采用分级机制,低风险请求无感校验,高风险才弹出滑块或者点选验证,尽量降低对正常访客的影响。

不想自行搭建WAF环境,可以直接选用云厂商成熟WAF产品。腾讯云WAF、阿里云WAF、华为云WAF都带有CC防护模块,控制台开启后配置几条频率限制规则即可生效。价格每月几千至几万不等,取决于需要防护的QPS规模和版本功能。对于具备一定规模的业务,这笔投入远低于网站遭攻击瘫痪带来的订单损失。

高防CDN是另一种方案,融合加速和安全防护。用户就近访问CDN节点,攻击流量也会在边缘节点完成清洗,不会抵达源站。阿里云国际版ESA边缘安全加速就属于这类产品,全球拥有三千多个节点,攻击流量在就近节点识别拦截,源站完全感知不到攻击。内置AI防护引擎学习站点七天正常访问基线,攻击触发后自动下发分级验证策略。这个方案适合跨境电商、独立站这类同时需要全球访问速度和安全防护的业务场景。

无论部署多少层防护,源站本身加固不能省略。服务器安全组收紧端口,仅开放80和443端口,数据库3306、远程桌面3389等端口禁止直接暴露公网。服务器系统补丁、CMS插件持续更新,很多攻击都是利用已知漏洞入侵。条件允许的话,部署Fail2Ban工具,监控日志,自动封禁短时间多次请求失败的IP,低成本基础防护,拦截一部分基础攻击。

防护配置完成之后,容易忽略误杀问题。频率阈值设置过低,普通用户快速点击页面就被拦截,直接流失访客;阈值太高,攻击流量无法拦截。平衡点没有通用标准,需要结合网站真实流量特征调整。实用办法是先开启WAF观察模式运行一段时间,记录全部请求特征,统计正常用户请求频率分布,以及攻击发生时异常请求特征,再根据日志分析结果确定阈值。有条件可以灰度上线,先对部分流量启用规则,观察误杀率和拦截率变化,确认稳定之后全量生效。

监控与应急响应预案要提前准备。服务器CPU、内存、连接数、数据库连接池使用率,需要记录正常基线数值。指标偏离基线时触发告警。攻击发生之后,要有清晰处理步骤。优先在CDN或者WAF控制台开启紧急防护模式;如果源站IP已经泄露,攻击持续不断,可以考虑临时更换IP。日志做好留存,攻击结束之后分析攻击特征,新增防护规则,优化后续防御。

总的来说,CC攻击不存在万能防护手段,整套防护体系覆盖从边缘节点到源站,网络层到应用层。CDN隐藏源站,Nginx限流拦截简易攻击,WAF精细化识别拦截,源站加固兜底。每一层防护单独看都不复杂,缺少任意一层就会留下漏洞,攻击者就是寻找这些漏洞发起攻击。

免责声明:本文提供的方法与建议仅供技术参考,实际部署效果受机房环境、运营商线路、系统配置等多重因素影响。请在专业人员指导下操作,因自行操作导致的业务损失本站不承担责任。

相关推荐