☰
大流量DDoS防御全解析:清洗架构、阈值限速与应急响应
2026/10/30 7:20:36 网站建设 项目流程

做网络运维这行,真正让人半夜睡不着的,往往不是某个服务自己挂了,而是一条上行链路在几分钟内被灌满——监控面板上带宽曲线几乎垂直拉起来,业务侧超时率瞬间冲到几十个百分点,连运维后台的登录页都开始转圈。这种情况十有八九是大流量DDoS攻击。它和我们早期印象里那种"几台机器发点SYN包把连接数占满"的小打小闹已经完全不是一回事:现在的攻击峰值动辄几百Gbps、上亿pps,攻击源分散在成千上万个地址上,持续时间从几分钟到几天不等,还经常和业务高峰、大促节点卡在一起。这篇内容我打算把大流量DDoS这件事从头到尾拆一遍——它为什么会变成今天这个形态、攻击流量是怎么被"攒"出来的、防御架构的三条路线各自适合什么场景、阈值和限速到底该按什么依据去配、真被打起来的时候值班同学第一分钟该看什么。适合做运维、SRE、安全运营、后端架构的同学参考,也适合要给上级写预算、解释"为什么我们还需要再买一份清洗服务"的技术负责人。

1. "大流量"三个字背后的量级变化,才是防御难度的真正来源

很多人对DDoS的理解还停留在"连接数被打满"这个层面,于是第一反应是加机器、调大最大连接数、改一下内核参数。这套动作在十年前确实管用,放到今天基本等于没做。真正让防御变难的,不是攻击包长得有多花哨,而是攻击者能用极低的成本占用你极贵的带宽资源,这种资源成本上的不对称,才是大流量攻击的核心杀伤力所在。

1.1 从"打瘫一台机器"到"打满一条链路"

早期的DDoS目标是单机:把某台服务器的CPU、内存、连接表耗光,让它没法处理正常请求。这种攻击的边界很清楚——你只要把那台机器的资源扩上去,或者前面加个负载均衡把压力摊开,问题就能缓解一部分。

大流量攻击换了个打法:它不碰你的服务器,而是打你机房的那条出口链路。链路带宽是硬资源,100Gbps的出口就是100Gbps,超出的部分只有一个下场——丢包。而丢包对TCP业务来说几乎是灾难性的,握手失败、重传风暴、超时雪崩,一层一层往下传导。这时候你后端有几百台空闲机器也没用,因为流量根本进不来。

我见过不少团队第一次遇到这种情况,第一反应是"扩容",结果发现扩了服务器、扩了应用实例,监控上带宽曲线纹丝不动,因为瓶颈压根不在计算资源上。判断这件事其实有个很朴素的方法:看攻击期间服务器CPU是否异常升高。如果带宽打满但CPU很平静,那基本就是链路层被灌,属于清洗和牵引要解决的问题,而不是扩容能解决的问题。

1.2 为什么带宽成本决定了攻防的不对称

这里有个必须讲清楚的经济账。对防守方来说,带宽是花钱买的,而且是按峰值或按95计费买的;对攻击方来说,流量是从别人的设备上"借"来的——一批被控制的物联网设备、一批配置不当的公开服务,成本几乎为零。

这种不对称直接导致一个结论:你不可能靠堆带宽赢下这场比拼。你把出口从10G扩到100G,攻击方只需要多控一批设备就能跟上,而你的成本是线性甚至指数上升的。所以防御的正确思路从来不是"比谁带宽大",而是"在流量进入你的计费链路之前就把它识别并丢弃",也就是把战场往前推,推到运营商侧、清洗中心侧。

顺带说一句,评估清洗服务时要特别留意计费口径。有些方案按"牵引进来的总流量"计费,有些按"清洗后的干净流量"计费,还有些按攻击次数或攻击时长计费。这三种口径在真实攻击场景下的账单差距可能非常大,尤其是遇到持续几天的低频慢速攻击时。签合同之前把这个条款逐字读一遍,比对比清洗能力参数更值钱。

1.3 大流量攻击在监控上留下的四个特征

