1. 先搞清楚一件事:DDoS攻击为什么专挑企业打
深夜两点半,值班手机突然炸响。远程连上去一看,出口带宽曲线像心电图一样疯狂跳动,核心交换机CPU冲到95%,官网、OA、订单系统全部响应超时。客服群里已经开始有人刷屏"网站打不开了,是不是跑路了"。这种场景,做过企业运维的人应该都不陌生——这就是DDoS攻击落地的样子。
DDoS,分布式拒绝服务攻击,原理并不复杂:攻击者控制大量僵尸主机,同时向目标服务器、IP或网络带宽发起海量请求,把资源耗尽,让正常用户无法访问。早期这更多是黑客炫技,但现在的DDoS早就变成了一门"生意"。攻击者租用现成的攻击平台,几十块钱一小时就能买到不小的攻击量,然后向企业勒索赎金,或者受雇于竞争对手在电商大促、游戏开服、新品发布这些关键节点搞突袭。攻击成本极低,而企业一旦中招,损失可能是每分钟几万甚至几十万元的真金白银。
我见过不少企业把DDoS防护当成"事后补救"的事情,觉得"我们公司不大,攻击者看不上"。这个想法很危险。DDoS攻击有明显的"挑软柿子捏"的特征:谁防御弱、谁能勒索出钱、谁的业务中断影响大,就打谁。中小企业网站、传统企业自建机房、缺乏专职安全人员的团队,反而是攻击者最偏爱的目标——防御薄弱,打起来性价比高。可以说,DDoS攻击面前,不管你是纳斯达克上市公司还是只有一台服务器的创业团队,只要暴露在公网上,就在射程范围内。
这篇文章不会整那些花里胡哨的厂商宣传话术,我打算从一个常年做企业网络与安全运维的人的角度,把DDoS攻击的完整预防链路拆开讲清楚:攻击到底是怎么打过来的、企业的防御体系应该怎么搭、方案怎么选、攻击来了怎么办、平时怎么演练验证。全程不堆概念,给的是能直接落地的东西。
2. 看懂三类主流攻击手法:它们打的不是同一个部位
想防住DDoS,先得知道敌人从哪个方向来。很多新手一听DDoS就问"是不是流量太大堵死了",这只是其中一个维度。按攻击目标分层,常见的DDoS攻击可以粗暴分成三类,它们打的其实是不同的资源。
2.1 网络层攻击:打带宽和网络设备
这类攻击的目标是"路"——把企业出口带宽打满,或者把路由器、交换机的处理能力打垮。典型代表是SYN Flood和UDP Flood。
以SYN Flood为例,它利用的是TCP三次握手的漏洞。正常握手是客户端发SYN,服务器回SYN+ACK,客户端再发ACK完成连接,双方建立会话。攻击者伪造大量虚假IP地址发SYN,服务器回SYN+ACK之后,永远等不到那个ACK,socket就卡在半连接状态里。操作系统为了维持这些半连接,要分配内存、维护队列,一旦半连接队列被塞满,后续正常的连接请求就被丢弃,用户访问自然全部失败。
UDP Flood更简单粗暴,直接向目标IP的随机端口海量发送UDP数据包。服务器收到后查无此端口就要回ICMP不可达,大量回包会耗尽CPU和带宽。还有反射放大攻击,攻击者用伪造源IP向NTP、DNS等公共服务发送小请求,服务器响应的大流量全打在受害者头上,NTP反射最高可以放大到五百多倍。这类攻击的杀伤力体现在"量大",单位是Gbps甚至Tbps,在防御上必须靠上游运营商和云清洗来扛。
2.2 协议层攻击:打中间件和会话资源
再往上来一点是协议层攻击,比如DNS Query Flood、HTTP Flood。它们主要打的是特定服务程序的并发处理能力。DNS Query Flood就是向你的DNS服务器发起铺天盖地的域名解析请求,让DNS服务进程CPU飙升,正常解析全部超时——域名都解析不了,网站、邮件、OA系统统统废掉。
这一层和网络层的区别是,攻击流量可能并不高,但请求数极多非常密集(PPS,每秒数据包数,非常高)。有些企业只关注带宽峰值的监控,发现带宽没打满就觉得安全,实际上设备早就被"小包风暴"打趴了。网络层看Gbps,协议层看Mpps(百万包每秒),这两个指标都要盯。
2.3 应用层攻击:打业务逻辑(CC攻击)
最狡猾的是应用层攻击,典型代表是CC攻击(Challenge Collapsar,意为挑战黑洞防御设备)。攻击者模拟真实用户行为,不断请求你的搜索接口、登录接口、下单接口,每次请求都消耗数据库查询、CPU计算和内存分配。服务器没法区分这到底是真客人还是机器人,只能挨个响应,最后业务线程池被耗尽,正常用户请求也排队到天荒地老。
CC攻击的特点是流量看上去很"正常",甚至比真实业务高峰还低,但都是高消耗请求。我处理过一个案例,攻击流量峰值只有200Mbps,但全是针对某个慢SQL查询接口的调用,数据库连接数直接打满,整个站点瘫痪。很多人迷信"大带宽就能防DDoS",对应用层却毫无办法——带宽再大也架不住业务资源被恶意消耗。
2.4 三类攻击的识别特征对比
为了排查和响应方便,我把三类攻击的特征整理成了表格,建议直接存下来当排查对照表:
| 攻击类型 | 目标资源 | 核心指标 | 识别特征 | 防御重点 |
|---|---|---|---|---|
| 网络层(SYN/UDP/反射放大) | 带宽、网络设备 | Gbps、Mpps | 带宽异常飙升、连接队列打满、大量半连接 | 上游清洗、黑洞路由、高防IP |
| 协议层(DNS/HTTP Flood) | 中间件、会话资源 | QPS、并发数 | CPU高、服务超时、大量异常请求 | 服务层限速、DNS高防 |
| 应用层(CC攻击) | 业务逻辑、数据库 | 请求延迟、线程池 | 流量不高但业务卡死、接口慢查询堆积 | WAF、限流、验证码 |
这个表也是后面做监控告警和应急响应的基础。知道攻击打在哪个层,才能对症下药——你不可能用只防带宽的方案去防CC,也不可能用WAF去扛几百G的UDP Flood。
3. 企业防御体系怎么搭:纵深防御,别指望单点设备
很多企业的常见做法是买一台硬件防火墙,号称"自带几十G抗D能力",就觉得自己万无一失了。结果大流量一打过来,防火墙本身先挂了,或者根本没那多带宽给它清洗,一切白搭。DDoS防御的本质是"资源对抗",你必须有比攻击量更大的吸收和分散能力。这不是一台设备能解决的,得靠纵深防御体系。
3.1 三层防御架构的设计逻辑
我建议企业从三个层面搭建自己的防御架构,从外到内分别是:
- 第一层:上游清洗,主要靠运营商或云服务商的高防清洗中心,承担大部分带宽型攻击(网络层大流量)的吸流和清洗任务。
- 第二层:接入侧防护,包括CDN的分布式节点、高防IP的转发和调度,提供缓冲和流量分散能力。
- 第三层:源站本地防护,包括防火墙安全策略、WAF规则、应用层的限流和过载保护,负责兜底剩余漏进来的攻击,以及防御CC这类应用层攻击。
顺序不能搞反,也不能只做其中一层。最常见的误区是源站做了"加固",但流量根本到不了源站就已经把带宽打满了,第三层再强也作用不到。反过来,只买了上游清洗,但源站的IP直接暴露在公网,攻击者绕过高防直打源站IP,清洗中心形同虚设,这种情况我见过太多次了。
3.2 基础加固清单:不花大钱就能做的事
在采购任何高防服务之前,先把下面这些基本功做扎实,它们不贵,但能显著降低被攻陷的概率:
- 隐藏源站真实IP。这是最重要的一条。域名解析不要直接指向源站IP,全部套上CDN或高防IP;源站服务器的回源地址只允许CDN节点或高防回源IP访问,用安全组或防火墙做白名单限制。
- 带宽冗余和分散。如果条件允许,把业务部署在多家运营商或多个地域节点上,避免单点带宽被打死。
- 操作系统和中间件参数调优。比如开启SYN Cookie、合理设置半连接队列长度、缩短SYN超时时间,这些能在一定程度上缓解SYN Flood对主机的直接冲击。
- 监控告警先行。在没被攻击之前就把流量基线统计好,带宽、PPS、QPS、TCP连接数、CPU、内存、数据库连接池都要有监控。基线数据是后面判断"是不是被攻击了"的重要依据。
4. 高防IP、DNS高防、CDN、云清洗:选型对比与组合策略
现在市面上抗D产品很多,名字也五花八门:高防IP、高防DNS、DDoS高防、云清洗、CDN加速附带抗D…… 第一次接触的人很容易被绕晕。我直接按实际用途拆开说,告诉你什么场景该选什么。
4.1 各产品的能力边界
| 产品 | 能防什么 | 防不了什么 | 适合场景 |
|---|---|---|---|
| 高防IP | 网络层大流量、反射放大、SYN Flood | CC攻击中针对业务逻辑的精细攻击(需配合WAF) | 游戏、金融交易、需要暴露IP的动态业务 |
| DDoS高防DNS | DNS Query Flood、DNS解析层面的攻击 | 针对Web/API业务的CC攻击 | 所有依赖域名解析的业务,是全局的"命门" |
| CDN | 带宽型攻击、静态资源洪峰、一定程度的CC | 大量动态请求(回源后仍可能打死源站) | 静态内容多、以浏览为主的网站、营销活动页 |
| 云清洗服务 | 各类大流量攻击(BGP引流+清洗+回注) | 清洗规则配置不当可能误伤正常业务 | 有独立IDC机房、不希望流量经过代理的企业 |
| 本地WAF/防火墙 | 应用层攻击、慢速攻击、特定CC | 超大带宽流量(设备链路本身就先被打满) | 永远作为最后一道兜底防线,不能当主力 |
4.2 组合策略:按企业规模对号入座
不要试图用一个产品解决所有问题,合理的做法是组合。下面给两套常见组合:
中小型企业/创业团队(预算有限):CDN(当缓存节点和第一层流量分散)+ 隐藏源站IP + 本地服务器SYN Cookie参数调优 + 应用层简单限流。这套组合的防御能力上限取决于CDN节点的数量和业务动态请求占比。如果动态请求多、又是强交互业务,直接上高防IP比较稳妥。
中大型企业/已自建机房:DNS高防(必做,域名是咽喉)+ 高防IP或云清洗(根据流量的接入方式选)+ 源站WAF + 完善的监控与应急响应预案。如果业务对延迟敏感、不想经过代理转发,选云清洗(BGP引流清洗后再把干净流量回注到原IP);如果业务可以接受代理转发,选高防IP,配置更简单,还自带源站隐藏能力。
4.3 选型中容易踩的坑
第一,只看"防御峰值"数字不看业务架构。厂商宣传"单机防御800G",听起来很猛,但如果业务本身无法水平扩展、回源链路带宽只有100M,照样被打穿。防御峰值只是上限值,不等于你的业务能承受的攻击总和。
第二,源站IP暴露在高防前面。这是最典型的"配了等于没配"。买了高防IP之后,域名解析、证书信息、子域名枚举都能暴露源站IP,攻击者直接打源站,高防再强也拦不住。一定要把源站安全组锁死,只允许高防回源IP进出。
第三,只顾防流量不管DNS。不少企业把Web业务保护得严严实实,DNS却用的是免费解析,结果攻击者不去打你的网站,跑去打你的DNS服务商,域名解析全部失败,业务照样瘫痪。DNS是全网业务的连接器,建议统一用DDoS高防DNS服务或托管在具备高防能力的解析平台上。
5. 把配置落实到命令和规则:网络层与应用层的加固实操
方案选好之后,具体到服务器和网络设备上,有一些配置可以现在就动手做。我以Linux服务器和常见的Nginx环境为例,给出可以直接参考的配置思路。
5.1 网络层参数调优(适用于Linux服务器)
SYN Flood发生时,最直接的影响是半连接队列被打满。可以用sysctl调整内核参数,开启SYN Cookie并控制超时时间:
# 开启SYN Cookie,防半连接耗尽 sysctl -w net.ipv4.tcp_syncookies=1 # 缩短SYN-ACK重试次数,默认5次,改为2-3次,加快释放无效半连接 sysctl -w net.ipv4.tcp_synack_retries=2 # 调整半连接队列最大值 sysctl -w net.ipv4.tcp_max_syn_backlog=4096 # 缩短TIME_WAIT重用,缓解连接表占用 sysctl -w net.ipv4.tcp_tw_reuse=1 sysctl -w net.ipv4.tcp_fin_timeout=30 # 让配置永久生效 echo 'net.ipv4.tcp_syncookies=1' >> /etc/sysctl.conf echo 'net.ipv4.tcp_synack_retries=2' >> /etc/sysctl.conf echo 'net.ipv4.tcp_max_syn_backlog=4096' >> /etc/sysctl.conf echo 'net.ipv4.tcp_tw_reuse=1' >> /etc/sysctl.conf echo 'net.ipv4.tcp_fin_timeout=30' >> /etc/sysctl.conf sysctl -p这些参数改变的是内核在极端连接压力下的行为模式,不能直接挡住大规模流量,但能极大提高服务器在攻击压力下的存活概率。注意,tcp_max_syn_backlog也不是越大越好,要根据服务器内存和正常并发量来设置,设置过大会反过来变成内存被耗尽的隐患。
5.2 应用层限流与WAF规则(以Nginx为例)
CC攻击的防御核心是"限速"和"人机识别"。Nginx层面可以做基础的请求频率限制,比如限制单个IP每分钟的请求次数:
# 定义限流区域:每个IP每秒不超过5个请求,超出后排队 limit_req_zone $binary_remote_addr zone=cc_limit:10m rate=5r/s; server { location /api/ { limit_req zone=cc_limit burst=20 nodelay; proxy_pass http://backend; } }更精细的做法是基于会话(Cookie)和User-Agent做多维度限流,防止攻击者换IP绕过。但要注意,限流规则会把"抢购瞬间的高并发真实用户"也误伤,所以burst参数需要根据业务峰值反复调。我建议先在灰度环境用真实流量回放测试,确认不误伤再上线,否则大促时防御系统把客人挡在门外,后果比被攻击还严重。
WAF层面可以拦截明显恶意的请求特征,比如异常UA、SQL注入尝试、高频同路径请求等。对于登录、查询等敏感接口,建议叠加验证码(人机验证),在攻击发生时通过规则动态开启,平时关闭以减少用户打扰。
5.3 隐藏源站IP的实操要点
很多企业源站IP暴露是因为配置了"直接解析到源站"的A记录。改造方式:
- 域名解析全部走CDN或高防IP提供的CNAME。
- 源站服务器安全组只放行CDN/高防的回源IP段,其他来源一律拒绝。
- 如果业务需要主动外联(如调用第三方支付回调),单独配置出口IP,避免回源IP段泄露在响应头或错误日志里。
- 检查SSL证书的证书透明度日志、邮件头里的原始IP等泄露渠道。邮件头的Received字段是重灾区,很多企业源站IP就是这么泄出去的。
6. 攻击爆发后的黄金30分钟:应急响应流程复盘
预案再完善,也会有被打个措手不及的时候。关键是攻击真正来临时,要有条不紊地把损失控制在最小范围。我按自己处理过的几次真实攻击流程,梳理出这套应急响应顺序,团队照着做就行,不用临时拍脑袋。
6.1 第一步:判断这到底是不是DDoS(5分钟)
看到业务告警别急着封IP。先确认三件事:
- 带宽/连接数监控是否异常?和基线数据对比,超出多少倍什么时候开始涨的?
- 服务本身有没有故障?最近有没有发布过变更、改过配置?先排除自身问题,别误判。
- 流量特征是什么?大量SYN半连接、UDP小包、还是HTTP密集型请求?对照第2部分的识别表做初步分类。
这一步的目标是快速确定攻击类型和攻击方向,决定下一步是联系上游清洗还是本地限流。不要在不清楚攻击类型的情况下盲目执行清洗策略,容易误伤正常业务。
6.2 第二步:启动临时缓解动作(10分钟)
- 全局限流:在入口防火墙或CDN层面,先对攻击特征(异常IP段、攻击目标端口、异常报文特征)进行封堵或限流。这时候宁可激进一点,先把业务保住,再慢慢放宽误伤。
- 黑洞路由:如果某个区域内攻击量已经超过防御上限,将目标IP在边界路由器上做黑洞(丢弃所有入向流量)。这是"弃车保帅"的做法,该IP上的业务会中断,但能保住同设备的其他业务不被牵连。
- 调度切换:如果是多节点部署,立即把流量调度到其他高可用节点,隔离被攻击节点。
- 联系上游:马上给运营商或云服务商的7x24应急联系方式打电话(不是工单),上报攻击类型、峰值流量、目标IP和端口、起始时间。大流量攻击的上游响应速度决定生死,签约之前必须确认服务商有电话应急渠道。
6.3 第三步:善后与复盘(攻击结束后24小时)
攻击停止不代表事情结束。需要做的事包括:
- 导出攻击期间的流量抓包和日志,分析攻击源、攻击手法、攻击时段规律,判断是临时挑衅还是长期勒索。
- 评估防御策略的有效性:哪些规则有效,哪些规则触发太晚,哪些误伤了正常业务。
- 更新防护基线:把本次攻击的流量规模、攻击特征写进预案,调整告警阈值和自动触发策略。
- 排查是否有数据泄露或系统被入侵的迹象。DDoS经常被用作声东击西的烟雾弹,攻击期间其他漏洞可能正在被利用。建议做一次全量日志审计和漏洞扫描。
7. 防御也要做压力测试:企业DDoS攻击实验的正确打开方式
很多企业防御预案写了一大本,但从来没真正验证过,等到攻击来了才发现告警没触发、清洗策略是错的。所以"ddos攻击实验"这个词最近热度很高——但我要先强调一个前提:所有演练都是在自己的环境、自己的授权范围内进行,或者使用云厂商、第三方安全机构提供的正规压力测试服务,任何针对他人系统的攻击测试都是违法的。
7.1 为什么必须做攻击实验
DDoS防御有一个特点:平时"用不到"的配置,往往在关键时刻掉链子。比如清洗策略误把正常流量当成攻击流量丢弃、高防IP的回源IP配置在攻击时段才暴露出错误、告警阈值设置过高导致被打半小时都没收到通知。这些故障形态很难靠"看配置"发现,必须靠模拟攻击来触发。
我参与的一次演练就发现过很典型的问题:某云高防的清洗规则被设计成"对单一来源IP限速",结果演练时把自家办公楼所有员工的真实访问都限速了,硬是把内网用户全部挡在系统外面。这种问题不提前暴露,真到攻击来的时候等于自断双臂。
7.2 演练的完整步骤设计
- 确定规模和环境:在预发布环境或专门搭建的演练环境中进行,不要让演练流量冲击生产环境。如果确实要验证生产环境,选择业务低峰期,并把攻击流量控制在防御能力的一定比例以内(比如单节点清洗能力的30%-50%)。
- 建立流量基线:演练前记录正常的带宽、请求量、响应时间,作为对比依据。
- 分类型逐步测试:按网络层、协议层、应用层三类攻击分别模拟,而不是一次性混合打。这样才能定位每一层防御的真实能力。
- 检验告警链路:确认攻击发生时,告警通知是否及时触达了值班团队,而不只是监控面板上飘红没人看。
- 验证自动化响应:自动调度是否按预案执行?黑洞策略是否生效?切换后正常业务是否恢复?
- 记录响应时间:从攻击开始到业务恢复,全程计时。企业一般来说目标应该是“本地缓解+上游响应”在15分钟内稳住局面,30分钟内业务基本恢复。
- 输出演练报告:记录问题清单、改进项、责任人、完成时间,把演练中发现的问题闭环掉。
7.3 演练中常暴露出的短板
以我看到的真实情况来说,最容易暴露问题的三块是:第一,告警阈值设置不合理,或者监控有死角(比如只看了带宽没看PPS的连接数,导致小包攻击没被发现);第二,清洗策略和真实业务特征冲突,规则误伤率高;第三,回源链路没有冗余,高防IP清洗后的流量在回源链路上被卡死。这三类问题都是"纸上谈兵"看不出来的,必须用数据说话。
建议企业按季度或至少每半年做一次完整的抗D演练。不是走过场,而是把演练当作和上线发布同等严肃的流程来对待。每一次演练发现的问题,都是真金白银省下来的应急成本。
说到底,DDoS防御不是采购一个产品就结束的项目,它是一套持续运营的能力。把基础加固、方案组合、监控告警、应急响应和定期演练这几件事全部落地,企业才能在面对攻击时真正心里有底。我个人这些年做下来最大的体会是:防御的价值不在"没被打过",而在"真被打的时候能扛住并快速恢复",这两者的区别,全靠平时那点看不见的功夫。