
网络服务可用性这件事平时没人惦记一旦出问题就是大事。我做运维和应急响应这些年处理过的可用性事件里DDoS攻击算是最典型的一类它不撬锁、不偷数据就是拿海量无效请求把门口堵死让正常用户进不来。很多刚接触安全的朋友对它的理解停留在“流量很大”这个层面真到了排查现场往往分不清是攻击还是业务突发、是带宽打满还是连接数耗尽处置动作自然也就容易跑偏。这篇内容我想把DDoS的完整链路拆开讲清楚——它到底怎么运作、有哪几种常见形态、每一层打的是什么资源、防御侧又该怎么分层设计。适合刚入行的安全运维、后端开发、以及需要对自己业务做风险评估的技术负责人参考不需要你有多深的攻防背景跟着逻辑走就能建立起一套可落地的认知框架。1. 先搞清楚DDoS到底在打什么1.1 从“一个人刷”到“一群人刷”的本质跃迁要理解DDoS先得理解它的前身DoS。DoS就是单点发起的大量请求逻辑特别朴素我拿一台机器疯狂请求你的服务把你的处理能力占满。这种打法在早期有效因为那时候带宽小、服务器弱一台机器就能把一个小网站打瘫。但DoS有个致命缺陷——攻击源只有一个IP防御方只要把这个IP封掉攻击立刻归零成本极低。DDoS的“分布式”三个字解决的正是这个单点问题。攻击者不再自己出手而是控制成百上千台分散在不同网络里的机器同时向目标发起请求。防御方封一个IP还有几百个在等着封一段地址攻击源可能分布在完全不同的地址段。这就把“封禁”这个最简单的防御手段直接废掉了。你可以把它想象成一个人来店里捣乱叫保安赶走就行但如果同时来了一千个人每人只买一瓶水却占着座位不走保安根本忙不过来正常顾客也进不来。这里有个容易被忽略的点DDoS攻击者追求的往往不是“攻破”而是“瘫痪”。他不需要拿到你的数据也不需要你的密码只要让你的服务在特定时间段内不可用目的就达到了。所以防御DDoS的思路和防入侵完全不同——入侵防御讲究纵深、讲究溯源DDoS防御讲究的是扛住、分流、清洗核心指标是可用性而不是机密性。1.2 攻击者手里的“兵”是从哪来的很多人好奇攻击者哪来那么多机器答案是被感染的终端设备。这些设备有个统称叫“肉鸡”来源五花八门配置不当的服务器、弱口令的物联网设备、被恶意程序感染的办公电脑、存在漏洞的路由器等等。攻击者通过扫描发现这些设备植入控制程序把它们编成一支可以远程指挥的“僵尸网络”。僵尸网络的价值在于规模和隐蔽性。规模决定了攻击峰值能堆多高隐蔽性决定了溯源有多难。一台被感染的设备主人往往毫无察觉它平时正常上网只在收到指令时才参与攻击。这就导致攻击流量看起来来自大量“正常”的住宅宽带地址防御方很难一刀切地封禁因为封了可能误伤真实用户。我见过不少案例攻击峰值并不算特别夸张但因为攻击源极其分散传统的基于IP黑名单的防护几乎失效。这也是为什么现在谈DDoS防御越来越强调行为特征识别而不是单纯看来源地址。1.3 攻击成本和防御成本的不对称DDoS之所以猖獗根子在于攻防成本严重不对称。发起一次中等规模的攻击攻击者可能只需要租用现成的攻击服务成本很低而防御方要扛住同样的攻击往往需要采购高防带宽、部署清洗设备、配置专业团队投入高出一个数量级。这个不对称决定了防御策略不能追求“绝对扛住所有攻击”而要做分级设计日常小流量攻击靠本地策略和云清洗兜底超大流量攻击则要考虑业务降级、流量调度甚至临时下线非核心服务。想清楚这一点后面的防御方案设计才不会陷入“什么都想防、什么都防不住”的困境。2. 按攻击层次拆解常见类型DDoS的类型划分有很多维度但最实用的是按攻击发生在网络模型的哪一层来分。因为不同层的攻击打的资源不一样防御手段也完全不同。下面这张表先给个总览后面逐层展开。攻击层次典型类型主要消耗的资源防御重心网络层流量型攻击、协议型攻击带宽、链路容量流量清洗、高防带宽传输层SYN Flood、连接耗尽连接表、半连接队列连接管理、协议栈加固应用层HTTP Flood、慢速攻击应用处理能力、线程池行为识别、限流、人机校验2.1 网络层用流量把管道灌满网络层攻击最直观就是拿巨大的流量把你的入口带宽占满。常见手法包括UDP Flood、ICMP Flood以及各种反射放大攻击。反射放大的原理值得单独说一下攻击者伪造源IP向一些会返回较大响应的公共服务发请求响应全部涌向受害者。这样攻击者用很小的请求流量就能撬动几十倍甚至上百倍的响应流量打到目标身上。这类攻击的特点是流量峰值极高动辄几十G甚至上百G。防御的核心是带宽冗余和流量清洗——你得先有足够的入口带宽扛住再把恶意流量识别出来丢弃。单靠服务器自身是扛不住的因为流量在到达服务器之前就已经把链路堵死了。2.2 传输层把连接表撑爆传输层攻击的典型代表是SYN Flood。正常建立连接要三次握手服务器收到SYN后会分配资源等待对方确认。攻击者大量发送SYN却从不完成握手服务器的半连接队列很快被占满正常用户的连接请求就排不上了。这类攻击的流量峰值未必很高但杀伤力很强因为它打的是服务器的连接管理能力。防御手段包括开启SYN Cookie、调大半连接队列、部署连接代理等。我在实际排查中发现很多服务被打挂不是因为带宽不够而是连接数被打满这时候看带宽监控是正常的得看连接状态才能发现问题。2.3 应用层用“合法”请求拖垮业务应用层攻击最阴险因为它发出的请求在协议层面完全合法看起来就像真实用户在访问。典型的是HTTP Flood攻击者用大量机器持续请求消耗资源的接口比如搜索、登录、下单这些需要查数据库的操作。还有慢速攻击故意用极慢的速度发送请求头或请求体让服务器一直挂着等慢慢耗尽连接池。这类攻击的流量可能只有几M但足以让业务瘫痪。防御难点在于区分“恶意”和“正常”——你不能简单封IP因为攻击源分散且可能是真实用户设备。这时候就得靠行为特征请求频率、访问路径规律、User-Agent特征、是否有正常的前置交互等。人机校验、动态限流、接口级配额这些手段在这一层才真正派上用场。3. 防御体系怎么分层落地3.1 第一道防线把流量挡在业务之外防御的起点不是服务器而是流量入口。我的建议是优先把清洗能力前置让恶意流量在到达业务系统之前就被处理掉。具体做法包括接入云清洗服务、配置高防IP、在入口做基础的流量限速和异常包过滤。这里有个实操细节清洗策略要区分“永远丢弃”和“可疑观察”。像明显伪造源IP的包、异常大的UDP包可以直接丢而来源分散但行为可疑的流量更适合先引流到清洗中心做深度分析避免误杀。我踩过的坑是早期策略设得太激进把一些正常的批量请求也当攻击拦了导致业务方投诉。后来改成分级策略先观察再拦截误杀率明显下降。3.2 第二道防线协议栈和连接层加固到了服务器这一层重点是让协议栈更抗打。SYN Cookie要开半连接队列和全连接队列要按业务量调大超时时间要合理设置。这些参数不是越大越好队列太大反而会掩盖问题、拖慢响应得结合业务实际连接数来定。对于连接耗尽类攻击可以考虑在服务器前面加一层连接代理由代理来承接和过滤连接后端只处理“干净”的连接。这个思路和反向代理类似代理层做粗筛业务层做精处理职责分离之后两边都好调优。3.3 第三道防线应用层的识别与限流应用层是最后一道也是最重要的一道防线。核心思路是给每个请求建立“可信度”判断。具体手段包括对高频访问的IP或会话做动态限流、对关键接口加人机校验、对异常访问路径做规则拦截、对登录和下单这类敏感操作做行为分析。限流策略要精细到接口级别不能一刀切。比如商品详情页可以放宽登录接口必须严格搜索接口要限制频率。我一般会先梳理出业务的“资源消耗地图”把接口按消耗排序重点保护排在前面的那几个。这样即使攻击来了也能保证核心链路不被拖垮。4. 实战排查怎么判断是不是被打了4.1 从监控指标反推攻击类型判断是否被攻击不能只看“服务变慢”这一个现象。要结合多维度指标交叉验证带宽是否突增、连接数是否异常、CPU和内存是否被打满、特定接口的QPS是否暴涨、错误码分布是否变化。我整理了一个速查表实际排查时按这个顺序看基本能快速定位方向。现象可能类型进一步确认方法带宽突增但CPU正常流量型攻击看入向流量来源分布连接数暴涨、带宽正常连接耗尽类看连接状态和半连接队列特定接口QPS暴涨应用层攻击看请求来源和访问路径规律响应变慢但流量正常慢速攻击看长连接数量和请求完成率4.2 处置动作的优先级确认被攻击后处置要有优先级不能一上来就全量封禁。我的经验顺序是先保核心业务可用再逐步收紧策略。具体来说先启用限流和清洗保住主链路然后分析攻击特征补充针对性规则最后再考虑溯源和取证。有个容易被忽视的点处置过程中要持续观察业务指标确认防御动作没有误伤正常用户。我见过为了快速止血把整个地址段封掉结果把真实用户也挡在外面的情况止血变成了二次事故。5. 几个容易踩的坑和实操心得第一个坑是只防大流量、忽视小流量精准攻击。很多团队把资源都投在抗大流量上结果被几M的应用层攻击打瘫因为这类攻击根本不需要大带宽。防御要均衡应用层的识别能力不能省。第二个坑是策略上线不做灰度。限流和拦截规则直接全量生效很容易误伤。正确做法是先观察模式跑一段时间确认规则命中情况符合预期再逐步切到拦截模式。第三个坑是缺乏演练。真被打的时候手忙脚乱是因为平时没演练过。建议定期做防御预案的桌面推演把“谁来判断、谁来决策、谁来执行”理清楚真出事时才能按流程走。最后分享一个我常用的判断技巧当服务出现异常时先问自己三个问题——流量变了吗连接变了吗请求内容变了吗这三个问题的答案基本能圈定攻击层次后面的处置就有了方向。防御DDoS没有一劳永逸的方案持续观察、持续调优才是常态。