**摘要:**IPv6 全面铺开之后,DDoS 防御的底层假设正在被改写。地址空间从 2³² 膨胀到 2¹²⁸,攻击者可用的源地址、可扫描的目标、可放大的反射面同步扩张,业内普遍观察到攻击面接近 3 倍增长。本文从 IPv6 协议特性出发,拆解攻击面扩张的真实来源,梳理传统清洗方案在 IPv6 场景下的失效点,并给出以「前缀聚合 + 行为基线 + 分层清洗」为核心的精准清洗新战法,附可落地的配置与检测思路。
一、为什么说 IPv6 让攻击面扩张了 3 倍
很多人把 IPv6 简单理解为「地址变长了」,但对 DDoS 防御而言,地址长度只是表象,真正改变的是攻击者与防御者之间的信息不对称结构。
1.1 地址空间膨胀带来的扫描与源地址伪造红利
IPv4 下,一个 /24 网段只有 256 个地址,攻击者用很小的成本就能完成全量扫描,防御方也容易对「整个网段」做统一策略。到了 IPv6,一个企业常见的 /48 或 /56 分配,意味着数万到数亿级别的可用地址,攻击者可以:
- 低成本大范围探测:通过 DNS、证书透明度日志、BGP 路由公告、邻居发现等公开或半公开渠道收集存活地址,再配合稀疏扫描定位真实服务。
- 源地址随机化:IPv6 头部更长、地址字段更大,很多老旧设备与中间件对源地址校验不严,攻击者可以轻易构造海量「看似合法」的随机源地址,绕过基于源 IP 的黑名单与限速。
- 目标地址随机化:同一台服务器往往绑定多个 IPv6 地址,攻击流量可以分散到不同地址上,让基于单 IP 的阈值告警失效。
1.2 反射放大面显著扩大
IPv6 环境下,DNS、NTP、SNMP、Memcached、CLDAP 等 UDP 服务的部署范围更广,且不少设备默认开启 IPv6 监听。攻击者只需伪造受害者 IPv6 地址发起查询,就能获得数倍甚至数十倍的放大流量。相比 IPv4,IPv6 的反射源更分散、更难通过单点封禁收敛。
1.3 攻击面扩张的量化视角
把攻击面拆成「可探测目标数 × 可用源地址数 × 可放大协议数」三个维度,IPv6 在每个维度上都带来了数量级变化。综合现网观测,攻击者可触达的有效攻击面相比纯 IPv4 环境普遍扩张到约 3 倍,这也是「3 倍扩张」这一说法的来源。
二、传统清洗方案在 IPv6 下的失效点
不少团队把 IPv4 的清洗策略直接平移到 IPv6,结果发现告警变多、误杀变多、清洗效果反而变差。常见失效点集中在以下几处。
2.1 基于单 IP 的阈值与黑名单失效
IPv6 地址随机化让「单 IP 超阈值」几乎不会触发,攻击流量被均匀摊薄到成千上万个源地址上,每个地址的速率都低于阈值。黑名单同样失效:封禁一个 /128 地址,攻击者换一个即可。
2.2 会话表与状态跟踪被打爆
传统防火墙和清洗设备依赖五元组会话表。IPv6 下源地址高度离散,会话表项数量呈爆炸式增长,设备在真正开始清洗之前就先被状态耗尽拖垮,表现为新建连接失败、时延飙升。
2.3 分片与扩展头带来的解析开销
IPv6 允许分片头与多种扩展头,攻击者可以构造大量异常分片或畸形扩展头,迫使清洗设备做深度解析。部分设备对扩展头处理不完整,直接丢弃合法流量或放行攻击流量。
2.4 策略粒度与运维复杂度上升
IPv4 时代按 /24 配置策略的习惯,在 IPv6 下需要重新设计为按 /48、/56、/64 分层。若策略仍按单地址维护,规则数量会迅速失控,变更风险显著提高。
三、精准清洗新战法:前缀聚合 + 行为基线 + 分层清洗
应对 IPv6 洪水攻击,核心思路不是「封得更狠」,而是「看得更准」。下面给出一套可落地的三层战法。
3.1 第一层:前缀聚合,把离散源地址收敛成可治理对象
既然攻击者可以随意更换 /128 地址,防御方就不要再以 /128 为单位思考。做法是把源地址按前缀长度聚合统计,例如:
- 对源地址按 /64 聚合,统计每个 /64 前缀的流量与新建连接速率;
- 对上游再按 /48 聚合,识别来自同一分配块的协同攻击;
- 对目标地址同样按 /64、/48 聚合,识别针对同一业务网段的集中打击。
聚合之后,原本「每个源地址都不超阈值」的流量,会在 /64 维度上呈现出明显的异常尖峰,告警与清洗才有抓手。
3.2 第二层:行为基线,用协议行为而非单纯流量判断恶意
IPv6 攻击流量在总量上未必惊人,但在协议行为上往往破绽明显。建议建立以下基线维度:
| 基线维度 | 正常特征 | 攻击特征 |
|---|---|---|
| 源地址前缀分布 | 集中在少数已知网段 | 高度离散,大量陌生 /64 |
| TCP 握手完成率 | 较高且稳定 | 显著偏低,SYN 多而 ACK 少 |
| 扩展头使用比例 | 极低 | 异常升高,出现畸形扩展头 |
| UDP 请求响应比 | 接近 1:1 | 响应远大于请求,疑似反射放大 |
| 单前缀新建连接速率 | 平稳 | 突增且持续 |
把上述维度组合成评分模型,只有当「流量异常 + 行为异常」同时成立时才触发清洗,可以显著降低误杀。
3.3 第三层:分层清洗,按代价从低到高逐级加码
清洗动作应当分层,优先使用代价低、影响面小的手段:
- 前缀级限速:对异常 /64 前缀做整体限速,而不是逐个 /128 封禁,既覆盖随机源地址,又避免规则爆炸。
- 协议特征过滤:丢弃畸形扩展头、非法分片、源地址属于保留或未分配空间的报文。
- 反射放大抑制:对 UDP 服务做请求响应比校验,对异常放大流量做丢弃。
- 业务层挑战:对疑似攻击的会话下发 SYN Cookie 或应用层验证,把真实用户与攻击流量区分开。
- 上游联动:对确认的大流量攻击,通过 BGP FlowSpec 或清洗中心牵引,在上游完成近源清洗。
四、落地实践:关键配置与检测思路
下面给出一段基于 nftables 的 IPv6 前缀聚合限速示例,用于在主机侧对异常 /64 前缀做初步收敛。
bash
# 定义按 /64 聚合的限速集合
nft add table ip6 ddos_guard
nft add set ip6 ddos_guard src64 '{ type ipv6_addr; flags dynamic,timeout; timeout 60s; }'
对新建连接按 /64 前缀计数,超过阈值则加入限速集合
nft add chain ip6 ddos_guard input '{ type filter hook input priority 0; policy accept; }'
nft add rule ip6 ddos_guard input tcp flags syn
update @src64 '{ ip6 saddr and ffff:ffff:ffff:ffff:: }'
limit rate over 200/second burst 400 packets
add @src64 '{ ip6 saddr and ffff:ffff:ffff:ffff:: }' drop
对已进入限速集合的前缀整体丢弃
nft add rule ip6 ddos_guard input ip6 saddr and ffff:ffff:ffff:ffff:: @src64 drop
需要注意,主机侧规则只是第一道闸门,真正的清洗仍应放在具备大带宽牵引能力的清洗设备或云清洗服务上。主机侧的目标是「不让状态表被打爆」,而不是「独自扛住全部流量」。
4.1 检测侧的关键指标
- 前缀熵:统计单位时间内源地址 /64 前缀的分布熵,熵值突增往往意味着随机源地址攻击。
- 握手完成率:SYN 与 ACK 的比例持续走低,是 SYN Flood 的强信号。
- 扩展头比例:异常扩展头占比升高,提示存在畸形报文攻击。
- UDP 放大比:响应字节数除以请求字节数,超过正常业务基线即需关注。
4.2 运维层面的三个建议
- 提前梳理地址资产:明确哪些 /48、/56、/64 属于自己,避免清洗时误伤同网段其他业务。
- 策略按前缀分层维护:把策略模板化,按 /48 到 /64 逐级细化,减少人工维护成本。
- 定期演练:用受控流量模拟随机源地址攻击,验证前缀聚合与分层清洗是否按预期生效。
五、总结
IPv6 不是简单的地址升级,它改变了 DDoS 攻防的基本盘。攻击面约 3 倍的扩张,本质上是「源地址可随机、目标地址可分散、反射源更丰富」三者叠加的结果。继续沿用 IPv4 时代以单 IP 为中心的清洗思路,只会陷入告警泛滥与误杀不断的困境。
更可行的路径是:用前缀聚合 把离散地址收敛成可治理对象,用行为基线 把流量异常与协议异常结合起来判断,用分层清洗按代价从低到高逐级加码。三者配合,才能在 IPv6 的洪水面前做到既洗得干净,又不误伤真实用户。