本文介绍了如何在爱快路由设备上配置 IPV6 网络防火墙,我们设置该防火墙的主要原因有以下几点:
- 内网设备需要访问纯 IPV6 资源,例如观看 IPTV;
- 某些内网设备缺乏防火墙保护,如果这些设备暴露在外网,将面临严重的安全风险。
- 事实上只有部分内网设备需要外网访问权限,例如 NAS 和虚拟机,其他设备并不需要被外网访问。
- 为了方便使用,在内网部署了 DDNS,将动态 IP 地址绑定到易于记忆的域名,这也存在外泄的潜在风险。
我们将从两个角度完成内网 IPV6 防火墙的设定:
- 只给指定设备分发公网 IPV6 地址;
- 只开放指定地址和指定端口的访问权限;
IPV6 地址获取
ipv6地址获取有两种方式:路由器通告前缀 + 设备自己的后缀[1];DHCP 给一个 /128 的地址。
需要明确:无状态和有状态,仅仅指的是 IPV6 地址的获取方式。前者实现方式是 SLAAC,后者是 DHCPv6,由于 SLAAC 只能获取到地址,无法获取到 DNS 等信息,亦存在一种组合搭配,所有方式如下:
方式 | 地址 | 前缀 | 网关 | DNS | A | M | O |
---|---|---|---|---|---|---|---|
SLAAC(无状态) | RA | RA | RA | - | 1 | 0 | 0 |
Stateless DHCPv6(无状态 DHCPv6) | RA | RA | RA | DHCPv6 | 1 | 0 | 1 |
Stateful DHCPv6(有状态 DHCPv6) | DHCPv6 | DHCPv6 | RA | DHCPv6 | 0 | 1 | ~ |
有状态 + 无状态 | 1 | 1 | 1 |
原则上,出于易于管理的角度,我们推崇使用有状态 DHCPv6。在这种方式下,所有信息由路由器统一下发管理。然而,谷歌曾明确表示,安卓设备将只支持 SLAAC 的 IPv6 地址获取方式[2],因此,在有状态或者无状态的选取上根据个人需求而定[3]。
对于爱快系统,有状态可与 DHCPv6 黑白名单 搭配使用,以便完成对指定设备(依据 MAC 地址)的 IPv6 地址分配。而无状态则通过设置 RA 通告绑定,与 前缀静态分配 搭配使用,实现对指定设备的地址分配,在前缀静态分配中填写本地链接 IPV6 地址(形如 fe80::8a35:2de7:e6f3:7582
)。
ACL 规则
一些基本知识:
- 允许的优先级大于阻断的优先级;
- 方向中的转发/进所描述的对象为路由器,进指内网/外网访问路由,一般只需要使用转发;
- 连接方向匹配中原始方向为发起方发起访问的报文,可以是内网发起,也可以是外网发起,应答亦是;
- 后缀匹配:由于前缀动态变化,而后缀固定[4],所以匹配内网设备时使用后缀地址进行匹配;
假设运营商分配的 PD 前缀为 /60(aaaa:bbbb:cccc:ddd0::/60),即可划分 16 个 /64 子网(aaaa:bbbb:cccc:ddd0::/64 ~ aaaa:bbbb:cccc:dddf::/64),无状态下最小子网前缀要求便是 /64。
IPV6 禁入
全局 IPV6 禁入[5]:
协议栈 | 协议 | 动作 | 方向 | 连接方向匹配 | 进接口 | 出接口 |
---|---|---|---|---|---|---|
IPV6 | 任意 | 阻断 | 转发 | 原始方向 | wan | lan |
效果:阻断了外网对内网的 IPV6 访问。
隐私地址禁出
协议栈 | 协议 | 动作 | 方向 | 连接方向匹配 | 源地址 | 进接口 | 出接口 |
---|---|---|---|---|---|---|---|
IPV6 | 任意 | 阻断 | 转发 | 原始方向 | ::ff:feff:0/::ff:ff00:0 | lan | wan |
禁止通过 EUI-64 生成的无状态 IPV6 地址发起的出流量,结合上条做到该类地址完全的禁入禁出。
EUI-64 根据设备 MAC 地址生成网络后缀,故存在 MAC 地址泄露风险[6],算法流程如下:
- dc:50:e6:d0:3b:d0 => dc:50:e6:d0:3b:d0
- dc => 11011100 => 11011110 => de
- de:50:e6:d0:3b:d0 => de:50:e6: d0:3b:d0
- de:50:e6: d0:3b:d0 => de:50:e6:ff:fe:d0:3b:d0
- de:50:e6:ff:fe:d0:3b:d0 => de50:e6ff:fed0:3bd0
- de50:e6ff:fed0:3bd0 => fe80::de50:e6ff:fed0:3bd0
允许外网访问内网指定端口
协议栈 | 协议 | 动作 | 方向 | 连接方向匹配 | 目的地址 | 目的端口 | 进接口 | 出接口 |
---|---|---|---|---|---|---|---|---|
IPV6 | tcp | 允许 | 转发 | 原始方向 | ::abcd/::ffff | 8443 | wan | lan |
关于目的地址:数据包实际从 WAN 到 LAN,走向目的地址,可以根据后缀匹配填写目的地址。
假设设备 IPV6 地址为:240e:aaaa:bbbb:cccc:0000:0000:0000:0001
,简写为 240e:aaaa:bbbb:cccc::1
,用后缀表示该地址变 ::1/::ffff
,无状态随机地址不可控。
检测
可以在 IPv6 Port Checker 处完成端口外网检测,按照实际情况,运营商已经把 80, 443, 8080 等端口阻断了。