不用抓包也能大致判断,看四个指标基本就能定性:

  • 入向带宽曲线陡直上升,斜率极大,几分钟甚至几十秒内从基线冲到上限,而且形态往往是"平台型"——顶到某个值就不动了,因为已经到了链路或清洗设备的容量上限。
  • 包速率与小包占比同步异常。纯流量型攻击常常用大量小包打高pps,这时候你会看到带宽没满但pps先爆了,交换机、防火墙的转发能力先扛不住。
  • 来源地址高度分散且大量重复出现同一批网段,连接状态表增长异常,或者相反——大量半开连接但完整握手极少。
  • 业务侧的表现是"整体性"的,不是某个接口慢,而是所有接口一起慢,包括健康检查接口。这一点很关键,能帮你快速区分"攻击"和"某个下游依赖挂了"。

把这四个特征做成一个固定的巡检看板,值班同学遇到告警时按顺序扫一眼,定性时间能从十几分钟压缩到一分钟以内。

2. 一条流量洪峰是怎么被"攒"出来的:攻击链路的原理复盘

要防得住,先得知道对手在干什么。大流量攻击之所以能"以小博大",靠的是三样东西:可被利用的公开服务、分布式的受控设备、以及协议本身的设计特点。把这条链路捋清楚,你在看流量特征的时候才会有判断依据,而不是对着一条曲线干着急。

2.1 反射放大:把别人的带宽借来打你

反射放大的思路说起来很简单:攻击者伪造源地址,向大量公开的应答型服务发送一个小请求,服务把响应发回到被伪造的那个地址——也就是你的IP。关键在于响应包比请求包大得多,这个倍数叫放大系数。

打个生活化的比方:你收到一个陌生电话,对方说"麻烦帮我转告某某某,明天开会改到十点",听起来很正常;但如果同时有一万个人给你打这种电话,而且每个人都要求你复述一遍完整内容,你的时间就被占光了,而打电话的人只花了拨号的力气。

放大系数取决于具体协议和配置,不同服务差异很大,从几倍到几十倍都有。这意味着攻击者手里只要有一份中等规模的带宽,就能撬动几十倍于己的流量。更麻烦的是,参与反射的往往是第三方的公开服务器,它们本身是无辜的,你很难直接"关掉"这些放大源,只能在自己的入口做识别和丢弃。

防守侧能做的事其实很明确:识别出这类特征流量并在边界丢弃。这类流量的共同点是——源IP和目标IP的组合在你自己的正常业务里根本不会出现,比如你的服务器从来不会收到某个时间协议的响应包,那这类包进来就是可疑的。所以在边界设备上按"业务实际需要的协议白名单"做过滤,是性价比极高的一步,很多团队恰恰漏了。

2.2 协议层与应用层的两种消耗逻辑

协议层攻击(网络层、传输层)消耗的是管道资源:带宽、pps、连接跟踪表、会话数。它的特点是流量大、特征明显、但相对容易用硬件和规则挡住。

应用层攻击消耗的是计算资源:CPU、数据库连接、缓存命中率、第三方接口配额。它可能只占几Mbps带宽,却能把一个业务打穿。典型的做法是找那些"一次请求触发大量计算"的接口——复杂搜索、报表导出、登录校验、短信发送——然后反复调用。

这两类攻击的防御手段完全不同。协议层靠清洗、限速、黑洞、ACL;应用层靠行为识别、频控、验证码、人机校验、缓存。很多团队只准备了前一套,结果被几Mbps的慢速应用层攻击打得毫无还手之力,而且监控上带宽曲线完全正常,值班同学根本意识不到发生了什么。

所以我在做防御方案时,一定会要求把这两类分开建监控、分开配策略、分开定责任人。混在一起谈"DDoS防御",最后一定会有盲区。

2.3 攻击者为什么越来越偏爱"混合型"

单一类型的攻击容易被针对性封堵,所以近年来的实际攻击里,混合手法占的比例越来越高:先用大流量洪峰把你的清洗设备、值班人员的注意力全部吸引过去,然后在流量稍退的间隙,用一批慢速应用层请求去试探业务接口;或者在你手忙脚乱加黑名单的时候,换一批源地址继续打。

混合攻击对防守方的真实压力不在技术,而在流程。因为这时候你需要同时做三件事:牵引清洗、业务侧限流、日志取证。如果这三件事只有一个人会做,或者三件事的决策权限都压在同一个审批链路上,那必然手忙脚乱。

我个人的做法是提前写一份"作战卡片"——一页纸,写清楚:什么条件下谁有权直接触发牵引、什么条件下可以直接封禁某个网段、业务侧降级的开关在哪、找谁确认。真出事的时候照着念就行,不依赖某个人的临场判断。这份卡片平时看着像形式主义,真用上一次就值回票价。

