原标题:Linux 发行版们应该禁用 IPv4 映射的 IPv6 地址吗?

本文导航

-地址映射

-安全担忧

-Linux 上的地址映射

从各方面来看,互联网向 IPv6 的过渡是件很缓慢的事情。不过在最近几年,可能是由于 IPv4 地址资源的枯竭,IPv6 的使用处于[1]。相应的,开发者也有兴趣确保软件能在 IPv4 和 IPv6 下工作。但是,正如近期 OpenBSD 邮件列表的讨论所关注的,一个使得向 IPv6 转换更加轻松的机制设计同时也可能导致网络更不安全——并且 Linux 发行版们的默认配置可能并不安全。

地址映射

IPv6 在很多方面看起来可能很像 IPv4,但它是一个不同地址空间的不同的协议。服务器程序想要接受使用二者之中任意一个协议的连接,必须给两个不同的地址族分别打开一个套接字——IPv4 的 AF_INET 和 IPv6 的 AF_INET6。特别是一个程序希望在主机的使用两种地址协议的任意接口都接受连接的话,需要创建一个绑定到全零通配符地址(0.0.0.0)的 AF_INET 套接字和一个绑定到 IPv6 等效地址(写作::)的 AF_INET6 套接字。它必须在两个套接字上都监听连接——或者有人会这么认为。

多年前,在 [2],IETF 指定了一个机制,程序可以使用一个单独的 IPv6 套接字工作在两个协议之上。有了一个启用这个行为的套接字,程序只需要绑定到 :: 来在所有接口上接受使用这两个协议连接。当创建了一个 IPv4 连接到该绑定端口,源地址会像 [3]中描述的那样映射到 IPv6。所以,举个例子,一个使用了这个模式的程序会将一个 192.168.1.1 的传入连接看作来自::ffff:192.168.1.1(这个混合的写法就是这种地址通常的写法)。程序也能通过相同的映射方法打开一个到 IPv4 地址的连接。

RFC 要求这个行为要默认实现,所以大多数系统这么做了。不过也有些例外,OpenBSD 就是其中之一;在那里,希望在两种协议下工作的程序能做的只能是创建两个独立的套接字。但一个在 Linux 中打开两个套接字的程序会遇到麻烦:IPv4 和 IPv6 套接字都会尝试绑定到 IPv4 地址,所以不论是哪个后者都会失败。换句话说,一个绑定到 :: 指定端口的套接字的程序会同时绑定到 IPv6 :: 和 IPv4 0.0.0.0 地址的那个端口上。如果程序之后尝试绑定一个 IPv4 套接字到 0.0.0.0 的相同端口上时,这个操作会失败,因为这个端口已经被绑定了。

当然有个办法可以解决这个问题;程序可以调用 setsockopt() 来打开 IPV6_V6ONLY 选项。一个打开两个套接字并且设置了 IPV6_V6ONLY 的程序应该可以在所有的系统间移植。

读者们可能对不是每个程序都能正确处理这一问题没那么震惊。事实证明,这些程序的其中之一是网络时间协议(Network Time Protocol)的 [4]实现。Brent Cook 最近给上游 OpenNTPD 源码[5],添加了必要的 setsockopt() 调用,它也被提交到了 OpenBSD 中了。不过那个补丁看起来不大可能被接受,最可能是因为 OpenBSD 式的理由(LCTT 译注:如前文提到的,OpenBSD 并不受这个问题的影响)。

安全担忧

正如上文所提到,OpenBSD 根本不支持 IPv4 映射的 IPv6 套接字。即使一个程序试着通过将IPV6_V6ONLY 选项设置为 0 显式地启用地址映射,它的作者会感到沮丧,因为这个设置在 OpenBSD 系统中无效。这个决定背后的原因是这个映射带来了一些安全担忧。攻击打开的接口的攻击类型有很多种,但它们最后都会回到规定的两个途径到达相同的端口,每个端口都有它自己的控制规则。

任何给定的服务器系统可能都设置了防火墙规则,描述端口的允许访问权限。也许还会有适当的机制,比如 TCP wrappers 或一个基于 BPF 的过滤器,或一个网络上的路由器可以做连接状态协议过滤。结果可能是导致防火墙保护和潜在的所有类型的混乱连接之间的缺口导致同一 IPv4 地址可以通过两个不同的协议到达。如果地址映射是在网络边界完成的,情况甚至会变得更加复杂;参看[6],它描述了如果映射地址在主机之间传播,一些随之而来的其它攻击场景。

