1. 先搞清楚你的攻击面:DDoS攻击类型与防护目标
做防护方案选型之前,我建议你先别急着看厂商宣传手册,先老老实实梳理一遍自己的业务资产和暴露面。很多团队一上来就问“买多少G的防护”,但漏掉了更基础的问题:你被攻击的入口到底在哪?是网站域名,还是IP直连?是TCP服务还是UDP服务?有没有CDN、有没有源站IP泄露?这些直接决定了后续选型的方向。
1.1 常见的DDoS攻击分类:流量型、连接型、应用型
DDoS攻击从技术实现上大体可以分成三个大类,每一类对防护资源的需求完全不同。
第一类是流量型攻击,典型代表是UDP Flood、ICMP Flood、DNS反射放大攻击。这类攻击的核心是“量”,用海量带宽把链路或设备打满,让正常用户的数据包挤不进来。我见过最夸张的一次是单月连续收到几十Gbps的持续流量压制,办公区出口直接被堵死,连SSH都连不上主机。这类攻击的防护逻辑很简单:要么你的带宽富余到能吞下攻击流量,要么在攻击流量到达源站前把它清洗掉。
第二类是连接型攻击,典型代表是TCP SYN Flood、ACK Flood、连接耗尽攻击。这类攻击不像流量型那样依赖大带宽,而是靠生成海量半连接或无效连接占满防火墙、负载均衡器、服务器的连接表,让新建连接失败。很多云服务器在这种攻击下不会断网,但业务会表现为“登录转圈、请求超时”。这类攻击对设备的处理性能要求很高,单靠加大带宽解决不了问题。
第三类是应用型攻击,典型代表是HTTP慢速攻击、HTTP Flood、针对特定API的恶意请求。这类攻击最“省钱”,攻击者只需要少量肉鸡就能模拟真实用户请求,导致应用服务器CPU飙升、数据库连接打满甚至缓存击穿。这类攻击最难防御,因为它和正常流量几乎无法区分,防护重点已经从“网络层清洗”升级到了“应用层行为分析”。
这里有个容易被忽略的误区:很多人只关注流量型攻击,觉得“带宽够大就行”,可现实里混合攻击才是常态。攻击者会先用流量型干扰你的网络,再混入连接型和应用型攻击去突破业务层,如果你只部署了单点防护,很容易被日穿。
1.2 不同攻击类型对应的防护策略
我习惯用一张简单的表来匹配攻击型和对应策略,这样选型时思路更清晰:
| 攻击类型 | 核心诉求 | 防护技术方向 | 典型设备/服务 |
|---|---|---|---|
| 流量型 | 吞掉大流量,避免链路拥塞 | 流量清洗、黑洞路由、CDN分流 | 云清洗、DDoS高防IP、本地流量清洗器 |
| 连接型 | 保护连接表不被耗尽 | 状态检测、SYN Cookie、连接速率限制 | 防火墙、负载均衡、抗DDoS设备 |
| 应用型 | 识别并拦截恶意业务请求 | WAF规则、行为分析、限流、验证码 | WAF、API网关、Bot管理 |
选型的第一步应该是明确自己业务的特点:是无状态的静态内容站点,还是有大量长连接的IM服务?是面向公网开放API,还是仅限内网访问?不同的业务形态在攻击面和安全需求上差异很大。比如纯静态站点用CDN加上高防就能覆盖大部分问题,而IM服务还要考虑连接保持和状态同步,天然更容易碰上连接型攻击。
另外,防护目标要量化。不要只写“我们需要抗DDoS”,要写“我们能在50Gbps的流量型攻击下保持业务可用”,或者“我们能在每秒10万次SYN洪水下保持新建连接成功率不低于95%”。能量化的目标才能检验方案是否达标。
2. 防护方案选型:从自建到云清洗再到混合架构
选型没有放之四海而皆准的标准答案,只有适合你当前阶段的方案。我在不同规模的公司里见过三种路线:中小团队刚开始通常直接用云厂商防护,有网络团队的大公司会考虑自建清洗设备,业务面复杂、对延迟敏感的核心系统会采用混合架构。下面逐一拆解。
2.1 自建防护的适用场景与成本分析
自建DDoS防护,意味着你要自己购买抗DDoS硬件设备或软件方案,自己维护BGP链路和清洗集群。听起来很“硬核”,但实际门槛远比你想象的高。
先算一笔账:一台还不错的本地抗DDoS设备,处理能力在10Gbps级别的,价格通常几十万到上百万;如果要做成集群,两三台起步。再加上你需要至少双线或多线BGP接入,托管机柜、带宽费、电力、运维人力,一年的综合成本轻松破百万。这还没算攻击流量把出口带宽打满后,运营商的额外超量费用。我见过有公司为了省云清洗年费,自建了设备,结果某次大流量攻击直接让运营商带宽峰值账单爆炸,一个月花掉了过去三年的防护预算。
所以自建方案只适合几个场景:一是运营商或多线接入的ISP本身有带宽资源优势;二是业务对内网隔离要求极高,必须把流量留在本地;三是有成熟的网络运维团队和冗余带宽池。如果你只是普通互联网业务,老老实实选云清洗更划算。
2.2 专业DDoS防护服务(云清洗)的选型要点
现在主流云厂商都提供DDoS防护服务,核心原理差别不大:把DNS解析或BGP路由指向高防IP,攻击流量先到达云端清洗集群,过滤后再把干净流量回源到你的服务器。选型时主要看几个关键指标。
第一是防护能力阈值。这里有个隐形坑:很多厂商宣传的“最大防护能力”是“全力防护”,但实际跑的是“保底防护+弹性防护”。保底防护是固定费用长驻的能力,弹性防护是攻击超过保底阈值后临时扩出来的,按天计费且价格不菲。你买的时候不光要看保底值,还要评估业务被攻击时的历史峰值,别让弹性成本失控。
第二是回源质量。清洗之后的回源链路带宽是否充足?回源是走专线还是公网?如果回源链路本身很窄,攻击流量虽然被洗掉了,但大流量攻击导致的瞬时回源拥塞也会影响业务。这个细节很多销售都不会主动讲,你需要专门确认。
第三是防护协议的完整性。有些高防产品只做四层防护,对七层HTTP Flood的识别比较弱,需要额外搭配WAF。有些产品把UDP防护做得很强但TCP业务兼容性差,可能出现误杀。选型前建议拿自己的真实业务流量做一轮接入测试,包括正常访问、CDN回源、长连接保活等场景,确认不会误伤正常用户。
再补充一点,高防IP不是万能钥匙。如果你源站IP泄露,攻击者直接打源站IP,高防IP就成了摆设。常见的泄露途径包括:DNS历史记录、邮件头信息、后端API直连、第三方接口回调等。所以不管选哪个厂商,都必须做好源站隐藏和访问白名单控制。
2.3 混合架构的权衡与部署位置
所谓混合架构,一般是本地设备做第一层粗过滤,云清洗做第二层深度清洗,再结合CDN、WAF等形成多层防护。它在延迟和成本之间做了一个相对折中的选择。
为什么有人愿意用混合架构?主要因为一些核心业务对延迟敏感,全部流量绕到云端清洗,远距离转发会增加几十毫秒延迟,部分金融交易类或实时对战类业务接受不了。混合架构把“近源清洗”放在本地,把“大流量攻击”引流到云端,可以让正常小流量不绕路,遇到大高峰才自动切云。
需要注意的是,混合架构的切换逻辑非常考验运维能力。要配置好BGP引流策略、黑洞路由阈值、云清洗API联动,最好能实现自动化切换,否则攻击来了手动切来不及。我曾经见过一个团队,本地设备被打瘫后还在用手工修改DNS记录,结果金贵的三分钟恢复窗口全浪费在等待上。如果你没有足够成熟的自动化运维能力,混合架构可能会成为负担而不是优势。
3. 关键技术架构与部署实践
选型定了,接下来就是架构落地。这一段是方案的骨架,也是很多资料里最语焉不详的部分。我会把流量清洗、高可用网络拓扑、参数调优这几个关键环节讲清楚。
3.1 流量清洗中心的工作原理
不管自建还是云清洗,流量清洗中心的基本逻辑是相通的。简单来说,就是“引流、检测、清洗、回注”。
引流环节把目标IP的流量通过BGP路由或者DNS方式导入清洗设备。常见的手法是在汇聚路由器上发布更精确的路由条目,或在负载均衡器上把流量镜像给检测设备。核心是不要把所有流量全部导入清洗设备,只导需要保护的那部分,控制设备压力。
检测环节需要兼顾速度和准确性。基于流量镜像的旁路检测是主流方式,通过NetFlow/sFlow采样或BGP FlowSpec做实时分析。检测算法一般先用粗粒度特征(如包速率、源IP数量、协议分布)判断是否发生攻击,再用细粒度规则(如IP信誉、行为基线)定位攻击特征。目的是快速识别攻击并生成清洗规则。
清洗环节则执行规则。常见手段包括:丢包(丢弃符合攻击特征的包)、限速(对异常源IP限制速率)、会话验证(如SYN Cookie)、载荷检测(针对应用层攻击)。这里最关键的是清洗粒度要动态调整,规则太宽会把正常流量误杀,太窄又漏过攻击。我建议配置两级策略:全局默认策略覆盖常见攻击类型,白名单策略保护VIP客户或核心业务源IP。
回注环节把清洗过的干净流量重新送回源站网络,常见方式是二层回注或策略路由回注。回注链路必须保证足够的带宽冗余,否则清洗完的流量还在半路上拥堵,业务照样不可用。
3.2 高可用网络架构设计:BGP引流与负载均衡联动
高可用架构的精髓在于“不让单点成为故障源”。我推荐至少采用以下设计思路。
第一,边界冗余。至少两个运营商出口,通过BGP对接。正常状态下两个出口均摊流量,当一边遭到攻击时,通过BGP路由策略把流量切到另一边。这里需要提前和运营商谈好带宽峰值,不然出现大流量攻击时运营商直接黑洞你,只能干瞪眼。
第二,清洗设备集群化。不要把清洗工作压在单台设备上。用多台设备组成集群,前面做负载均衡分发,中间做健康检查,把故障节点自动摘除。配置静态ECMP(等价多路径)也能做到类似效果,但不如专业的健康检查灵活。
第三,DNS与BGP联动。对于HTTP业务,可以在CDN层做规则:当检测到异常流量时,把域名解析切换到高防IP;攻击结束后再切回源站。这个过程必须自动化,最好通过脚本或云API完成,不要依赖人工。我自己的习惯是写一个监控脚本,每隔30秒拉一次攻击检测数据,如果超过阈值就自动修改DNS记录,实测恢复时间能控制在1分钟以内。
下面是一个简化版的高可用拓扑组织思路:
用户流量 | +--> 边界路由器(BGP) | | | v | 流量检测/清洗集群(多台) | |(干净流量) | v | 核心交换机 | | | v | 负载均衡器(SLB/Nginx/LVS) | | | v | 应用服务器集群注意在边界路由器上要配置黑洞路由的兜底逻辑:当攻击流量超过清洗能力上限时,宁可本地黑洞保护整体网络,也不要让攻击流量打爆所有链路。黑洞是最后的止损手段,不是优选方案。
3.3 关键参数配置与调优心得
参数调优是防护落地里最见功夫的部分。我挑几个高频参数分享一些实际经验。
TCP SYN Flood防护的参数,重点是SYN Cookie阈值和半连接数阈值。一般而言,可以按正常业务峰值的1.5到2倍作为触发阈值。比如你的业务高峰期每秒新建连接2000个,阈值就设在3000-4000左右。这个值不能一刀切,要结合服务器性能迭代调整。我见过设太低的案例,业务稍微做活动就误触发,导致大量正常用户连接失败。
UDP Flood防护参数,重点是UDP包长和速率限制。很多游戏类、音视频类服务天然就有不少UDP流量,如果统一限制过低会误伤。建议做源IP信誉和会话关联分析,只对异常高频、无会话关系的UDP包进行丢弃和限速。
应用层防护参数,重点是限流和跳转验证。对普通登录接口,可以设置单IP每分钟调用次数限制,比如30次/分钟,并结合IP信誉库。对高危接口(如支付、修改密码),可以加滑块验证码或二次校验。这里务必注意,限流策略要区分“人”和“机”,避免把真实用户当机器人拦截。
我踩过的一个坑是连接超时时间的设置。默认很多设备TCP超时时间较长(如30秒),在SYN Flood攻击时,半连接表会被快速撑满。后来我把超时时间压到10秒,并开启SYN Cookie,防御效果立竿见影。当然,超时太短也会导致高延迟网络下的正常连接被误杀,需要根据业务实测调整。
4. 实操要点:从接入到运营的完整闭环
方案落地只是开始,更核心的是日常运营和应急处置。很多团队把DDoS防护当成“买了就安全”,结果攻击来了手忙脚乱。下面讲讲我的一些实操经验。
4.1 防护策略配置与管理
配置防护策略时,我推荐先做“收敛”再“放开”。所谓收敛,是先把默认策略都打开,特别是常见的SYN Flood、UDP Flood、ICMP Flood防护,保证基础安全;观察一段时间业务没有异常后,再逐步放开被误伤的部分。不要一上来就精细化,很容易漏配。
策略分级管理也很关键。可以给VIP客户或核心业务单独配置白名单策略,绕过部分清洗规则;给普通用户配置标准策略;给可疑IP配置黑名单策略。这三层策略要有优先级,通常是白名单大于黑名单,特殊规则大于默认规则。
另外,策略变更留痕是必须的。每次修改防护策略,记录操作人、变更时间、变更逻辑。很多企业出问题时追溯不到原因,往往就是策略变更没有记录。哪怕只是临时改一个阈值,也建议在投产环境外先验证再发布。
4.2 监控、告警与攻击溯源
防护系统需要具备多层监控能力。底层看带宽和包量,中间看连接数和规则命中数,上层看业务本身的可用性指标,比如HTTP请求成功率、响应延迟。我建议至少部署一套基础监控(如Prometheus+Grafana)+一套业务拨测(如云拨测或自建探针),当出现攻击迹象时,能从业务指标快速关联到网络指标。
告警阈值的设定要防止两个极端。阈值过低,白天一个很小的流量抖动就会触发大量告警,团队变成“狼来了”状态,久而久之没有人在意告警;阈值过高,攻击已经打满带宽才告警,失去预警意义。我的经验是把告警分成两级:第一级是“可疑”,阈值设为正常峰值的30%以上但未造成业务影响,通知到值班人;第二级是“危险”,超过峰值50%或已经开始丢包,通知到全体运维和值班负责人。
攻击溯源是很多团队忽略的事,其实很值得做。清洗设备或云平台会保留攻击流量的采样数据,比如源IP、目的IP、源端口、目标端口、包特征。攻击结束后,及时基于这些数据做一次溯源分析,概括出攻击类型、峰值、持续时间、攻击源分布,输出一份简短报告。这有助于后续调整防护策略,也能用来向上级汇报安全投入的价值。
4.3 压测与攻防演练的重要性
没有经过压测的防护系统,就像没试过车的发动机,你不知道它真实工况如何。我强烈建议每个季度做一次小规模攻防演练,半年做一次大规模压测。
压测要注意合规:不要拿真实公网IP去打(除非有专门授权的测试环境),建议使用测试域名和低风险的回源地址,也可以租用第三方压测服务。压测前要和云厂商提前确认,避免被误认为是恶意攻击。压测内容至少要包含:4层流量型攻击、4层连接型攻击、7层HTTP Flood。观察防护系统是否按预设策略生效、清洗后回源流量是否稳定、业务响应延时是否回归正常。压测后一定要复盘:哪些参数没生效,哪些规则误杀了,哪些链路成了瓶颈。
我自己经历过一次压测,当时发现高防IP对新上线的一个UDP端口协议支持很差,所有UDP包都被拦截了,导致测试客户端大量报错。后来联系云厂商调整清洗策略才恢复。这个隐患如果不做压测根本发现不了,等真实业务上线后被攻击就麻烦了。
5. 常见问题排查与避坑指南
实话说,DDoS攻防里很难有“一次部署,永无烦恼”的完美方案,踩坑才是常态。我整理了工作中高频出现的问题和解法,希望能帮你省一些试错时间。
5.1 典型故障场景与排查思路
场景一:攻击期间业务大面积报错,但源站服务器负载很低。排查思路:先看是不是清洗设备把正常流量也丢弃了。检查清洗规则中是否有过于宽泛的源IP段限制、协议限制、速率限制。可以用源站服务器的访问日志反查,看负载均衡器收到的请求量是否骤降。如果正常流量根本没到源站,说明问题出在清洗侧或回源链路。
场景二:源站IP被打瘫痪,尽管已经接入了高防。排查思路:首先确认攻击流量是否仍直接打源站IP。查DNS记录是否全部指向高防,查历史DNS记录是否有源站IP暴露,查后端业务是否有绕过防护直接外联的端口。最有效的兜底方案是更换源站IP,并确保新IP不做解析、不走邮件、不出现在第三方目录里。
场景三:连接型攻击没打满带宽,但应用依然不可用。排查思路:这种情况大概率是代理层或负载均衡器的连接表被打满。登录到负载均衡器上查看连接数、半连接数、内存使用情况,确认是否因为连接超时时间过长、SYN Cookie未开启、连接复用配置不对导致。如果是Nginx,可以调大worker_connections参数,建议配置开启HTTP keepalive复用和回调池复用,减少新建连接的压力。
场景四:攻击结束后业务仍然恢复不过来。排查思路:攻击结束后可能存在“冷却效应”。比如连接表里残留大量半连接,或应用服务器上存在大量TIME_WAIT连接,新连接进不来。常规解法是清空连接表、重启负载均衡器或调整内核参数(如tcp_max_tw_buckets、tcp_fin_timeout)。更推荐在防护设备上配置“攻击结束自动恢复到默认策略”,避免持续限制正常流量。
5.2 容易忽略的细节:DNS、CDN、证书与代理层
很多人只关注高防IP本身,却忽略联动组件,这里补充几个经常被忽视的点。
DNS是不可忽视的第一道门。如果你的DNS解析本身就暴露了大量源站IP,攻击者能做“源站IP探测”,再大的高防也防不住。建议使用专门的安全DNS服务,开启DNSSEC,同时不要在DNS解析记录里使用过于具体的A记录映射到源站。最稳妥的方式是CDN和高防配合,让源站IP彻底不可见。
CDN能扛一部分流量型攻击。当攻击流量针对的是页面静态资源时,CDN节点直接消化掉了,回源站的压力很小。但要注意,CDN和WAF的规则要和DDoS防护联动,比如在攻击时自动切换不同缓存策略,避免动态请求全量回源加重源站压力。
SSL/TLS证书在应用层攻击里容易成为瓶颈。因为HTTPS握手本身就要消耗大量CPU,针对握手过程的攻击可以轻易打满源站的SSL解密能力。如果业务对HTTPS依赖很深,建议在负载均衡器前置启用TLS终止和会话复用,不要把解密压力都留给应用服务器。调优时也要关注证书链的完整性和协议版本,尽量减少不必要的TLS协商开销。
代理层(Nginx/Haproxy)的“健康检查”也可能被利用。部分防护系统对健康检查请求不设限,攻击者伪造大量健康检查请求打入代理层,导致代理误判后端全部故障,自动摘除节点。解决办法是设置健康检查的独立端口或特定User-Agent,并将其加入白名单。
5.3 快速速查表:攻击迹象与对应动作
我把平时经常用到的判断依据整理成了一个速查表,遇到问题时先对照这个表快速定位,再深入排查:
| 现象 | 可能原因 | 优先动作 |
|---|---|---|
| 带宽突然打满,Ping不通 | 流量型攻击 | 联系运营商黑洞/启用高防清洗 |
| 用户大量连接超时,但带宽正常 | 连接型攻击 | 检查连接表、开启SYN Cookie |
| 服务器CPU高企,请求量暴增 | 应用型攻击 | 限流、启用WAF规则、加验证码 |
| 特定接口报Blocked | 清洗规则误杀 | 查看清洗日志,加白名单 |
| 回源链路拥塞 | 高防回源带宽不足 | 联系云厂商扩容回源链路 |
| 业务恢复慢 | 连接表残留/内核参数问题 | 清连接表,调tcp_fin_timeout |
DDoS防护不是一次性买断的服务,它是一个持续迭代、动态调整的过程。我个人在实际操作中最深的一条体会是:真正决定防护成败的,不是设备堆得有多高,而是你对自身业务特征和异常流量信号的理解深度。有些团队买了很好的设备,却在攻击来临时因为规则没调好、监控没看到、切换没自动化而一败涂地;有些团队设备一般,但配合了扎实的日常演练和清晰的决策流程,反而能稳住局面。
最后再分享一个小技巧:给防护系统每个季度做一次“健康体检”,不用太复杂,就三条——拉一次性能报表看清洗能力余量,做一次策略审计看配置是否还符合当前业务,开展一次小规模模拟攻击看联动是否顺畅。坚持做下来,绝大部分突发攻击都能在十分钟内完成发现、调度和恢复。希望这篇经验整理能给你带来一些有用的参考价值。