防止 IPv6 泄露 MAC 地址

玩 PT 站的时候, 检查 Tracker 的时候遇到了一个提示就是 ipv6 会泄露 Mac 地址, 这是安全性较高的站点非常关注的问题。

我去 NAS 上使用 ifconfig 检查 ipv6 和 mac 地址. 从输出的结果来看 ipv6 确实泄露了 Mac 地址. 这个 PT 站安全警惕性非常高. 遇到不安全的客户端也会通知大家立即停止使用, 以及发布一些分析文章.

We have detected one (or more) of your clients on IPv6 is leaking your mac address.
You can recognize these clients as they will end with FF:FE__:____ (where _ is a random hexadecimal character)

实际情况

  • IPv6 地址: fdbe:6442:2ece:0:a00:27ff:fe15:fb4e
  • MAC 地址: 08-00-27-15-FB-4E

提示: 由于十六进制转换, 某些 MAC 地址可能会转换为地址中的字母。这个是正常的。

IPv6_EUI-64.png

MAC_ADDR.png

解决方案

关闭 Torrent 客户端中的 IPv6

这是最直接的解决方案, 确保客户端不会使用 IPv6 地址

设置设备使用临时 IPv6 地址

对于 Windows 7、8 和 8.1 系统, 默认启用了基于 MAC 地址的 IPv6 地址生成。可以通过以下步骤启用隐私扩展。

Windows 7/8

以管理员身份运行 cmd, 启用临时 IPv6 地址

# 以下命令以启用随机 IP 地址生成功能
netsh interface ipv6 set global randomizeidentifiers=enabled

# 以允许 Windows 随机生成用于网络通信的临时地址
netsh interface ipv6 set privacy state=enabled

如果要禁用临时 IPv6 地址, 以管理员身份运行 cmd

netsh interface ipv6 set global randomizeidentifiers=disabled
netsh interface ipv6 set privacy state=disabled

检查结果

使用 ipconfig 检查 IPv6 地址, 确保临时地址成功启用

CentOS 7

隐私扩展中所述 RFC 4941 (废弃 RFC 3041) 为无状态地址自动配置/隐私扩展中的 IPv6 正在取代静态接口 ID (主要是基于字宽唯一的 MAC 地址) 通过伪随机的一个, 并从生成的自动配置过程中使用一个新的贬低旧的一个。

CentOS 7 建议使用 Network Manager 启用隐私扩展

使用 sysctl 启用隐私扩展

临时启用

启用例如接口 eth0 的隐私扩展, 并优先选择生成的地址

sysctl -w net.ipv6.conf.eth0.use_tempaddr = 2

之后, 需要重新启动网络接口

ip link set dev eth0 down 
ip link set dev eth0 up

重启完成后, 结果应如下所示

ip -6 addr show dev eth0

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2001:db8:0:1:8992:3c03:d6e2:ed72/64 scope global secondary dynamic   <- pseudo-random IID
       valid_lft 604711sec preferred_lft 86311sec
    inet6 2001:db8:0:1::224:21ff:fe01:2345/64 scope global     <- IID based on MAC
       valid_lft 604711sec preferred_lft 86311sec
    ...

永久启用

对于永久激活, 每个接口的特殊 initscript 值将启用隐私或在 /etc/sysctl.conf 文件中添加以下行

net.ipv6.conf.eth0.use_tempaddr = 2

注意: 应用 sysctl.conf 时, 接口必须已存在且具有正确的名称。如果不是这种情况 (例如重启后), 则默认情况下必须为所有接口配置隐私

net.ipv6.conf.all.use_tempaddr = 2 
net.ipv6.conf.default.use_tempaddr = 2

然后应用更改

sysctl -p

使用 Network Manager 启用隐私扩展

新 (客户端) 系统使用 Network Manager 配置接口。内置命令行工具, 可用于更改 GUI 不可用的设置。

检查现有接口

# nmcli connection 
NAME UUID TYPE DEVICE
ens4v1 d0fc2b2e-5fa0-4675-96b5-b723ca5c46db 802-3-ethernet ens4v1

可以使用以下方式检查当前 IPv6 隐私扩展地址的数量

ip -o addr show dev ens4v1 | grep temporary | wc -l
0

检查当前的 IPv6 隐私扩展设置

nmcli connection show ens4v1 | grep ip6-privacy
ipv6.ip6-privacy: -1 (unknown)

启用 IPv6 隐私扩展并重新启动接口

nmcli connection modify ens4v1 ipv6.ip6-privacy 2
nmcli connection down ens4v1; nmcli connection up ens4v1

再次检查当前的 IPv6 隐私扩展设置

nmcli connection show ens4v1 | grep ip6-privacy
ipv6.ip6-privacy: 2 (active, prefer temporary IP)

再次检查 IPv6 隐私扩展地址的数量

ip -o addr show dev ens4v1 | grep temporary | wc -l
2

测试真实 IPv6 地址是否启用隐私扩展

检查具有由 Privacy Extension 生成的接口 ID 的 IPv6 地址是否真的用于传出连接, 可以访问 ip.bieringer.de 测试生成的 IPv6 地址是否启用了隐私扩展。确保 EUI64_SCOPE 显示 iid-privacy


原文

CentOS 7: Enable Privacy Extension: Configuring IPv6 addresses
Windows 7: IPv6 Temporary Address - Enable or Disable - How to Enable or Disable Temporary IPv6 Address Feature in Windows 7 and 8

最后更新于 2019-03-08
使用 Hugo 构建
主题 StackJimmy 设计