改变系统和软件正确地处理 IPv4 映射的 IPv6 地址当然可以实现。但那增加了系统的整体复杂度,并且可以确定这个改动没有实际地完整实现到它应该实现的范围内。如同 Theo de Raadt [7]:

有时候人们将一个糟糕的想法放进了 RFC。之后他们发现这个想法是不可能的就将它丢回垃圾箱了。结果就是概念变得如此复杂,每个人都得在管理和编码方面是个全职专家。

我们也根本不清楚这些全职专家有多少在实际配置使用 IPv4 映射的 IPv6 地址的系统和网络。

有人可能会说,尽管 IPv4 映射的 IPv6 地址造成了安全危险,更改一下程序让它在实现了地址映射的系统上关闭地址映射应该没什么危害。但 Theo [8]不应该这么做,有两个理由。第一个是有许多破旧的程序,它们永远不会被修复。而实际的原因是给发行版们施加压力去默认关闭地址映射。正如他说的:“最终有人会理解这个危害是系统性的,并更改系统默认行为使之‘secure by default’。”

Linux 上的地址映射

在 Linux 系统,地址映射由一个叫做 net.ipv6.bindv6only 的 sysctl 开关控制;它默认设置为 0(启用地址映射)。管理员(或发行版们)可以通过将它设置为 1 来关闭地址映射,但在部署这样一个系统到生产环境之前最好确认软件都能正常工作。一个快速调查显示没有哪个主要发行版改变这个默认值;Debian 在 2009 年的 “squeeze” 中[9],但这个改动破坏了足够多的软件包(比如[10]),[11],它恢复到了原来的设置。看上去不少程序依赖于默认启用地址映射。

OpenBSD 有以“secure by default”的名义打破其核心系统之外的东西的传统;而 Linux 发行版们则更倾向于难以作出这样的改变。所以那些一般不愿意收到他们用户的不满的发行版们,不太可能很快对 bindv6only 的默认设置作出改变。好消息是这个功能作为默认已经很多年了,但很难找到被利用的例子。但是,正如我们都知道的,谁都无法保证这样的利用不可能发生。

via:

作者:[12]译者:校对:

本文由 [13]原创编译,荣誉推出

[1]: https://www.google.com/intl/en/ipv6/statistics.html

[2]: https://tools.ietf.org/html/rfc3493#section-3.7

[3]: https://tools.ietf.org/html/rfc2373#page-10

[4]: https://github.com/openntpd-portable/

[5]: https://lwn.net/Articles/688464/

[6]: https://tools.ietf.org/html/draft-itojun-v6ops-v4mapped-harmful-02

[7]: https://lwn.net/Articles/688465/

[8]: https://lwn.net/Articles/688466/

[9]: https://lists.debian.org/debian-devel/2009/10/msg00541.html

[10]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=560056

[11]: https://lists.debian.org/debian-devel/2010/04/msg00099.html

[12]: https://lwn.net/

[13]: https://github.com/LCTT/TranslateProject

推荐文章

点击标题或输入文章 ID 直达该文章

641

3154

3570

将文章分享给朋友是对我们最好的赞赏!

责任编辑:

