IPv6 的 IPv4 映射地址是否真的有安全问题?

2022-07-06 20:07:38 +08:00
 cnbatch

IPv6 的 IPv4 映射地址(IPv4-mapped IPv6)是指这种:

IPv4 地址:192.168.100.1

能够在 IPv6 写成 ::FFFF:192.168.100.1

正常来讲,应用程序只要关闭“IPv6 only”选项(当然了,操作系统也得支持),那么就可以用一个 IPv6 socket 同时处理 IPv4 的连接。


在目前活跃的各个操作系统当中,OpenBSD 早在 2012 年就十分明确地表明不支持这种操作,理由是“出于安全考虑”。

For security reasons, OpenBSD does not route IPv4 traffic to an AF_INET6 socket, and does not support IPv4 mapped addresses, where IPv4 traffic is seen as if it comes from an IPv6 address like “::ffff:10.1.1.1”. Where both IPv4 and IPv6 traffic need to be accepted, bind and listen on two sockets.

只不过,不但 Windows 和 Linux 都支持这种映射地址,就连同样是 BSD 家族的 FreeBSD 和 NetBSD 也一样支持,我实在想不出 OpenBSD 说的 security reasons 到底是什么样安全顾虑。

能够搜到的理由“解释”也就来自这两个地方(都是 2015 年的):

https://lwn.net/Articles/688462/ (这篇文章被人机翻成 https://linux.cn/article-7823-1.html

还有 https://stackoverflow.com/questions/32051957/ipv6-why-are-ipv4-mapped-addresses-a-security-risk

大意就是,防火墙未必能够正确处理规则匹配。

只不过都已经这么多年了,规则匹配什么的早就已经弄好了呀。


所以疑问来了,真的有安全问题吗?

1210 次点击
所在节点    程序员
6 条回复
ragnaroks
2022-07-06 20:49:25 +08:00
我觉得没有;应该是当时的防火墙不能正确处理,现在应该可以了
blankmiss
2022-07-06 20:57:08 +08:00
不知道欸 我关闭 IPV6 了
ysc3839
2022-07-06 21:00:03 +08:00
我觉得是可能用户不想开放 IPv4 端口,这个功能会在用户不知情的情况下开放
raysonx
2022-07-06 21:30:17 +08:00
应该是为了避免用户以为自己只监听了 IPv6 端口,所以只配置了 IPv6 防火墙,而实际 IPv6 端口和 IPv4 端口全部都监听了这种情况。
cnbatch
2022-07-06 22:13:20 +08:00
@ysc3839
@raysonx
对于这些情况,其实 OpenBSD 完全可以默认开启 net.ipv6.bindv6only ,然后在文档某个章节单独列出说明白,需要用单 socket 双栈的用户再自己主动打开。

直白地说就是,“这个功能我设置成默认关闭了,想用的话可以自己打开,风险自担,选择权在你(用户)手上”。

毕竟,主动选择用 OpenBSD 的人基本不会是小白。像这样一刀切直接不支持,有点像是 OpenBSD 开发团队把用户当小白🙃

也许他们真的认为,跟他们自己相比,用户们都是小白吧😑
cnbatch
2022-07-06 22:21:06 +08:00
@cnbatch 一时手滑,应该是,“需要用单 socket 双栈的用户再自己主动修改 net.ipv6.bindv6only”

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/864514

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX