




已阅读5页,还剩43页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
i 摘 要 随着网络带宽的不断提高研究和实现 1000 兆高速高可用的 vpn 网关成为当 前网络安全的前沿研究热点本文通过在 linux2.4.18-3 核心 tcp/ip 协议栈的多个关 键点上挂接 hook 函数完成 ipsec 协议的封装加密和认证的功能实现基于隧道 模式的 vpn 网关并加载硬件加密卡以提高吞吐量等技术来实现上述目的 在百兆环境下利用核心线程驱动加密卡核心线程特有的调度时机决定了报文处 理时的不可剥夺减少了进程切换cpu 的大部分时间用于网络报文的处理确保了 系统吞吐量没有时间片概念的 sched_fifo 调度策略在系统中存在众多进程时 可以被优先调度 在千兆环境下利用中断底半部 bh 驱动加密卡网卡软中断 net_rx_softirq 与加密卡中断 bh 在 linux 系统中的相同优先处理级别避免了采用核心线程方案时 核心线程调度执行时间过少导致的低吞吐量 net_rx_softirq 与 bh 对 cpu 的竞 争使得加密之前和之后的两部分处理都不会成为系统的瓶颈在网络流量不是很大 时让加密卡优先处理 ike数据保证 ike及时的协商并将协商的密钥交给 ipsec 在 ipsec 模块初始化时按照设置的最大队列长度预先分配缓冲队列并在运行 期绕过系统的内存管理增加系统重组队列的内存容量减少过多报文重组造成的报 文丢弃 利用 icmp 向源主机发送由于要分片造成的目的不可达消息 减少报文分片 本机外发报文则根据加密规则相应减小 mtu 采用多个加密卡并行处理高速缓存的增加提高了加密卡的并行度报文按顺序 入队列并且先来先处理保证报文传送的有序性 通过安全性分析和系统吞吐量测试证明了这两种方案都是可行的在两种工作 环境下 vpn 网关都可以达到较高的吞吐量 关键词 虚拟专用网高性能核心线程软中断 ii abstract the vpn gateway based on tunnel model can be successfully fulfilled through inserting some hook functions in the key points of tcp/ip protocols provided by linux2.4.18 kernels netfilter mechanism. the system satisfies ipsec protocol with the functions of encapsulation, encryption, decryption and authentication. in order to increase performance encrypting card is employed in the system. system makes use of kernel thread to drive the encrypting card in the environment of 100m. with the special scheduling mechanism, kernel thread cant be preempted by other processes while treating with network packets. in this way, kernel thread occupies the majority of cpu time. kernel thread with sched_fifo policy will be scheduled prior to other processes. bottom half routines are used to drive the encrypting card when the network card owns 1000m performance. net_rx_softirq has same priority to encrypting cards bh routines. this prevents kernel thread from holding too little cpu time which will inevitably be a bottleneck of vpn gateway. system deals with data of ike prior to net_rx_softirq to guarantee ike negotiates timely and delivers the key to ipsec module. system allocates memory space according to the maximum array length in advance during the period of ipsecs initialization and bypasses memory management while system is running. system increases memory of recomposing array to decrease the number of discarded packets. ipsec modules sends icmp messages to remote sources host which means destination unreachable resulting from fragment. local host decreases mtu according to encrypting regulation. both aims at decreasing the occurrence of packet slice. vpn employs two encrypting cards to parallel dispose of packets adopting fifo policy. the increase of cache enhances the degree of parallel. the test data proves that the vpn can arrive at high performance applying appropriate driving methods in 100m or 1000m environments. key words: vpn, high performance, kernel thread, soft interrupt 1 1 绪论 1.1 研究背景 1.1.1 网络的安全性 如今internet已经成为信息化社会发展的重要基础它已深入到国家的政治经 济文教等诸多领域tcp/ip协议族是internet的基础协议1最初设计在互相信任的 通信基础上没有考虑网络安全问题因而造成了协议自身安全的脆弱性tcp/ip协 议的安全脆弱性主要表现在 1缺乏有效的认证机制由于tcp/ip依靠ip地址进行主机确认因此网络上 的任何一台主机都可以通过假冒一个ip产生看起来好像是来自另外一个源点的消 息从而使协议缺乏验证通信双方真实性的能力 2缺乏有效的保密机制tcp/ip没有对传输的数据流进行加密所有的数据 都是以明文方式传送因此也就不能保护网上数据的隐私性 3不能提供对数据流的完整性保护tcp/ip没有提供对用户数据的完整性校 验数据在传输过程中一旦被篡改接受方将很难察觉 4协议自身设计的某些细节和实现中的一些安全漏洞也会引起各种攻击 因此为了保护网络数据尤其是私有信息传输的安全性针对tcp/ip的上述缺陷 提出了采用认证授权加密验证和数字签名等安全机制来保障信息在传输过程中 的安全 1 认证是对用户的身份进行核实2- 4确认对方就是其所宣称的那个人的过程 最通常的认证手段是用户名口令认证 而比较安全可靠的方式则是采用pki认证体系 2授权是对认证的用户授予在系统中行使何种权力的过程 3加密是将可读数据转换成为一种称为密文的不可理解的形式的过程5- 6用 于加密的算法主要有两种对称加密和公开密钥密码技术 4验证是发送端对消息产生一个数字摘要接收端也对消息产生一个数字摘 要并检查两个摘要是否一致以确认数据是否被篡改的过程 5数字签名是利用pki认证体系对消息的摘要用私钥进行加密形成数字指纹 以确保其唯一性合法性的手段 2 1.1.2 vpn技术概要 虛拟专用网 vpn (virtual private network)是一种基于交换技术的网络7-17利用 不可靠的公用开放网络(如 ip 网络)作为基本的传输媒介通过隧道技术将物理位置独 立分散的逻辑地址连接在一起通过上层协议附加的多种技术向最终用户提供类 似于专用网络的安全服务技术vpn 的安全性通过加密和认证机制来实现采用复杂 的算法来加密传输的作息使得敏感数据不会被窃听从而弥补 tcp/ip 协议在安全 性方面的不足 vpn 处理过程大致如下 1要保护的主机发送明文信息到连接公共网络的vpn网关 2vpn网关根据系统设置的规则确定是否需要对数据进行加密或让数据直 接通过 3对需要加密的数据vpn网关对整个数据进行加密并附上数字签名 4vpn网关加上新的数据报头其中包括目的地vpn网关需要的安全信息和 一些初始化参数 5vpn网关对加密后的数据认证信息和源ip地址目标vpn网关ip地址进行 重新封装重新封装后的数据包通过虚拟通道在公网上传输 6当数据包到达目标vpn网关时数据包被解封装数字签名被核对无误后 数据包被解密 1.2 国内外概况 目前国内外已有多家厂商开发出了基于ipsec的vpn 产品18下面我们就简单介 绍一下bay公司的vpn产品主要是bay contivity extranet switch该产品采用rsa 数字签名和radius认证方式使用的是des3des加密算法和hmac-sha1 hmac-md5哈希算法提供多种管理方式同时还具有caprsvp 等qos服务 netscreen公司的基于ipsec的vpn产品加密算法为des和3des摘要算法为 md5 密钥交换为ike 同时基于pki x509证书作为身份认证的手段 此外checkpoint 公司的firewall-1 系列产品cisco公司和intel公司等都有相关的vpn 产品或功能甚 至microsoftcisco等公司结合自己的产品提出了相应的协议 尽管vpn是一个比较成熟的技术 但是基于ipsec的网关式vpn的吞吐量一般都很 3 低适用于千兆环境下的vpn网关很少如何提高其吞吐量满足市场需求是vpn产品 的迫切需要 1.3 主要研究工作 1分析如何在linux系统上建立vpn网关实现ipsec协议要求的对数据加密和 认证 2在百兆环境下利用核心线程驱动vpn网关的加密卡 3在千兆环境下利用中断底半部驱动vpn网关的加密卡 4分析在这两种网络环境下两种驱动方式的优点和缺点并针对各自的缺 点分析运用哪些方法可进一步提高系统吞吐量并加以实现 5在vpn网关中使用两块加密卡实现加解密的并行处理分析使用多个加密 卡的可行性 4 2 vpn在linux系统的实现 rfc240924022406 等协议规定了 ipsec 协议的具体实现本 vpn 也是基本 参照以上规定来实现的vpn 的实现必须建立在一个安全性高可靠性好的操作系统 上如果操作系统本身存在安全隐患很容易侵入 vpn 主机绕开访问权限设置 直接破坏或窃取各种信息资源系统采用的是 redhat linux7.3 操作系统核心为 2.4.18-3linux是源代码开放的操作系统其特点是安全性好,可靠性高支持硬件丰 富具有良好的可扩展性 2.1 vpn网关模块 vpn 网关系统的主要模块包括 ike模块ipsec 模块加解密模块和辅助应用程 序 本论文讨论linux内核的特殊环境下三个模块的衔接问题 讨论 linux系统对vpn 网关的支持主要是它提供的各种机制并合理地利用这些机制分析 vpn 在不同 的网络环境及硬件前提下的适应性和扩展性在此基础上实现一个高性能的 vpn图 2.1 是 vpn 网关系统的主要模块的相互关系和实现的功能框架 用户态 应用程序 ike模块 linux内核 ipsec模块 加解密模块 核心态 图 2.1 vpn 网关系统模块框架 5 ipsec模块和加解密模块位于linux系统的核心而ike模块和辅助应用程序处于 用户态加解密模块对数据esp加密19- 21并对报文ah认证22- 24加解密模块被ipsec 模块调用ike模块也调用加解密模块主要用于密钥的协商加密算法是不断演变 的加密算法被攻破的事件也不断增多为了满足未来的需要实现框架遵从安全机 制和加密算法分离的原则ipsec 核心代码不涉及具体的加密算法新的加密算法可 以很容易地加入进来而不必对核心代码进行大的改动设计一套独立的通用的密钥管 理接口非常重要它可以在不改变ipsec 其他部分的情况下替换密钥管理的方式而 且通用的接口方式还可以使得不同的密钥管理手段同时起作用提高系统的模块化功 能ipsec模块和加解密模块与linux系统内核的如何高效地交互就是本论文的重点 2.2 ipsec协议 ipsec 是由 ietf 开发的一套 internet 安全协议标准 定义了 12 个 rfc 这些 rfc 对 ipsec 的各方面都进行了定义体系密钥管理基本协议以及为了实现基本协 议进行的强制转码ipsec 是第三层隧道协议在网络层实现数据封装和已有的 tcp/ip 实施集成在一起用于报文头与加密子系统进行交互以便决定为数据包提供 哪些安全保护 ipsec 可为运行于 ip 层之上的任何一种协议提供保护 比如 tcp udp 和 icmp 等 2.2.1 ipsec安全结构 ip安全文献地图ip security document roadmap草案将所有ipsec工作组的 ipsec文献进行了分类ipsec安全结构如图2.2 所示ipsec结构的第一个主要的部 分是安全结构internet草案文件ip协议的安全结构描述了用于ipv4和ipv6 的 安全机制它提供了对ipsec包的介绍并且描述了结构的每一个组件ipsec的安全 协议由三个主要的协议组成它由第二层以及加密和认证算法组成esp提供了加 密服务ah则提供数据报认证服务而且esp和ah协议都有一个用于确定特定的 算法和可选功能的支持文献集internet安全协商和密钥管理协议isakmp是 ipsec的另一个主要组件 isakmp提供了用于应用层服务的通用格式 它支持ipsec 协商方的密钥管理需求ietf设计了oakley密钥确定协议key determination protocol来实施isakmp功能这个协议在通信系统之间建立一个安全联系它 是一个产生和交换ipsec密钥材料并且协调ipsec参数的框架图2.2中的解释域 6 doi(domain of interpretation)将所有的ipsec小组的文献捆绑在一起它可以被认为 是所有的ipsec安全参数的主数据库这些参数可以被与ipsec服务相关的系统进行 调用 ipsec体系 esp协议ah协议 加密算法认证算法 解释域(doi) ike 安全策略 图2.2 ipsec安全结构 2.2.2 封装安全有效载荷协议(esp) ipsec的隧道协议开始于rfc1827即ip封装安全有效载荷esp它定义了一 种通用的数据报封装的方法图2.3是ipv4封装esp报文的格式 esp头ip头封装载荷 下一层协议号50 (50) 图2.3 esp报文格式 iana分配给esp的协议号为50紧接在esp包头前面的ip包头必须在它的下一个 7 包头域ipv6或下一个协议域ipv4中包含数值50esp通过对要保护的数据进 行加密以及将它放置在ip封装安全有效载荷的有效负载部分来提供机密性和完整 性如果采用适当的算法和模式的话还可以提供验证功能esp协议是设计以两种 模式工作的隧道tunneling模式传输transport模式两者的区别在于ip数 据报的esp负载部分的内容不同 在隧道模式中 整个ip数据报都在esp负载中进行封 装和加密当这完成以后真正的ip源地址和目的地址都可以被隐藏为internet发送的 普通数据 这种模式的一种典型用法就是在防火墙-防火墙之间通过虚拟专用网的连接 时进行的主机或拓扑隐藏在传输模式中只有更高层协议帧tcpudpicmp 等被放到加密后的ip数据报的esp负载部分在这种模式中源和目的地址以及所 有的ip包头域都是不加密发送的 完整的esp 包头格式如图2.4所示 安全参数索引spi 序列号 bit031 填充0255字节 负载数据长度可变 填充长度下一报头 认证数据长度可变 图2.4 完整的esp包头格式 esp包头上具有一个灵活的协议这允许它使用不同的加密算法ipsec要求在所 有的esp实现中使用一个通用的缺省算法即des-cbc算法然而建立一个ipsec会话 的两个或更多的系统可以协调使用其它的算法 目前 esp支持的可选算法包括3des rc5ideacastblowfish和rc4总之使用esp不仅可以提供对数据的机密 性完整性和验证服务而且由于数据报在加密前进行了填充在一定程度上又可以 抵御传输量分析的攻击 2.2.3 验证头协议ah ah 是一个用于为ip 数据报提供完整性和认证的机制 完整性保证数据报不被无 8 意的或恶意的方式改变而认证则验证数据的来源主机用户网络等ah本 身其实并不支持任何形式的加密它不能保护通过internet 发送的数据的隐秘性当 全部功能实现后它将通过认证ip 包并且减少中间人攻击率来提供更好的安全 服务ah 使用的包头号放在标准的ipv4 和ipv6 包头和下一个高层协议帧如tcp udpicmpesp 等之间ah 包头在ipv4 中的实现是可选的并且有一个相对 简单的ip 数据报格式格式如图2.5所示 ah头ip头高层协议帧 下一层协议号51 (51) 图2.5 ah报文格式 iana 分配给ah 的协议号为51 这意味着紧挨在ah 包头前面的ip 包头必须在 它的下一个包头域ipv6或下一个协议域ipv4中包含数值51 esp 不保护在esp 有效负载前面的外部ip 报头而ah 协议则尽可能多的保护 外部ip 报头它通过在整个ip 数据报中实施一个消息摘要计算来提供完整性和认证 服务一个消息文摘就是一个特定的单向数据函数它能够创建数据报的唯一的数字 指纹消息摘要算法的输出结果放到ah 包头的认证数据(authentication data)区而 接收方对接收到的数据报作同样的摘要处理如果两次计算的结果一样就说明数据 是完整的没有被篡改数据认证可以通过在计算消息摘要的过程中使用密钥来保证 hmac 方法使用基本的md5 算法来计算消息摘要但是以64 比特的数据分组而不 是以整个数据的分组来计算的它在实施摘要计算时使用了一个密钥只有通信系统 知道在rfc2104 文献中对hmac 算法进行了详细的描述 完整的ah 包头格式如图2.6所示ah 协议能够使用多种认证算法既包括现在 已有的算法也包括未来将使用的算法ipsec 为每一个认证算法分配唯一的数字 用于在通信系统的协调过程中识别身份但为了保证ipsec 实体间的最小互用性目 前有两个认证算法hmac-md5 和hmac-sha1 已经被定义hmac 表示 散列信 息认证码(hashed message authentication code)md5 是消息文摘5 算法 sha1 是 安全散列算法1secure hash algorithm version 1 9 下一包头类型认证数据域长度保留字段 安全参数索引spi 序列号 bit081631 认证数据长度可变 图2.6 完整的ah包头格式 2.2.4 安全联盟(sa) sa 是 ipsec 标准中最重要的内容25- 26是实现安全服务的基础,它定义了一个包 含了 ip 封包加密解密和认证的相关信息的安全环境”所谓安全联盟是指安全服 务与它服务的载体之间的一个连接”ah 和 esp 都需要使用 sa而 ike的主要功 能就是 sa 的建立和维护只要实现 ah 和 esp 都必须提供对 sa 的支持其功能如 下 1码功能提供加密或认证或者两者同时提供 2密码演算法例如加解密使用des(或triple-des)认证使用md5 3密码演算法中所使用的密钥密钥的生命周期等 4是否有初始化矢量 5sa的生命周期 sa 可以使用安全参数索引 spi 来描述也就是一个 spi 值决定一个特定的 sa 而主机的 ip 地址与 spi 以及安全协议则定义了唯一的 sasa 是单向的,若要在两个 主机间建立安全通信则需要两个 sa,每一方向一个当一方主机发送一个要求保护的 数据包时 便在数据库中查询 sa 并用指定的处理及协议把 sa 中的 spi 插入到 ipsec 头里而另一方主机收到该包时则在数据库中按 spi安全协议和目标地址来查询 sa 根据判断结果逆向处理报文 通信双方如果要用 ipsec 建立一条安全的传输通路 需要事先协商好将要采用的安全策略包括使用的加密算法密钥密钥的生存期等 当双方协商好使用的安全策略后我们就说双方建立了一个 sasa 就是能向其上的 数据传输提供某种 ipsec 安全保障的一个简单连接可以由 ah 或 esp 提供当给定 了一个 sa就确定了 ipsec 要执行的处理如加密认证等 10 2.2.5 internet 密钥交换协议ike ike协议是oakley 和skeme 协议的一种混合27- 29并在由isakmp 规定的一个 框架内运作isakmp 是internet 安全联盟和密钥管理协议的简称isakmp定 义了包格式重发计数器以及消息构件要求事实上它定义了整套加密通信语言 oakley 和skeme 定义了通信双方建立一个共享的验证密钥所必须采取的步骤 因此 ike 唯一的用途就是在ipsec 通信双方之间建立起共享安全参数及验证过的密钥 ike 分两个阶段 第一阶段进行身份认证和isakmp 的安全联盟即ike sa 的协 商第二阶段则利用第一阶段协商的安全联盟来进行信息保护并为ipsec 等安全协 议进行安全联盟即ipsec sa 的协商ike 采用了安全联盟的概念但ike sa的 物理构建方式却与ipsec sa 不同ike sa 定义了双方的通信形式例如用那种算法 来加密ike 通信怎样对远程通信方的身份进行验证等而ipsec sa 则定义了对通 信数据进行加密的算法和密钥等信息 在第一个阶段双方建立一个共享秘密时使用了一个diffie-hellman 交换dh 交换完成以后通信双方就建立了一个共享秘密只是尚未验证通过因此ike 交换 的下一步便是对共享秘密进行验证 同时还要对协商好的ike sa 本身进行验证ike 定义了五种验证方法预共享密钥使用dss 的数字签名使用rsa 的数字签名 使用rsa 进行加密的nonce 交换以及用加密nonce 进行的一种校订验证方法经 过验证后就建立一个保密和验证无误的通信信道为双方的下一步ike 通信提供机 密性消息完整性以及验证服务 阶段一完成以后阶段二便开始了在这个阶段中要创建ipsec sa我们称这个 阶段的模式为快速模式在默认情况下ipsec sa 使用的密钥是ike 秘密状态衍生 的伪随机nonce 在快速模式下进行交换并与秘密状态进行散列处理以生成密钥 并确保所有的sa 都拥有独一无二的密钥但所有这样的密钥均不具备完美向前保 护pfs的特性因为它们都是从同一个根密钥衍生出来的为了提供pfs dh公共值以及衍生出它们的那个组都要和nonce 一道进行交换 同时还要交换具体的 ipsec sa 协商参数最后用得到的密码来生成ipsec sa 以便确保所谓的完美向前 保护 为正确实施ike 需要遵守三份文档基本isakmp 规范rfc2408ipsec 解 释域rfc2407ike 规范rfc2409 11 2.3 linux系统提供的netfilter框架 linux 2.4.x内核相对于 2.2.x在 ip 协议栈部分有比较大的改动 netfilter 更是其 一大特色30- 34它功能强大并且与内核完美结合因此迅速成为 linux平台下进行 网络应用扩展的主要利器 这些扩展不仅包括防火墙的实现(这只是 netfilter 的基本功 能)还包括各种报文处理工作如报文加密报文分类统计等netfilter 框架定义 了协议栈中的检查点和检查点上引用的数据结构以及对这些数据结构引用的过程 ipv4 协议栈中的检查点的安排非常合理避免在实现各功能点时不必要的函数调用 架构可扩展性很强把功能实现和框架分离使功能实现时不必修改框架而只是注册 相应的结构就可完成首先看看在检查点上引用的数据结构组织如图 2.7 所示 nproto list_head nf_hook_ops 图 2.7 nf_hook_ops 数据结构的组织 nf_hook_ops 就是在检查点上引用的结构每个协议栈预先定义的 8 个链表数组 用于保存这些结构这些链表与协议栈中的检查点一一对应在实际的应用中这 8 个链表并不一定都被使用在 ipv4 中只定义了 5 个检查点分别对应前 5 个链表 在 linux2.4.18 之后的实现中在五个检查点上都注册了 nf_hook_ops 结构 nf_hook_ops 结构如下 struct nf_hook_ops /*linux/netfilter.h */ struct list_head list; /*连接件 */ nf_hookfn hook; /*函数指针 */ int pf; /*结构对应的协议栈号 */ int hooknum; /*结构对应的检查点号 */ 12 int priority; /*结构的优先值 */ ; nf_register_hook函数将 nf_hook_ops结构注册到这些链表上链表的索引由结构 中 hooknum指定同一链表上的结构按优先值由小到大排列在检查点上引用这些结 构时以它们在链表上的先后顺序引用 检查点由宏 nf_hook 定义 在检查点上 函数 nf_hook_slow调用函数 nf_iterate 遍历对应链表并调用链表上的结构 nf_hook_ops 中定义的函数如果结构中的函数返 回 nf_accept 则继续调用下一个结构中的函数 如果结构中的函数返回 nf_drop 或 nf_stolen 或 nf_queue则将这个值返回给 nf_hook_slow如果结构中的函 数返回 nf_repeat,则重复调用此结构上的函数如果到了链表上的最后一个结构 则把这个结构中函数的返回值返回给 nf_hook_slow 在 nf_hook_slow中判断 nf_iterate 的返回值如果是 nf_accept则允许数据包通过并将数据包传递给协议栈中的 下一个函数 如果是nf_drop 则释放数据包 协议栈流程中断 如果是nf_stolen 同样中断协议栈的流程但是没有释放这个数据包如果是 nf_queue则将这个 包发送到用户空间处理同时中断协议栈的流程 1route(1)34 2 5 route(2) 链路层 传输层 检查点路由判断 i p 层 图 2.8 ipv4 中的检查点 检查点分布在协议栈的流程中实现 vpn 网关可能需要在多个检查点上注册相 13 应的结构图 2.8 是 ipv4 中的各个检查点检查点的名称如表 2.1 表 2.1 ipv4 中检查点的名称 检查点编号 检查点名称 检查点所在文件名 1 nf_ip_pre_routing ip_input.c 2 nf_ip_local_in ip_input.c 3 nf_ip_forward ip_forward.c 4 nf_ip_post_routing ip_output.c 5 nf_ip_local_out ip_output.c route(1)处对收到的包做路由查找并判断这个包是需要转发的包还是发往本机 上层的包 route(2)处查找本机发出包的路由 nf_ip_pre_routing 处对所有传入 ip 层的数据包进行检查在这之前有关 数据包的版本长度校验和等正确性检查已经完成在报文作路由以前执行 nf_ip_local_in 对发往本机上层的数据包进行检查 nf_ip_forward 处检查需要转发的数据包 nf_ip_post_routing处对所有向链路层传递的数据包进行检查 nf_ip_local_out 对本机发出的包进行检查 2.4 ipsec在netfilter中hook点的选择 2.4.1 ipsec接收处理模块的hook点 netfilter 有两个进入报文的 hook 点一个是 nf_ip_pre_routing一个是 nf_ip_local_in由于 ipsec 对进入的报文进行解密处理后 就还原了最初的报文 因此需要对报文进行转发如果把 ipsec 接受处理放在 nf_ip_local_in 上那么 报文首先经过路由检查然后交给 ipsecipsec 解密后解密后的报文大部分都不是 发往本机的就必须重新调用 netif_rx函数交给 ip 层然后经过路由转发出去从 而导致流程回转 路由选择本身就是很花费时间的 现在一个报文经过两次路由检查 效率会很低 但是如果把 ipsec 接受处理放在 nf_ip_pre_routing上 那么报文首 先交给 ipsecipsec 解密后还原为最初的报文最初的报文然后经过路由表检查 决定后续的处理流程非常连贯如果有必要还原后的报文还可以直接进行 ipsec 的发送处理实现级连的 vpn 隧道因此选择 ipsec 接收处理模块的 hook 点为 14 nf_ip_pre_routing 2.4.2 ipsec发送处理模块的hook点 对 于 外 出 的 报 文 而 言 可 以 在 三 个 hook点 上 进 行 截 获分 别 为 nf_ip_pre_routingnf_ip_forward 和 nf_ip_post_routing如果 ipsec 在 nf_ip_forward 和 nf_ip_post_routing 上进行截获外出报文那么对需要 进行加密的报文加密完成后因为目的 ip 的改变就要对报文重新路由因此必须 调用 netif_rx函数 从而导致流程的跳转 如果在 nf_ip_pre_routing上进行截获 那么对于外出需要加密的报文ipsec 加密后就可以直接进行路由转发从而流程 简单明了所以选择 ipsec 发送处理模块的 hook 点为 nf_ip_pre_routing 2.4.3 ipsec本机发送处理模块的hook点 对于本机外出的报文而言可以在两个 hook 点上进行截获分别为 nf_ip_local_outnf_ip_post_routing如果ipsec在 nf_ip_post_routing上进行截获外出报文就会检查所有的外出报文系统负荷 太大如果 ipsec 在 nf_ip_local_out 上进行截获外出报文那么就对报文进行 加密封装由于此时报文已经无法按照正常的路径进行路由和分片发送因此必须主 动调用开始路由前的协议栈函数 ip_rcv_finish 跳转到 nf_ip_pre_routing之后继 续处理这虽然导致了流程的跳转但是对 vpn 网关来说本机外发报文是非常少的 不会对系统带来太大的影响因此选择 ipsec 本机发送处理模块的 hook 点为 nf_ip_local_out 2.4.4 hook函数对报文的处理 hook 点选择完毕后就在这三 hook 点上注册相应的结构为了将 ipsec 协 议挂接到系统内核中设计了如下的结构 struct nf_hook_ops ipsec_input_ops = null, null, ipsec_input_hook, pf_inet, nf_ip_pre_routing, nf_ip_pri_filter-10 ; struct nf_hook_ops ipsec_output_ops = 15 null, null, ipsec_output_hook, pf_inet, nf_ip_pre_routing, nf_ip_pri_filter-5 ; struct nf_hook_ops ipsec_localout_ops = null, null,ipsec_localout_hook, pf_inet, nf_ip_local_out, nf_ip_pri_filter-5 ; 然后调用 nf_register_hook( nf_register_hook( nf_register_hook(挂接到系统中报文在 tcp/ip 协议栈 中处理时这些结构中的 hook 函数已成为协议栈的一部分会被系统调用来处理 报文 1esp处理外出报文数据包的过程 传输模式中esp 头紧跟在 ip 头之后然后填充 esp 头的相应字段隧道模式 中esp 头加在 ip 包前面在 esp 头的前面要新增一个 ip 头并设置相应的字段 不管哪种模式接下来的步骤都是相同的调用加解密模块对包进行加密和验证 并将验证的结果插入 esp 尾部的身份验证数据字段中最后重新计算位于 esp 前面的 ip 头的校验和 2esp 处理进入报文数据包的过程 如果收到的 ipsec 包是一个分片必须把它保留下来直到这个包的其余部分收 到完为止收到 esp 包后进行的第一步是检查处理这个包是否合法如果不合法 这个包就被丢弃一旦验证通过后就可以开始包的处理首先检查序列号如果这 个包的序列号是有效的即它不是一个重复包也不出现在序列号窗口的右边就开 始进行处理然后对这个包进行身份验证完整的 esp 包除身份验证数据进行验 证如其结果与身份验证数据相符则表示通过了身份验证接下来是解密判 定解密是否成功的一个简单办法是检验其填充身份验证和解密成功后就可以对数据 包进行初步的有效性检验如果这个包与要求的模式不符就必须将其丢弃现在 可对这个没有 esp 头的包进行一番改造对传输模式而言上层协议和 ip 头是同步 16 的esp 头的下一头字段被复制到 ip 头的协议字段中并计算出一个新的 ip 校验和 而对于隧道模式而言就抛开外部 ip 头和 esp 头我们需要的是解开这个封装的包 进行另一个有效性检验如果这个包与所要求的地址端口协议不符必须将它丢 弃为进行下一步处理可将一个经过改造和验证的包转发出去如果是传输模式的 包就会交给一个高一级的协议层由它们对这个包进行处理如果是一个隧道模式 包就会重新插入到 ip 处理流中继续转发到它的最终目的地 3ah 处理外出报文数据包的过程 ah 头的各字段填入适当的值由于 ah 将安全保护扩展到外部 ip 头因此在形 成身份验证数据之前 必须将 ip 头中的不定字段清 0 身份验证程序对整个 ip 包 包 括 ah 头进行计算由于不定字段已设置为 0它们就不会包含在该计算中接下 来结果数据被复制到身份验证数据字段中ip 头的不定字段可根据 ip 处理的 不同加以填充 4ah处理进入报文数据包的过程 如果一个受安全保护的包在被接收之前分成了几段 就要求 ah 输入处理之前 对 这些分片都必须进行重新组合 处理 ipsec包的第一件事是进行抗重播检查 用于确定 这个包是新收到的还是以前收到的如果检查失败这个包就会丢弃接下来检查完 整性检查值ivc首先将 ah 头的验证数据字段中的 ivc 值保存下来然后 将那么字段清 0ip 中的所有不定字段也被清 0随后对整个数据包应用“身份验证” 并将获得的摘要与保存下来的 ivc 值进行比较如相符ip 包就通过了身份验证否 则便将该包丢弃ivc 一经验证如有必要滑动接收窗口的序列号可以递增这 样便结束了一次 ah 处理过程随后保存下来 ip 头便可恢复此时不定字段已经置 零能防止对其做下一步处理而且验证通过的整个数据包可传给下一步的 ip处理 esp 和 ah 两种协议均提供了抗重播服务为了抵御不怀好意的人发起的重播攻 击ipsec 数据包中使用了一个唯一的且单调递增的序列号以及一个滑动的接收窗 口窗口最左端及对应窗口起始位置的序列号而最右端对应将来接收的第窗口长 度”个数据包接收到的数据包必须是新的且必须落在窗口内部或靠在窗口右侧 否则便将其丢弃只要接收到的数据包在窗口内是从未出现过的我们便认为它是 新的假如收到的一个数据包靠在窗口右侧那么只要它未能通过真实性测试也会 将其丢弃如果通过了真实性检查窗口便会向右移动将那个数据包包括进来数 17 据包的接收顺序可能被打乱但仍会得到正确的处理如果接收迟的数据包也就是 说在一个有效的数据包之后接收但却落在左侧则会被丢弃除非使得窗口向 前滑动的那个包通过了真实性检查否则窗口不会真正前进的反之攻击者便可 生成伪造的包为其植入很大的序列号令窗口错误地移至无效序列号的范围之外 造成有效数据包被错误地丢弃 利用 hook 机制还可以进行访问控制 虽然 vpn 网关中访问控制是必不可少的 但本文只讨论系统性能当然访问控制的查找匹配操作对系统性能还是有影响的 2.5 系统测试拓扑 vpn 的性能取决于两个方面一方面是 ip 公网的传送速度另一方面是两端的 加密解密以及 hash计算和鉴别的速度加密和认证会消耗系统资源并降低系统的 吞吐量从而影响 vpn 的性能为了便于开发分析和测试本文给出一个只包含两 台主机和两个 vpn网关的简单拓扑 第一个网关是接收网关 对数据加密并进行 hash 计算第二个网关是发送网关进行 hash 认证并解密两台终端分别进行数据报文 的发送和接收并对数据报文的收发情况进行统计系统性能的分析都建立在这些统 计数据上网络拓扑如图 2.9 所示 vpn发送网关vpn接收网关接收主机发送主机 图 2.9 测试网络拓扑 2.6 本章小结 本章首先介绍了 vpn 网关中的处理模块以及它们之间的调用关系然后介绍 了 linux 系统提供的 netfilter网络安全框架的数据结构和实现以及如何利用它所提 供的功能接着分析了 ipsec 模块中选取 netfilter框架中的 hook 点以及选取时的 利与弊最后给出了系统性能测试时的网络拓扑和各个设备的功能 18 3 百兆环境核心线程驱动 加解密过程对网关性能的影响非常大很可能就会成为系统的瓶颈在百兆环境 下如果采用纯软件进行加解密处理网关吞吐量不到 40 兆远远达不到建立高性 能 vpn 网关的要求为了加快对数据的加解密处理在 vpn 网关中加入了硬件加密 卡 3.1 硬件加密卡介绍 由于加密卡是一个涉及到国家敏感信息的产品所以国内也在大力发展本土的 加密卡产品目前国内加密卡主要由接口控制逻辑dsp 处理器及附属电路组成处 理速度一般都比较低采用 isa总线结构的就更低了采用 pci 总线接口的处理速度 较高的密码卡加解密时吞吐能力基本不受 pci 总线限制能够完成数据加解密散 列数字签名认证随机数的生成等 vpn 所需要的安全功能32 位数据总线也与 操作系统一致但处于核心的算法芯片的频率还是比较低 加密卡除了必须的控制端口外几乎没有 i/o 空间 也没有一个辅助性的协处理器 不能象高速网卡一样可以在接收到多个报文后才向 cpu 发出一个中断请求然后 交给操作系统处理这样对于每个报文的处理都应该有一个中断的请求响应分 发处理返回的过程linux 系统作为一个通用的操作系统将所有这些中断过程 都纳入一个总体的框架中进行整体的考虑所以这个过程很复杂降低了系统的效 率这样交给加密卡的所有数据的处理过程都完全地串行化了 随着 cpu 的处理能力和总线频率的增加以及网卡速度的提高加密卡的性能成 为整个系统的关键网络报文的处理和 ike报文的加解密过程都交给加密卡去处理 加密卡一次 dma 处理数据越多宏观上的吞吐量越大加密卡处理的主要是网络报 文对于不同长度的报文都有不同的吞吐量所需要的最大的吞吐量就是在报文长度 为 1500 时的吞吐量当然最重要的是系统的整体性能而不仅仅是加密卡的性能不 能孤立地看待因为操作系统本身的开销加入系统的 ipsec 模块和驱动模块的开销 都是很大的网关系统采用的是 linux操作系统对于加密卡驱动和对多个加密卡的 调度也要结合 linux系统整体考虑 19 3.2 报文加解密处理流程 加密卡由加解密模块直接驱动图 3.1 是报文处理流程图 加解密处理 ipsec缓冲队列 网卡接收队列 网卡发送队列 发送处理接收处理 硬卡 图 3.1 报文处理流程图 网卡收到报文后其中断处理例程将报文插入其接收缓冲队列真正的报文接收 处理是由软中断 net_rx_softirq 执行的先前注册的 hook 函数就是在此部分 被调用执行的net_rx_softirq 完成接收处理后就将报文插入 ipsec 缓冲队列 建立此缓冲队列是必须的这不仅仅因为网卡接收速度大于加密卡的处理速度 net_rx_softirq 在 处 理 网 卡 接 收 队 列 时 连 续 执 行的直 到 队 列 为 空 net_rx_softirq 将一个报文交给加密卡后接着处理第二个报文此时加密卡对 第一个报文的处理可能还没有完成加密卡没有额外的 i/o 存储空间不能再次往加 密卡输入数据和控制信息因此设置此缓冲队列所有的报文都要入此队列来不及 处理的报文就在此缓存加解密模块完成数据处理后交给发送处理单元完成后就 将报文交给网卡发送出去 3.3 核心线程的创建 linux 内核函数 kernel_thread 创建核心线程kernel_thread 不能像进程一样执行 一个可执行映象文件 而只能执行内核中的一个函数 实际上这只是对系统调用 clone 的包装系统调用时的调用号为_nr_clone(2)核心线程本质上也是进程也有进程 控制块只不过它没有用户空间核心线程在加载 ipsec 模块时创建创建成功后就 插入就绪队列等待系统调度 20 一般核心线程都有一个无限循环当所需的资源缺乏时睡
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 重庆工信职业学院招聘考试真题2024
- 2024年宝鸡市市直机关遴选考试真题
- 全球气候变化对全球农业生物多样性影响趋势分析报告
- 2025水产供应合同模板
- 产品展会活动策划方案
- 2025高速公路建设合同管理
- 2025宣传片拍摄合同模板
- 基金代持协议3篇
- 住房商业性借款合同范本(详细)5篇
- 2025汽车购买合同范本
- 动漫欣赏课课件-低年级
- 短视频手机拍摄与剪辑
- 普通话课件(完整版)
- 2023北京市高级中等学校招生考试英语答题卡A4版word版可以编辑
- 《草帽是父亲的徽饰》阅读练习
- 输变电工程钢管杆吊装组立工程施工方案和措施方案
- 工贸企业主要负责人和安全管理人员安全培训演示文稿
- 狮子王中英文台词对照(超全的完整版)(英语口语练习必备)
- HP碗式中速磨煤机检修教程
- 办公室一族常见病预防
- 精神科诊疗常规及技术操作规范-
评论
0/150
提交评论