内核比较:2.6 内核中网络的改进 | ![]() | 英文原文 | ![]() | |
![]() | ||||
![]() |
![]() |
提供更好的安全性、电话支持和隐私保护
Robbie Williamson
(robbiew@us.ibm.com) 从隧道和更好的文件安全性到加密和隐私保护,新的 Linux 内核中引入了对网络很多方面的支持与改进。本文的内容包括,这些改进会如何影响用户,并且它们使 Linux 更为安全,更适用于企业。 相对于 2.4 版本,新的 Linux 2.6 内核具有很多改进。内核网络选项是技术进步的一个方面。尽管与网络选项相关的大部分文件都有所改善,但本文只是关注影响整个系统的主要特性的改进和增加,而不是关注特定的文件。 明确地说,在本文中我们将介绍网络文件系统 (Networking File System, NFS) 和 Internet 协议安全 (Internet Protocol Security, IPSec) 的改进。我们还将接触 TCP/IP 协议簇的两个新成员,流控制传输协议 (Stream Control Transmission Protocol, SCTP) 和 Internet 协议版本 6 (Internet Protocol version 6, IPv6)。 网络文件系统和安全 2.6 内核对网络文件系统版本 4 (NFSv4) 的引入,带来了 NFS 先前版本不曾出现过的安全性和功能性的改进。使用通用安全服务 (General Security Service, GSS) API 的远程过程调用 (remote procedure call, RPC) 实现,NFS 的用户现在可以进行安全的事务处理。设计者还引入了复合过程(将多个 RPC 组合到一个调用中)的思想。调用的组合意味着文件系统操作需要更少的 RPC,从而使 NFS 响应速度更快。 进一步减少 NFS 开销的是,NFS 现在使用了文件“句柄到路径”名称映射 (mountd),以及字节范围 (byte range) 的文件锁定 (lockd),这样减少了服务器端所需要的支撑后台进程的数量。为方便服务器实现,NFSv4 引入了额外的文件句柄类型,并提供了对文件和文件系统属性的分类。这个新的 NFS 版本还增加了对服务器迁移和复制的支持,让用户在需要的时候可以无缝地改变服务器。最后,NFSv4 现在可以让服务器授权给在缓存状态下的客户机某些职责,在那种情况下非常需要这个选项。 NFS RPC 请求可以使用密码认证的能力提供了端到端的 NFS 安全支持。NFSv4 使用 RPCSEC_GSS 框架来扩展 RPC 的基本安全。这个安全框架让 NFSv4 可以提供服务器与客户机之间的认证、完整性和隐私机制。这种联合的安全协商让客户机可以安全地与服务器的安全策略相匹配,得到满足服务器和客户机双方需求的机制。 复合过程是 NFS 在版本 4 设计中的另一个改进。先前版本的 NFS 没有方法可以让客户机生成复杂逻辑的文件系统 RPC。通过使用复合过程,客户机可以将 NFSv4 通过削减服务器所需要的非 NFS 服务器协议的数目来进行进一步的简化。用版本 4,NFS 代码可以将文件句柄映射到路径名,在旧版本中这是由 mountd 协议来做的。服务器提供了一个 root 文件句柄,对应于服务器导出的文件系统树的顶。服务器支持多文件系统,实现途径是用伪文件系统将它们联系在一起,这样就掩盖了真正的文件系统之间路径名的潜在差异。这个转换是为了支持全局分级名称空间。 此外,这个新版本的 NFS 协议支持字节范围的文件锁定,而先前版本使用的是网络锁管理器 (Network Lock Manager) 提供的 lockd 协议。文件锁定支持的重构让服务器可以用基于租约的模型来保持文件的锁状态。基本来说,客户机需要向服务器提交锁请求。如果被准许,客户机还必须在服务器指定的租约期限内更新租约。在租约过期后服务器可以释放客户机的锁。mountd 和 lockd 这两个协议的弃用,减少了运行 NFS 服务器的处理开销。 新版本的 NFS 还包括简化 NFS 服务器实现的改进。文件句柄要在它所引用的文件系统对象的生命周期内持久保持,这对一些老的 NFS 服务器实现来说是一个很难满足的要求。NFSv4 中增加了一个可变文件句柄类型,作为持久文件句柄类型的补充。使用这两种文件句柄类型,服务器实现可以具备与服务器上操作系统的文件系统相匹敌的能力。客户机可以识别出服务器提供的文件句柄的类型并为其做好准备,然后为每一个句柄设置操作。 文件和文件系统属性分类是对 NFS 的另一个补充,使服务器实现更方便。旧的 NFS 版本使用的是固定的一组属性,只是主要考虑了 UNIX 文件和文件系统。如果服务器或者客户机不支持特定的属性,它必须得尽量去模拟那个属性。版本 4 将属性分为三类:强制的、推荐的和命名的。 强制的属性 是服务器必须正确提供并描述的文件或文件系统属性的最小集合。推荐的属性 描述了不同的文件系统类型和操作系统,考虑到了操作系统之间更好的包含和互操作性。命名文件系统属性 分类是一个关联到目录或者文件的字节流,通过一个字符串名引用。客户机应用程序可以利用这些命名的属性将特定的数据关联到文件 和/或 文件系统。属性分类系统的创建,建立了一个不用对代码进行大的修订就可以添加新属性的简便方法。 为实现更好的冗余,NFSv4 支持服务器端的文件系统复制和迁移。使用一个特殊的文件系统位置属性,客户机可以向服务器进行关于文件系统位置的查询。如果出于负载平衡或者其他类似原因服务器文件系统被复制了,客户机可以得到请求的文件系统的所有位置。客户机运用自己的策略可以挂载并访问它请求的文件系统的适当位置。类似的,如果一个文件系统被迁移了,客户机根据访问旧位置时得到的错误查询文件系统的新位置,并为适应重新定位进行必要的改变。 NFSv4 的最后一个亮点是让服务器可以授权给在缓存状态下的客户机某些职责,这些于提供真正的数据完整性来说是必需的。使用 NFSv4,服务器可以为一个特定的文件提供读或写授权。如果一个客户机得到了一个文件的读授权,那么在这个授权期间,任何其它客户机都不允许写这个文件。此外,如果一个客户机得到了一个文件的写授权,那么在此授权期间没有其他客户机可以写或读这个文件。当一个客户机请求一个文件,而这个文件已授权给另一个客户机时,会发生冲突,授权可能会被服务器收回。在这种情况下,服务器会通过客户机与服务器之间的一个回调路径通知授权的用户,并收回授权。授权让客户机使用 NFS 缓存在本地进行服务操作,而不用与服务器进行实时交互,这样就减少了服务器负载和网络传输。 TCP 改进 SCTP 提供了与 TCP 类似的功能,可以确保无错的、序列化的数据传输,并在数据传输整个过程中在两个端点之间建立一个面向会话的、端到端的联系。不过,SCTP 还提供了 TCP 所不具备的功能,比如 multi-streaming 和 multi-homing,这对某些任务来说至关重要,例如 IP 网络之上的电话信号。 Multi-streaming 让数据可以分为多个独立的序列流。这样的结果是,任何一个流中的消息丢失最初只会影响这个流本身,而不会影响其他的流。SCTP 是面向消息的(相对而言,TCP 是面向字节的),支持构造独立的消息边界,支持多路数据流。如果使用 TCP 中用到的单一数据流方法,当消息丢失或者发生序列错误时,会导致更多的延迟。直到正确的序列被重新存贮之前,TCP 必须延迟向应用程序层的传输。这一数据传输的延迟会影响那些不是必须要求消息排序的应用程序的性能,比如电话信号或者有多媒体内容的网页。虽然电话信号需要对同源的(比如同一次通话)消息进行排序,但是其他相关的消息的传输并不要求序列的完整性。 包含有不同类型和大小的多媒体对象的网页,可以使用 multi-streaming 以部分有序的方法来传输这些内容,而不要用严格有序的方法。这一数据传输的灵活性会提高传输的用户可感知性。此外,在单一的 SCTP 联系中进行数据传输的思想意味着所有的流可以依赖于一个共同的流量和拥塞控制机制,这样减少了传输层所需要的工作。 Multi-homing 是使 SCTP 与传统的传输层协议不同的另一个特性。Multi-homing 允许单一的 SCTP 端点支持多个 IP 地址,并在到目标有多个路由的情况下提供冗余。TCP 和 UDP 用的是 single-homed 会话,这样当本地 LAN 访问失败会隔离开终端系统,并且整个网络内的故障会导致晢时的失败,直到 IP 路由协议重新路由传输。 Multi-homed SCTP 和冗余的 LAN 一道,考虑到了对本地端点访问的增强。多个不同前缀的地址和/或路由,再加上 SCTP multi-homing,提高了贯穿于整个网络的冗余。SCTP 的 multi-homing 特性并不提供网络负载平衡与共享功能。这个机制的关键目的是为 SCTP 之上的应用程序提供冗余的连接。SCTP 指定一个地址作为“主”地址,并使用这个地址来进行所有的数据通信。当需要重传时,数据会发送到所有的地址,以增加到达另一个端点的可能性。在主连接完全失败的情况下,所有的数据被重新路由到另一个地址。与标准高可用性中用到的方法类似,一个“心跳”信号会发送到失败的主连接,这可以用来确定原来的连接是否可以重新建立起来。 IP 安全和压缩 2.6 内核对 Internet 协议安全 (IPSec) 的引入,在 Internet 协议 (IP) 层向用户提供了安全的传输服务。IPSec 为复杂结合在一起构成 Internet 的媒介和各种应用程序提供了一个通用的解决方案。2.6 内核支持两种 IPSec 机制:认证报头 (Authentication Header, AH) 和封装的安全有效载荷 (Encapsulated Security Payload, ESP)。它们都依赖于 2.6 内核中包含的 Cryptographic API 提供的认证算法。 认证报头 (AH) 是直接添加到 IP 报头之后的附加报头,以提供包认证。包级别的认证让用户可以确保收到的包来自于特定的机器,并且它的内容在传输路径上没有被改变。这种机制没有试图隐藏或保护包的内容。AH 所提供的主要特性是包的完整性保证。要更好地利用加密技术,用户还应该再使用 ESP。 封装的安全有效载荷 (ESP) 报头有能力提供加密和包认证功能。ESP 提供的功能包括加密、认证、“反重放 (anti-replay) 服务(部分序列完整性的一种形式)”和“有限的传输流机密”。用户可以选择不用特定的认证进行加密,但是这样会让包容易受到攻击,导致让别人破坏加密。ESP 报头位于 IP 报头之后,传输模式(UDP 或者 TCP)之前,或者当使用隧道时是在封装的 IP 报头之前。 ESP 保护整个内部的 IP 包和报头。在隧道模式,内部的 IP 报头承载预设的源和最初的目的地址,外部 IP 报头包含用于跳点的 IP 地址,比如安全网关。 IP 有效载荷压缩 IPComp 协议特别适合于 IPSce 配合使用,因为当使用 IPSec 提供的和需要的附加报头时,包的大小会增加。IPComp 有两个阶段:压缩向外发送的包和解压缩收到的包。在压缩和解压缩的过程中保持了原始 IP 包的数据完整性。每个包的压缩和解压缩都是独立进行的,因为 Internet 内存的不确定性会导致包的到达顺序被打乱。 IPv6 隐私扩展 IPSec 为 IPv6 提供了与 IPv4 的相同级别的认证和安全。所包含的对 IPv6 到 IPv6 隧道的支持让两个端点之间可以进行安全无缝的通信,比如虚拟专用网络 (Virtual Private Networks, VPN) 之上的传输。 IPv6 隐私扩展这一特性尤其着重于提高 Internet 的匿名性,让用户在使用 IPv6 地址时可以选择保护他们的身份。当前的无国界的地址自动配置模式是使用设备(换句话说,是以太网卡或者移动电话)的 MAC 地址来形式化 128 位 IPv6 地址的前缀。使用不变的标识符来形式化地址使得数据可以被追踪,而这可能被意想不到的动机所利用。例如,只要知道一台机器的 MAC 地址,网络嗅探器就可以追踪哪些机器以及在什么时候哪台机器与此机器通信。 网络嗅探器的数据很容易收集,因为无论网络拓扑如何,MAC 地址始终不变,即使机器是移动电话或者膝上电脑。记录这些数据的人可以通过这些信息来追踪工作模式、位置,等等。 IPv6 隐私扩展让用户可以使用一个随机的接口标识符创建另外的 IPv6 全局地址。一台机器在特定的时间段内使用这些临时的地址,直到重新设置为另一个随机地址。重新设置后,当前的连接可以继续保持通信;不过,所有的新连接必须用新的临时地址建立通信。 结束语 NFS 用户迁移至版本 4 就可以得到期待中的提高的性能与安全。电信等级 (carier-grade) 和电话应用程序的开发人员可以使用 SCTP 提供的特性来帮助他们确保为消费者和客户提供更好的、更可靠的服务。IPSec 为那些需要通过不安全的网络传输安全数据的人和企业提供了解决方案,IPComp 通过在传输中使用较小的包而让那些人和企业可以改善 Internet 上的数据通信。对 IPv6 的增强可以为那些使用这个下一代 Ineternet 协议的人提供更好的安全性和隐私性,同时让更多 IPv4 应用程序开发人员转而使用这个改进版本的 IP。 总之,2.6 Linux 内核网络方面的增强,是向企业环境中大规模采用 Linux 的方向迈出的积极的一步。
| ![]() |