3. 防御架构的三条路线:本地清洗、云清洗、近源压制

架构选型这件事没有标准答案,只有和你的业务形态、预算、团队规模匹配不匹配。我见过太多团队在选型阶段被参数表带着走,最后买回来一套和自身业务完全不搭的方案。这里把三条主流路线摊开讲,重点讲各自的边界条件。

3.1 三条路线的成本、效果与适用条件对照

维度本地清洗设备云清洗/托管清洗近源压制/运营商联动
初始投入高,需采购设备与冗余链路低,按服务订阅低到中,依赖商务关系
防护上限受限于本地机房出口与设备规格通常远高于单机房出口取决于上游容量,一般最大
生效时延秒级,本地就近处理分钟级,涉及牵引与回注分钟到十几分钟,需人工协同
误杀风险由自己控制,可精细调优依赖服务商策略,调优空间有限粗粒度封禁,误杀风险最高
运维负担高,需要专人维护规则中,主要做对接与验证低,但不可控
适合场景有自建机房、业务对时延极敏感、有安全团队大多数互联网业务的主力方案超大流量兜底、应急

这张表里最值得说的是"防护上限"这一行。很多团队算容量时只看清洗设备标称值,忽略了自家出口带宽——如果出口只有20G,买一台标称100G的设备,实际能扛的还是20G,因为流量在到达设备之前链路就已经满了。这个坑我见过不止一次,预算花出去了,效果没出来,复盘的时候才发现瓶颈压根不在设备上。

3.2 清洗中心的关键指标:回注方式与时延

选定云清洗路线后,真正影响体验的不是"峰值防护能力"这个宣传数字,而是两个很具体的工程细节:牵引方式和回注路径。

牵引一般有两种:DNS牵引和BGP牵引。DNS牵引改的是解析结果,生效快但只能覆盖走域名的流量,对直接用IP访问的业务、对非HTTP协议无能为力;BGP牵引改的是路由,覆盖面广,但需要和上游做路由协同,配置不当容易引发回程不对称,导致丢包和时延抖动。

回注路径决定清洗后的流量怎么回到你的机房。常见做法是GRE隧道回注或者专线回注。回注这一段的带宽必须提前算够——清洗中心把攻击流量过滤掉了,但正常业务流量的峰值也要能过得去,而且回注链路一旦拥塞,效果和没清洗差不多。不少方案在演示环境里表现很好,上线后一到大促就出问题,原因往往就是回注容量按平均值而不是峰值配的。

我一般会要求服务商提供回注链路的实际可用带宽和扩容流程,并且在上线前做一次压测:用测试流量从外部打到目标IP,观察清洗触发时间、清洗后的业务时延变化、以及回注链路利用率。这三个数比任何宣传材料都可信。

3.3 为什么我倾向于"默认不牵引、按需牵引"

有些团队图省事,把清洗设成常开,所有流量都过一遍清洗中心。这样做的好处是省心,坏处有三个:一是所有流量的时延都增加了一跳,对交互型业务体验有影响;二是清洗中心的策略通常是通用型,对你的业务特征了解不深,长期挂着容易误杀;三是常开状态下你对"攻击发生"这件事的感知会变迟钝,因为基线本身就是被清洗过的。

更稳的做法是默认直连,用流量基线加异常检测触发牵引。触发条件要设得保守一点,宁可早牵引,因为大流量攻击的窗口期很短,晚三十秒可能就是几百万的损失。触发之后也不是一牵了之,要设定"退出条件"——比如攻击流量连续十五分钟低于阈值、业务指标恢复正常,才回切。回切动作最好放在业务低峰期做,避免来回抖动。

4. 把阈值和限速调到"能打"的状态:配置层面的实操

策略配置这件事,最容易出的问题是"参数拍脑袋"。阈值定高了不触发,定低了天天误报,最后值班同学直接把告警静音,等于没做。我下面讲的这套方法,核心思路是:所有阈值都必须从一个跑出来的基线推导,而不是抄别人的配置。

4.1 基线怎么跑出来:至少两周的滚动统计

第一步是把基线跑出来。做法是采集至少两周(覆盖完整业务周期,包括周末和工作日、包括一次大促或活动高峰)的流量数据,按分钟粒度统计入向带宽、pps、新建连接数、活跃连接数这四个指标,然后对每个指标算出三个数:日常中位数、日常95分位、历史峰值。

阈值不要直接取95分位,那样太敏感。我通常的做法是:

  • 告警阈值取"历史峰值 × 1.2",触发后只做通知,不自动动作;
  • 牵引阈值取"链路容量的 60%"和"历史峰值 × 1.5"两者中的较小值,触发后自动牵引;
  • 黑洞阈值取"链路容量的 85%",到了这个数说明清洗已经兜不住了,保链路比保业务更重要。

这三个数字必须写进配置文档并且定期复核,业务量增长之后基线上移,原来的阈值会变得过于敏感。我建议每个季度重跑一次基线,把这个动作排进运维日历。

4.2 四层与七层限速要分开配,逻辑完全不同

四层限速(传输层)的目标是保护管道,颗粒度粗、生效快。常见做法是在边界对单个源IP做新建连接速率限制、对目标端口做pps限制、对异常协议做直接丢弃。这里有个细节:限速一定要留出业务正常突发的余量。比如你的登录服务正常峰值是每秒200个新建连接,那你限到250,而不是限到200,否则大促一开始自己先把自己限死了。

七层限速(应用层)的目标是保护业务,颗粒度细、需要业务侧配合。关键在于按"用户维度"而不是"IP维度"来限——因为很多用户共享出口IP,纯按IP限速会误伤。更靠谱的维度组合是:账号ID + 接口路径 + 时间窗。比如同一个账号在10秒内对同一个接口请求超过30次就降级处理,这个阈值可以按接口逐个配,比全局一刀切精准得多。

以常见的反向代理为例,一个基础的应用层限速配置大概长这样(参数需要按你的实际基线调整):

# 定义限速区域,按客户端地址维度,10MB共享内存 limit_req_zone $binary_remote_addr zone=api_limit:10m rate=20r/s; server { location /api/order/query { # burst 允许瞬时突发,nodelay 表示突发部分不延迟处理 limit_req zone=api_limit burst=40 nodelay; limit_req_status 429; proxy_pass http://backend_pool; } }

这段配置的意图是:常态下每秒20个请求,允许40个瞬时突发,超出直接返回429。burst这个值就是给正常用户留的余量,设得太小会误伤,设得太大又失去保护意义。我一般按"正常单用户峰值的2倍"来定。

4.3 白名单和业务探针:别把监控自己打死

这条属于踩过才知道的坑。大流量攻击发生、清洗策略生效的瞬间,最先"死"的往往不是业务,而是你自己的监控和运维通道。因为健康检查、日志上报、配置拉取这些流量特征单一、频率固定,特别容易被限速规则和清洗策略误判为攻击流量。

所以配置策略时,务必把以下几类地址和流量单独放行:监控采集端、日志上报端、CI/CD发布通道、堡垒机与运维接入、以及第三方回调的白名单。白名单不要按大网段放,按具体的IP或很小的小段放,减少被利用的风险。

还有一个更隐蔽的坑:健康检查被误杀之后,负载均衡会把后端全部摘除,业务看起来是"自己挂的",值班同学会往错误的方向排查。我的做法是给健康检查单独开一条路径并加入限速白名单,同时在清洗策略里显式声明"不处理这条路径的流量特征",双保险。

5. 被打的时候,值班同学按什么顺序看、按什么顺序动手

应急响应这块,我见过最多的失误不是技术能力不够,而是顺序错了。先扩容、再抓包、最后才想起来看带宽,一圈下来二十分钟过去了,攻击可能早就结束了。下面这套顺序是我自己踩过坑之后固化下来的,不一定最优,但足够稳定。

5.1 第一分钟:先把"攻击"和"故障"分开

第一步看三样东西,三十秒内能得出初步结论:

  • 入向带宽曲线的斜率。陡直上升、平台型、和业务流量曲线脱钩,指向攻击。
  • 服务器CPU和内存。带宽爆了但CPU平静,指向链路层攻击;CPU也爆了,指向应用层攻击或者两者叠加。
  • 业务失败的类型。全是超时(TCP连不上)指向链路层;大量4xx/5xx但连接正常,指向应用层。

这三样看完,能定性到"是不是攻击""是哪一层攻击",然后再决定动手方向。反过来,如果先动手续费扩容、加机器,很可能方向从一开始就是错的。

5.2 第三分钟:定位被打的IP、业务面和攻击特征

