IPv6 安全:威胁、缓解措施和最佳实践
IPv6 本质上不比 IPv4 更安全或更不安全。了解真实的 IPv6 安全威胁、如何正确配置防火墙并保护你的网络。
NAT 神话#
当组织考虑 IPv6 时,一个问题不断出现:「没有 NAT,我们不是暴露了吗?」
不。NAT 从来都不是安全功能。它是地址稀缺的解决方法,恰好隐藏了内部地址。有状态防火墙提供相同的保护,阻止未经请求的入站连接,而没有地址转换的缺点。
真正的问题不同:许多网络已启用 IPv6,但忘记配置 IPv6 防火墙规则。这是一个严重的问题,完全可以预防。
NAT 神话#
NAT 从来都不是安全功能。它是地址稀缺的解决方法,恰好隐藏了内部地址。有状态防火墙提供相同的保护,阻止未经请求的入站连接,而没有地址转换的缺点。
IPv6 安全实际上有什么不同#
IPv6 以特定方式改变威胁格局:
**更大的地址空间是双刃剑。**使用蛮力扫描 /64 子网需要几个世纪。但攻击者不会蛮力,他们使用 DNS 记录、证书透明度日志和流量分析来查找目标。不要依赖地址模糊性。
**每个设备都可能可达。**拥有每个主机上的全局地址,你的防火墙是唯一的屏障。这使防火墙配置更加关键,而不是可选的。
**ICMPv6 是必不可少的,而不是可选的。**与 IPv4 不同,你可以在不破坏东西的情况下阻止所有 ICMP,IPv6 需要 ICMPv6 进行基本操作。阻止错误的消息,你的网络就会停止工作。
**新协议,新攻击面。**邻居发现协议(NDP)取代 ARP 并引入新的向量。扩展头部增加了攻击者可以利用的复杂性。
IPv6 特定的攻击向量#
NDP 欺骗#
邻居发现协议处理地址解析、路由器发现和重复地址检测。与 IPv4 中的 ARP 一样,它默认是信任的。
本地网络上的攻击者可以:
- 欺骗邻居通告以重定向流量(中间人)
- 发送伪造的路由器通告以成为默认网关
- 执行重复地址检测攻击以拒绝合法主机的地址
这些攻击需要本地网络访问,它们不是互联网规模的威胁。但在共享网络(办公室、数据中心、WiFi)上,它们是真正的风险。
**缓解:**在交换机上部署 RA Guard 和 ND Inspection。在主机上,考虑 SEND(安全邻居发现),尽管采用有限。
路由器通告攻击#
恶意 RA 可以说服主机:
- 使用攻击者作为他们的默认网关
- 接受恶意 DNS 服务器
- 使用特定前缀(可能用于流量拦截)
这特别危险,因为大多数主机默认接受 RA。
缓解:
- 交换机端口上的 RA Guard(阻止来自非路由器端口的 RA)
- 在 Linux 主机上:具有静态配置的服务器使用
net.ipv6.conf.all.accept_ra = 0 - 使用
ramond或 NDPMon 等工具监控意外的 RA
扩展头部利用#
IPv6 扩展头部位于主头部和有效负载之间。合法用途包括分片、路由选项和 IPsec。
攻击者可以使用它们:
- 逃避防火墙,这些防火墙不检查完整的头部链
- 分片攻击以绕过检查或重组漏洞
- 创建模糊数据包,不同设备以不同方式解释
**缓解:**使用完全解析扩展头部链的防火墙。删除具有异常或已弃用扩展头部的数据包(如 Type 0 Routing Headers,被 RFC 5095 废弃)。
侦察技术#
攻击者不会随机扫描 /64。他们通过以下方式查找 IPv6 目标:
- DNS 区域传输或猜测(www、mail、ns1 等)
- 证书透明度日志(所有 HTTPS 证书都是公开的)
- 从流量中收集(被动监控)
- 可预测的地址(::1、::100、基于 MAC 的 EUI-64)
**缓解:**对客户端地址使用隐私扩展。避免可预测的服务器地址。如果不需要,不要在公共 DNS 中发布内部基础设施。
IPv6 的防火墙配置#
允许的基本 ICMPv6 类型#
阻止这些,你的网络就会崩溃:
| 类型 | 名称 | 需要用于 |
|---|---|---|
| 1 | 目标不可达 | 路径 MTU 发现、错误处理 |
| 2 | 数据包太大 | 路径 MTU 发现(关键) |
| 3 | 超时 | Traceroute、循环检测 |
| 128/129 | 回显请求/回复 | Ping(可选但有用) |
| 133 | 路由器请求 | 主机查找路由器 |
| 134 | 路由器通告 | 路由器通告自己 |
| 135 | 邻居请求 | 地址解析 |
| 136 | 邻居通告 | 地址解析响应 |
类型 133-136 仅在本地链路上需要,不要跨路由器转发它们。
有状态防火墙规则#
主机的最小规则集:
# 允许已建立的连接
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# 允许 ICMPv6(在生产中更具体)
-A INPUT -p ipv6-icmp -j ACCEPT
# 仅允许 NDP 的链路本地(更安全)
-A INPUT -s fe80::/10 -p ipv6-icmp --icmpv6-type 133:136 -j ACCEPT
# 允许特定服务
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# 删除其他所有内容
-A INPUT -j DROP对于 nftables,等效:
table inet filter {
chain input {
type filter hook input priority 0; policy drop;
ct state established,related accept
ip6 nexthdr icmpv6 accept
tcp dport { 22, 443 } accept
}
}不要忘记出口过滤#
出站规则也很重要。它们可以:
- 防止通过意外协议进行数据渗透
- 阻止命令和控制流量
- 限制来自受损主机的损害
至少,记录意外的出站连接。
IPv6 中的 IPsec#
IPsec 最初是 IPv6 实现的强制性要求(RFC 2460)。这后来被放宽(RFC 6434),因为普遍部署从未发生。
尽管如此,IPv6 使 IPsec 更清洁:
- 没有 NAT 穿越复杂性
- 考虑到 IPsec 设计的扩展头部
- ESP 和 AH 按预期工作
如果你需要在特定主机或站点之间进行加密,IPv6 上的 IPsec 很简单,比带 NAT 的 IPv4 更简单。
第一跳安全功能#
现代交换机提供对本地攻击的保护:
**RA Guard:**阻止来自未经授权端口的路由器通告。在所有接入交换机上必不可少。
**DHCPv6 Guard:**将 DHCPv6 服务器响应限制为授权端口。
**ND Inspection:**构建 MAC 到 IPv6 映射的绑定表并验证 NDP 流量。
**Source Guard:**基于绑定表删除具有欺骗源地址的数据包。
这些功能在 Cisco、Juniper、Arista 等的企业交换机上可用。配置它们,它们默认是禁用的。
常见错误#
**在不配置防火墙的情况下启用 IPv6。**如果你的防火墙规则仅涵盖 IPv4,你在 IPv6 上是敞开的。这是第一大现实世界漏洞。
**阻止所有 ICMPv6。**这会破坏路径 MTU 发现并导致神秘的连接失败,特别是对于大数据包和通过隧道。
**忽略「仅 IPv4」网络上的 IPv6。**大多数操作系统默认启用 IPv6。没有适当的基础设施,它们可能使用链路本地或隧道到随机端点。
**假设 NAT64 提供安全性。**转换技术不添加安全性。它们只是转换。你仍然需要防火墙规则。
**对 IPv4 和 IPv6 使用相同的防火墙规则。**一些规则直接转换;其他规则(如 ICMP 处理)需要特别注意。
安全检查清单#
在使用 IPv6 上线之前:
- 防火墙规则明确涵盖 IPv6 流量
- 允许基本 ICMPv6 类型
- 在接入交换机上启用 RA Guard
- 如果使用 DHCPv6,配置 DHCPv6 Guard
- 为 IPv6 更新 IDS/IPS 签名
- 日志捕获 IPv6 源地址
- 审查 DNS 记录(不要发布不必要的 AAAA 记录)
- 在客户端上启用隐私扩展
- 为恶意 RA 设置监控
总结#
IPv6 安全并不比 IPv4 难,它是不同的。基本原则保持不变:有状态防火墙、适当的访问控制、监控和保持系统修补。
最大的风险不是技术复杂性。这是 IPv6 存在但未得到适当管理的过渡期。在你的安全架构中将 IPv6 视为一等公民,而不是事后考虑。
相关文章#
- IPv6 防火墙配置:基本规则 - 学习如何正确配置 IPv6 防火墙规则以保护你的网络。
- IPv6 隐私扩展:阻止地址跟踪 - 了解如何保护你的隐私并防止基于地址的跟踪。
亲自尝试
使用我们的 IPv6 验证器检查你的地址配置是否正确。