Linux防火墙屏蔽ip6,Linux 发行版们应该禁用 IPv4 映射的 IPv6 地址吗?相关推荐

  1. Linux防火墙屏蔽ip6,观点|Linux 发行版们应该禁用 IPv4 映射的 IPv6 地址吗?

    从各方面来看,互联网向 IPv6 的过渡是件很缓慢的事情.不过在最近几年,可能是由于 IPv4 地址资源的枯竭,IPv6 的使用处于上升态势.相应的,开发者也有兴趣确保软件能在 IPv4 和 IPv6 ...

  2. Linux防火墙屏蔽ip6,SUSE Linux 10 SP2 关闭IPV6及防火墙

    部分一:关闭ipv6 # ip add sh 1: lo: mtu 16436 qdisc noqueue link/loopback 00:00:00:00:00:00 brd 00:00:00:0 ...

  3. Linux系统起源及主流发行版

    Linux系统起源及主流发行版 本文首先介绍了三大服务器系统,然后介绍了Linux系统的出现背景.以及主要release版本,最后介绍了Linux的文件系统和目录结构. 服务器系统,即安装在服务器上的 ...

  4. linux软件可以在所有发行版运行吗,Linux通用的跨发行版的3大软件包管理器

    前言 本文主要介绍Linux系统上通用的跨发行版的3大软件包管理器. Linux系统上的软件包管理可能非常令人困惑,尤其是对于新手,因为不同的Linux发行版使用不同的包管理系统.在大多数情况下,最令 ...

  5. 国产Linux操作系统Prayaya Q3国庆发行版发布下载linux操作系统下载

    建国国产Linux操作系统Prayaya Q3国庆发行版发布下载linux操作系统下载六十周年,我们有了自己的大炮,有了自己的飞机,有了自己的.但是却一直没有属于我们自己的操作系统.不是中国人不争气, ...

  6. 一条命令搞定Linux字体渲染——Ubuntu系发行版微软雅黑+宋体终极解决方案

    一条命令搞定Linux字体渲染--Ubuntu系发行版微软雅黑+宋体终极解决方案 转自 http://www.lulinux.com/archives/278 2014.09.10致歉与更新说明:因l ...

  7. Linux的起源与各发行版的基本知识

    随着计算机技术突飞猛进的发展,Linux成为计算机领域使用广泛的操作系统,并且越来越受计算机专业人员的青睐.下面佳和大家简单聊一下Linux: 谈到Linux必然必然要先说Unix,他们有不小的渊源. ...

  8. linux 深度定制,基于ubuntu发行版的安装界面的深度定制过程

    基于ubuntu发行版的安装界面的深度定制过程 先阅读官方帮助文档详细介绍ubuntu社区如果定制ubuntu发行版的具体步骤.最好是按照步骤执行一遍,否则会停留在表面问题. 漫长的阅读-. 1.版本 ...

  9. 仿linux界面,Gmac 10 Linux——一款仿MacOS发行版初体验

    Gmac 10 Linux顾名思义就是仿MacOS的linux发行版,Gmac以G开头的意思就是它是以Gnome桌面为基础的. 据说Gmac 10 Linux是PearOS的衍生版,因为之前试用过一次 ...

最新文章

  1. 李昱:百度产品登录协议介绍
  2. linux关于文件夹的知识,Ubuntu 7.10 系统文件夹相关知识
  3. GitHub动作简介
  4. python中方法调用方法_Python中实现结构相似的函数调用方法
  5. Vue第一部分(1):Vue简介以及第一个示例
  6. 汇编语言---GCC内联汇编
  7. 【Java思维导图】
  8. 海康SDK方式对接摄像头
  9. 写给新手看的机器学习原理--基于机器翻译
  10. 供应链金融科技产品的核心竞争力究竟是什么?
  11. 团队作业8----第二次项目冲刺(Beta阶段) 第四天
  12. spring boot启动报错: The APR based Apache Tomcat Native library which allows optimal performance
  13. RGB及sRGB与XYZ坐标转换
  14. 教育知识与能力·中学
  15. 云南毒贩越狱出逃 监狱安防漏洞都在哪儿?
  16. Bootstrap系列之卡片(Cards)
  17. DPC集群搭建手册-附考试心得
  18. RationalDMIS 7.1 程序示例
  19. html使用手机默认字体,开发移动端H5的时候,字体该不该随着手机系统字体的调整而变化?...
  20. NFC学习笔记(2)——NFC基础知识

热门文章

  1. 围棋:“我学到了一切”
  2. Pyecharts(四) —— 黑色星期五用户画像
  3. 国外常用的免费DNS域名解析服务器
  4. 国密SM算法、RSA加密算法笔记
  5. 解决svn: E160028: Commit failed (details follow): svn is out of date问题
  6. 中文乱码问题的解决方法
  7. 详解python中的面向对象(下)
  8. 第十七节:两片联级74HC595驱动16个LED灯的基本驱动程序
  9. 开票系统辅助工具 kpexport bt
  10. liverpool中文意思_Liverpool是什么意思