定性之后立刻做第二件事:找出被打的到底是哪个IP、哪个业务。这一步很多团队做得不够细,导致牵引的时候把整条线路都牵走了,影响面扩大。

具体看:哪个目的IP的入向流量占比最高、哪个目的端口最集中、来源地址的分布是集中在少数几个网段还是极度分散、包长分布是小包为主还是大包为主。这几个信息决定了你后面用哪种策略——如果来源高度集中,直接封网段最快;如果来源极度分散但目标端口单一,那就是清洗要处理的;如果目标端口就是你的核心业务端口,得先判断是不是应用层攻击。

把定位结果同步给业务方和负责人,这一步不要省。攻击期间最消耗精力的不是技术处理,而是反复回答"到底好了没有""什么时候好",一份明确的同步比什么都管用。

5.3 事后复盘必须留的三类数据

攻击过去之后,很多人立刻关掉监控、删掉临时策略,然后就再也说不清楚当时发生了什么。我要求至少留三类数据:

数据类型具体内容用途
时间线告警时间、牵引时间、业务恢复时间、回切时间评估响应速度,找流程瓶颈
流量特征峰值带宽、pps、来源分布、目标端口、协议构成优化清洗策略与阈值
业务影响受影响用户数、订单损失、降级措施生效情况支撑预算申请与架构调整

第三类数据是很多人忽略的,但它恰恰是向管理层解释"为什么要在这上面花钱"的最有力材料。只说"我们被打了几百G"没有说服力,说"这次攻击导致多少用户无法下单、持续多少分钟、折算多少损失"才有。

6. 往后看:趋势判断和提前要做的准备

趋势这件事谁都不敢说百分百准,但有些方向已经相当明确了。我说的不是"攻击会越来越多"这种正确的废话,而是几个会直接影响你架构决策的变化。

6.1 攻击的"服务化"和"云化"会持续压低攻击门槛

一件事的门槛越低,参与者就越多。攻击能力这几年明显在往"服务化"方向走——不需要懂技术,付费就能发起,按流量大小、按时长明码标价。这带来的直接后果是:攻击动机从"炫技"转向"谋利",勒索型、竞争型的攻击占比上升,攻击时机越来越集中在你的关键业务节点。

对应的防御思路也要变。过去做防御是"防住就行",现在还要考虑"被打期间业务怎么降级运行"。我会建议把"降级预案"当成防御方案的一部分来设计:哪些功能可以在攻击期间临时关闭、哪些接口可以切到静态兜底、哪些用户群可以优先保障。一个能降级运行的业务,比一个只能硬扛的业务生存概率高得多。

6.2 物联网设备和加密流量会继续给识别带来麻烦

大量联网设备长期在线、默认口令、固件不更新,天然构成可被利用的资源池。同时,加密流量的普及让基于内容特征的识别越来越难,防守方被迫更多依赖流量行为特征——连接频率、包长分布、握手模式——而不是看内容。

这意味着两件事:一是清洗设备的能力评估要从"特征库大小"转向"行为分析能力";二是加密解密在你的架构里要慎重,不要为了看得清而把性能和合规风险都揽上身。多数场景下,靠行为特征做识别已经够用。

6.3 一份可以照着做的准备清单

最后给一份清单,我把它当成每个季度自查的项目,逐条打勾:

  • 基线数据是否在最近三个月内更新过,三个阈值是否复核过;
  • 牵引与回切的触发条件、操作人、审批方式是否书面化,一线同学是否演练过;
  • 清洗服务的回注带宽是否按峰值配置,是否做过压测;
  • 应用层限速是否按接口逐个配过,是否留足了突发余量;
  • 监控、日志、发布、运维通道是否在白名单内,是否验证过;
  • 降级预案是否写明具体开关位置和判断条件;
  • 上次攻击的复盘材料是否归档,改进项是否闭环。

这份清单里最容易漏的是第二条和第六条。阈值和配置属于"技术活",大家愿意做;演练和预案属于"流程活",容易被无限期推后。但真打起来的时候,决定成败的往往就是这两条。

我个人在实际操作中的体会是:大流量DDoS防御这件事,技术方案只占一半,另一半是"平时把该准备的都准备好,出事时按流程执行"。设备可以买,带宽可以扩,但值班同学在凌晨三点能不能不慌,靠的是一遍遍演练出来的肌肉记忆。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询