
做了快十年运维我最怕的不是磁盘满也不是半夜bug上线而是某个凌晨突然收到流量告警入口带宽从5Gbps一路飙升到200Gbps20分钟内打了40倍。这种典型的DDoS攻击场景我经历过不止一次每次复盘都会发现真正让我们脱险的不是某台设备有多强而是事前把攻击防护方案选对了架构想透了。这篇文章不准备讲那些厂商PPT里的概念而是从选型决策的角度把DDoS攻击防护方案从需求梳理、架构选型、策略落地到日常运营的完整链路捋一遍。适合正在选型或准备升级防护体系的运维、安全和架构同事参考。尤其是那些既没有无限预算、又没有专职安全团队的团队这篇文章里踩过的坑和经验应该能帮你少走不少弯路。1. 威胁图谱现在的DDoS到底长什么样1.1 从流量型到应用层的攻击分层DDoS的概念大家都懂分布式拒绝服务。但“分布式”三个字的含义这几年变化很大。早期的DDoS攻击主要打带宽和连接数用大量僵尸网络发包让交换机、防火墙、服务器被流量淹没。这种属于典型的容量耗尽型攻击特征是攻击流量大、协议单一、检测相对简单。现在呢攻击者更喜欢混打比如先来一波大流量SYN Flood打漏洞紧接着上HTTP慢速攻击再配合DNS放大和CC应用层峰值请求一轮攻击里同时涵盖了L3、L4、L7三个层级的压力。用一句话概括现在你面对的往往不是一支军队而是一支带侦察兵、空袭部队和地面炮兵的混合编队。从协议角度看常见的有UDP Flood、SYN Flood、ICMP Flood、DNS Query Flood等。其中SYN Flood是最经典的利用TCP三次握手的设计盲区发送大量不完成握手的SYN包让被攻击设备占满半连接队列。ICMP Flood虽然技术含量不高但配合反射放大时威力惊人。还有利用NTP、memcached、SSDP等协议反射放大的攻击放大倍数轻易达到十倍百倍这让攻击者的成本极低防护成本却极高。这也是为什么很多防护方案都在强调“清洗算法”而不是单纯堆带宽——带宽永远追不上反射放大这种杠杆式的成本结构。1.2 真实攻击案例的规模与时间线我参与处理过一个比较典型的案例。客户是一个在线教育平台平时业务平稳峰值在线大概3万人。某天早上九点半正是直播课高峰时段监控上的入流量曲线突然像导弹发射一样直冲。从探测来看攻击总流量峰值大约600Gbps持续了将近四个小时期间经历了三轮明显的波峰。攻击类型从最初的SYN Flood逐步升级为TCP反射放大加HTTP CC混合最后还出现了针对登录接口的撞库式请求。这个案例的典型性在于它把几乎所有常见打法都来了一遍说明攻击者是有步骤、有目的地在试探和穿透防线。另一个数据值得注意攻击持续时间的分布。我们内部统计过最近两年的防护记录超过65%的攻击持续时间在15分钟到2小时之间超过5小时的比例并不高。什么概念我见过不少团队辛辛苦苦配好防护规则结果一场攻击打完规则还没热完。这说明防护动作必须快几乎要在攻击发生后三分钟内完成确认和处置。这也是为什么现在的防护方案都强调自动触发清洗、自动切换线路靠人盯屏根本跟不上一场60秒内飙到峰值的流量变化。1.3 哪些行业和系统最容易成为靶子想清楚防护方案之前先要明白自己大概率会面对多大强度的攻击。从实战经验看游戏行业常年是重灾区尤其是新游戏上线、活动开服的时间点几乎必然遭遇一波“开服攻击”目标就是把服务器打瘫让玩家骂客服。金融行业虽然单次攻击规模不一定最大但攻击者的耐心和复杂程度更高经常是低慢型CC打配合纯粹为了让业务系统卡顿、体验下降。电商与零售在促销节点也是高发期大促当天入口流量本身就高攻击混杂在正常流量里清洗难度直线上升。还有一个很容易被低估的群体政务、医疗、教育等公共服务类系统。这类系统资源丰富、业务重要但安全预算往往有限用的还是老旧的硬件防火墙面对一百多Gbps的攻击基本没有还手之力。前阵子我们帮一家医院做评估对方的信息科主任坦言一台防火墙用了六年日志都没人看更别提什么清洗策略。这种情况不是个例。如果你是这类系统的负责人选型时尤其要注意方案的弹性和成本结构因为攻击虽然来的猛但预算不会因为攻击而变得充足。同时还要把现有团队的运维能力算进去方案再先进没人会维护就等于零。2. 选型之前必须想清楚的几个关键问题2.1 业务容忍度RTO/RPO与服务降级标准选防护方案的第一个关键变量不是技术参数而是业务对故障的容忍度。你得先回答几个问题业务中断五分钟会损失多少收入会有多少用户投诉公司对服务可用性的内部承诺是几个九再把这些问题拆成技术指标RTO恢复时间目标和RPO数据恢复点目标分别是多少在DDoS场景下RPO的概念主要涉及会话状态保持比如用户登录态、购物车、考试答题记录。一场攻击如果持续十分钟你用黑洞路由把所有流量丢弃恢复后用户数据会不会丢、会话会不会断这些都要提前想清楚。举个例子一个B2B门户网站访问量不高但每笔询盘都值钱它更需要的可能是低误杀的精细防护宁可偶尔放过去一点攻击流量也不要错杀正常客户。而一个短视频平台短时间断流影响有限恢复快就行反而应该选择大带宽硬抗加快速清洗。所以选型之前我建议先做一张业务影响分析表把核心业务、依赖资源、可容忍中断时间、用户影响面列出来这张表比任何产品手册都重要。如果这张表都懒得做那后面无论买多贵的方案都很难说清楚它到底值不值。2.2 预算、带宽与清洗能力的三角关系DDoS防护本质上是一个成本和能力的取舍。你要么自己准备足够大的带宽来吸收攻击流量要么把流量交给第三方清洗中心要么两者组合。自己买带宽看起来简单但成本极不划算。假设你业务正常带宽需求5Gbps却为了抗住100Gbps攻击去采购100Gbps带宽那平时99%的时间都在烧钱。IDC机房的大带宽价格不是线性增长的从5G到20G可能还好到100G就是一倍一倍的翻这种预算大多数企业根本背不动。因此主流的做法是“本地接入带宽适当冗余 第三方清洗兜底”的组合。正常流量直接走本地链路攻击流量通过路由协议BGP/MPLS等牵引到清洗中心清洗完再把干净流量回注。这里面有个成本细节清洗服务通常按保底带宽加弹性带宽计费。保底带宽是每月固定费用弹性带宽按实际使用峰值计费。采购时怎么定保底值我建议参考自己业务近三个月的峰值流量再乘1.5倍作为保底既不至于浪费钱也不会在中小攻击时动不动就触发弹性计费。这个数字是我们踩过几次坑之后总结出来的一开始定低了每月账单都超出预期后来定高了又心疼平时闲置。2.3 合规要求与第三方清洗的必要性有些团队对“把流量交给第三方”天然有顾虑担心数据安全、担心延迟这个可以理解。但实际部署中第三方清洗中心的优势不只是带宽还有清洗算法库的更新频率和7x24小时值守能力。一个自建团队要做到24小时值班盯流量人力成本可能比清洗服务费还高。而且清洗算法是一个需要持续迭代的东西攻击手法不停变化今天有效的规则明天可能就被绕过第三方服务商因为服务大量客户能够更快沉淀新的攻击特征并更新到清洗设备里这一点单靠一家企业自建很难做到。当然合规和数据安全确实要考虑。如果在金融、医疗等敏感行业建议采用“BGP牵引到清洗中心 回注干净流量”的模式但提前要求服务商提供数据安全承诺、清洗日志审计和独立的网络托管区避免敏感流量直接暴露在共享设备上。合规方面国内对网络安全的等级保护要求也越来越细化选型时最好先和法务确认清楚你所在的行业是否要求流量清洗系统有相关资质或备案。这块宁可多花点时间也别等检查时补作业。3. 防护架构的几种主流形态与对比3.1 云清洗平台 高防IP模式当前企业用得最多的形态就是把关键业务的入口IP换成高防IP实际解析时客户访问的是高防IP后面回源到你的源站。高防IP背后的清洗平台一般部署在多个城市每个城市具备几百Gbps到数Tbps的防护能力。当检测到攻击流量打到高防IP上时清洗中心的流量调度系统把攻击流量导到分布式清洗集群把正常流量放行并回源。这个模式的优点很直接部署快、操作简单几乎不需要改业务代码只需要改DNS解析和回源配置。对于大多数中小团队这是性价比最高的起步方案。缺点是成本会随着防护峰值上涨而且高防IP本身可能成为单点如果攻击方盯住了你的源站IP只要回源绕过防护直接打到源站高防IP就形同虚设了。所以用高防IP模式的团队必须做好源站IP的隐藏与访问控制比如只允许高防回源IP段访问源站、定期模糊化源站域名、避免在响应头泄露真实IP。这一条看着基础但我见过太多因为源站IP泄露导致整个防护体系失效的案例根源往往只是某次测试的时候用真实源站域名直接访问了一次。3.2 本地/IDC端防护设备与流量牵引如果你有自己的机柜、IDC托管或私有云环境可以考虑在机房入口部署本地防护设备比如专业抗DDoS网关或带清洗功能的防火墙。这种模式的优势是流量不需要离开本地延迟最低数据不出本地网络对敏感行业友好。劣势同样明显本地设备的性能天花板受硬件限制当攻击流量超过设备处理能力的瞬间设备反而会成为新的瓶颈。所以本地设备的定位通常不是“扛一切”而是“快速识别 粗过滤 告警”把大部分明显异常的流量先挡掉大幅缩小进入上层业务的压力。关键的技术点是流量牵引。当攻击规模超出本地设备能力时需要自动或人工触发BGP引流把流量切换到清洗中心。这个动作能不能自动化、切换时间有多快直接决定了防护体系的上限。我们当时的做法是在路由器上预先写好远程黑洞路由和清洗路由策略与清洗服务商之间建立BGP会话并设置阈值自动触发断言。实测下从触发到流量完全切换耗时控制在两到三分钟以内。这个自动切换的稳定性我建议选型时一定要实操验证光看PPT上的“秒级切换”是没用的。有些设备宣称秒级真正压测时才发现路由收敛要等半天那就尴尬了。3.3 CDN边缘防护的分布式吸收另一条思路是利用CDN的分布式节点来吸收攻击流量。你让网站内容全部走CDN攻击者的请求到达最近边缘节点天然被分散到全国或全球的几百个节点上。如果攻击规模不足以同时打瘫全部节点那源站几乎感觉不到压力。更重要的是CDN边缘节点通常天然具备缓存、限速、WAF等能力可以在边缘直接把很多L7层的CC或慢速攻击挡掉根本不回源。这种方式非常适合内容是静态为主或可缓存的业务场景。但CDN方案有个前提条件要清醒认识如果你的业务大量是动态接口、需要回源拉数据CDN能分担的只是一部分静态压力和连接层压力回源流量会被源站带宽局限。攻击者只要盯住回源链路持续拉高回源带宽整个方案就会出现缺口。所以用CDN模式时一定要在源站侧额外叠加访问控制和高防回源或者在CDN和源站之间加一层清洗网关形成“边缘CDN挡第一波、清洗网关挡第二波、源站只接受信任流量”的纵深结构。别指望一个CDN解决所有问题它是防线中的一环不是全部。3.4 分层混合架构的搭建逻辑说实话没有一种单一方案可以应对所有攻击场景。我比较推崇的是“分层混合”的思路最外层是高防IP或者清洗中心兜底大流量中间加CDN边缘节点优化体验并分担常规流量业务侧再配合Nginx/Lua限流、应用层动态令牌等机制做最后一层防御。每一层负责不同的攻击类型和量级各司其职不会因为某一层被打穿就全盘崩溃。分层的时候也要想清楚数据的流向。正常用户访问的路径可能是“DNS解析到高防IP → 高防IP回源到CDN → CDN命中缓存未命中回源到业务集群”攻击流量如果被高防识别直接清洗不进CDN。如果攻击穿透了高防但到了CDN边缘CDN又挡了一部分。只有到最后两层都放过且刻意放行的流量才能接触到真实业务服务器。这样的架构下用户感知的是高防IP的地址真实IP被层层保护起来源站的安全性大幅提升。架构不是越复杂越好而是分层清晰、每层职责明确。我见过很多团队把所有安全功能堆在同一个网关里结果一次配置失误就把正常业务也误杀了那是另一种灾难。4. 从DNS到应用的防护策略落地细节4.1 DNS层面的质询与解析防护DNS层是DDoS攻击的重要入口。DNS Query Flood、DNS放大攻击的目标就是你对外提供的解析服务。防护的第一个动作是隐藏主域名服务器尽量让对外可见的都是一些高防解析服务商或分布式解析节点把真正的权威服务器藏在内部。第二在DNS服务器上开启递归查询限制只允许已知网段做递归查询其他一律只提供权威解析。第三针对UDP 53端口要启用RRL响应速率限制防止对外发出大量响应被放大。实操中还有一个常见的坑很多人把DNS解析服务直接放在业务服务器上比如让Nginx服务器兼任DNS服务器。一旦DNS被攻击业务彻底歇菜。我的建议是无论如何DNS都要独立拆分出来并采用至少两个不同运营商的解析线路互备。域名解析本身很小、不占资源但可用性要求是性命攸关的拆出来以后哪怕业务被攻击用户至少还能通过静态页面看到公告而不是完全失联。而且DNS拆分后日常巡检也方便很多出问题时排查范围一目了然。4.2 网络层防火墙、ACL与速率限制到了接入层防火墙和ACL是第一道硬防线。这里的原则是“白名单优先默认拒绝”做一个基础的收敛业务正常的来源端口、目标端口、协议类型列清楚不相关的协议直接drop。针对SYN Flood在防火墙上设置SYN Cookie把半连接队列保护起来针对UDP Flood可以按源IP、目标端口设置限速超出阈值的直接丢弃。但要注意网络层的防护配置如果过于激进容易产生“反向防护错误”。比如你一看到某种协议流量大就限速结果正好把正常业务流量误伤了。所以我一般建议网络层的规则按业务白名单思维来收敛而在核心业务之外再设置一条较宽的高水位阈值作为兜底不要试图在这一层做精细识别那是应用层的事。网络层要做的是“快、稳、便宜”快速识别明显攻击稳定扛住第一波便宜意味着不占太多计算资源。让防火墙去干WAF的活往往两边都干不好。4.3 应用层CC防护与动态验证CC攻击是应用层的顽疾本质上是模拟正常用户的请求让服务器处理大量无意义任务。检测CC的难点在于攻击报文和正常报文几乎一模一样传统限速规则很难区分。实操中比较有效的组合拳是第一层在入口网关根据IP维度的访问频率做动态限速比如单IP每秒超过30次请求就触发校验第二层对高风险接口登录、注册、下单引入动态令牌或点选验证高频请求直接打回验证页第三层在WAF或应用网关配置URL粒度的请求频次规则比如对某个接口每分钟最大QPS做限额。动态验证的方案要小心用户体验。如果你在正常大促时也弹出验证码用户直接流失。所以验证策略要带“风险分级”只有来源IP异常、行为特征偏离、且频率超阈值时才触发高强度验证普通访问略过。这里四面喷洒的方法一定不行打击的是攻击从来没想过会误伤正常用户这是我在多个项目里反复强调的一点。好的CC防护方案应该是“无症状时透明有风险时精准拦”上线前一定要拿正常业务流量做压测看看触发阈值会不会误伤。4.4 业务架构侧的设计最后也是容易被忽视的业务代码和应用架构本身的抗攻击能力。如果一个接口的响应时间需要2秒攻击者只需发起时并发1000个请求就能把CPU打满如果接口设计了缓存、异步削峰、限流熔断那抗打击能力就完全不一样了。在应用框架层面至少要做到所有外部接口尽量有缓存层、高频接口做聚合查询减少数据库压力、核心服务配置线程池和信号量限流、下游依赖设置超时和熔断。这部分的收益是长期的它不影响选型方案的买不买但决定了在攻击最激烈时、前面几层防线是否会被击穿后依旧有生存能力。打个比方防护架构是城墙业务架构是城内管网配置城墙再高如果城内一炮弹就瘫痪那也是白搭。而且架构侧做过压力测试的团队通常比只靠买防护服务的团队更能从容应对攻击后的恢复因为你知道自己的系统在极限压力下到底是什么表现。别等攻击来了才去压测平时每季度做一轮混沌工程式的演练把各种依赖挂掉的情况提前体验一遍比什么都强。5. 实战复盘一次混合型DDoS的完整处理链路5.1 发现与确认的First 60秒某次周五晚上我收到监控平台的电话告警。电话还没响完工作群里已经有人把流量图贴出来了入口带宽在60秒内从5Gbps冲到了180Gbps。我当时的处置顺序是这样的第一件事不是立即打开防火墙看规则而是先看“当前业务的正常流量特征”。确认监控面板上业务QPS有没有异常波动如果业务本身就淡季流量突然暴涨这基本就是攻击。第二件事登录入口路由器查看接口流量和源IP分布判断攻击的类型和方向。180Gbps的攻击只要盯住几个主要源IP段用特征码在ACL里先临时drop掉能立刻释放一部分压力。第三件事就是触发牵引动作。如果清洗中心已经配置好BGP会话直接在手边上触发流量牵引把入口流量切到清洗中心。前两步大概用了两分钟第三步在五秒内完成。这五分钟的节奏靠的全是平时演练攒下来的肌肉记忆临时翻手册根本来不及。5.2 牵引清洗与源站保护操作流量切到清洗中心后本地链路压力很快降了下来。但清洗中心只是把攻击流量过滤掉真正把它挡掉的还是清洗算法。这时要和清洗服务商的对口人确认几条关键信息攻击报文的主要特征、清洗后的回注流量是否正常、源站回源链路有没有异常。我当时遇到一个问题清洗后的流量回注到源站后源站防火墙还是收到了大量畸形包排查发现清洗中心只回注了HTTP端口但攻击者的UDP Flood还在尝试打源站的其他端口。好在源站防火墙提前配置了接口白名单策略UDP 53以外的UDP包直接丢弃这部分攻击没造成实质影响。这个案例给我们的经验很简单源站侧的ACL和端口收敛必须在攻击开始之前就做好不要等到攻击时才临时改防火墙。你在十分钟手忙脚乱改配置时攻击者正在疯狂刷新你的业务一秒钟都等不了。临时改配置不仅容易出错而且人多手杂还有可能把正常流量也封掉。后来我们索性把源站的默认策略改成“只放行80/443和必要的管理端口”其他全部拒绝安全性和规范性都提升了一大截。5.3 事后分析与策略固化攻击结束后最值钱的工作是复盘。我让团队导出三个东西清洗中心的攻击事件报告、源站防火墙的会话和丢弃日志、业务服务器的访问日志。三方一对照能准确还原整个攻击的时间线和攻击手法。那次复盘发现攻击者在前两个小时内先用了SYN Flood试探然后切到CC再切回大流量攻击本质上是一套“动态调整”的打法不是脚本一键启动的静态攻击。这说明什么说明单靠静态规则永远被动必须让防护策略也具备动态调整的能力。复盘之后我们把策略固化下来本地防火墙上加上SYN Cookie和UDP丢弃规则清洗中心的回注策略按业务端口白名单收紧DNS解析服务增加了一个备用线路业务侧对登录接口加上了动态验证。还专门写了一份《DDoS应急手册》把发现、确认、牵引、回注、复盘每个环节的负责人、操作步骤、时间要求都固定下来。这份手册后来在几次小规模攻击里发挥了大作用团队内部的响应时间从平均十几分钟压缩到了五分钟以内。防护不是一次买断的事而是需要持续迭代的运营工作。6. 日常运维中我总结的经验与容易踩的坑聊完实战链路再补充几条日常运营中我觉得最有价值的经验。这些东西不在产品手册里也很少有人系统性地讲但往往决定了一套防护方案能不能在关键时刻正常发挥。6.1 别把误杀当小事说到DDoS防护我第一个想提醒的就是误杀。很多团队为了把攻击打下去把限速规则调得非常激进结果攻击没了正常用户也访问不了。曾经有个客户为了防CC攻击把单IP每秒请求数限制到5次结果内部员工的公共出口IP一多直接触发验证大家纷纷反馈系统“坏了”。这种问题在选型和配置阶段就要预防规则永远要留出业务正常波动的余量宁可多冗余10%。误杀造成的业务损失往往比攻击本身还大。而且误杀的影响还会延续到攻击结束之后用户反复被验证码折腾几次下次可能就不愿意再来了这种隐性流失很难量化但真实存在。6.2 监控告警要分级别一告警就全员出动早期我们监控告警设置得非常粗糙带宽超过30%就短信轰炸一天能收两百条告警慢慢就变成狼来了真出大事时反而没人第一时间响应。后来我们做了分级带宽超过正常2倍且持续时间超过2分钟是黄色告警推送值班组超过5倍或出现服务降级是红色告警直接电话拉群。实践证明分级告警让团队的响应更精准也避免把有限的人力浪费在琐碎告警上。同时告警里一定要带上当时的流量趋势图和源IP分布摘要让值班同事在不开电脑的情况下就能初步判断严重程度响应速度能快不少。6.3 演练比买设备重要最后一点经验再贵的防护方案不演练等于没买。我建议每个季度做一次小规模DDoS防护演练可以请清洗服务商配合做一次模拟攻击或者内部用工具对测试环境打一些常规流量。演练的主要目标是验证三件事BGP牵引是否能按预期触发、清洗后的回注流量是否正常、应急手册里的步骤是否还有人记得住。第一次演练时八成会发现问题比如配置被改过导致自动触发失效、值班人换了没交接、清洗中心的API密钥过期了这些在真实攻击时都是致命伤但在演练里都是小问题。演练的费用相比一场真实事故的损失性价比高到无法言喻。做了这么多年运维我越来越深的体会是DDoS防护从来不是买下一个产品就完事它是选型、部署、监控、复盘、演练组成的完整闭环。方案选得再漂亮日常运营跟不上关键时刻一样掉链子。尤其是演练那一条我无论如何都劝你别省。上面这些经验和思路希望能让你少踩几个我当年踩过的坑把防护体系从纸面变成实战里真正靠得住的防线。以后碰到什么新打法、新套路也欢迎回来一起交流咱们把这块的坑继续填上。