赞
踩
IPsec(Internet Protocol Security)是为IP网络提供安全性的协议和服务的集合,是一组基于网络层的,应用密码学的安全通信协议族,不具体指某个协议。它是 VPN(Virtual Private Network,虚拟专用网)中常用的一种技术。由于IP报文本身没有集成任何安全特性,IP 数据包在公用网络如 Internet 中传输可能会面临被伪造、窃取或篡改的风险。通信双方通过 IPsec 建立一条 IPsec 隧道,IP 数据包通过 IPsec 隧道进行加密传输,有效保证了数据在不安全的网络环境如 Internet 中传输的安全性。
IPsec 可以分为配置 和运行 两个过程。配置过程 可以手工进行 也可以通过软件自动 配置,比如 strongSwan,LibreSwan,OpenSwan,FreeSwan等;
资料直通车:Linux内核源码技术学习路线+视频教程内核源码
IPsec工作时需要的数据:
安全策略(Security Policy,缩写SP),定义了什么样的数据要进行ipsec处理,相关的配置被存储到SPD(Security Policy Database)中。
安全关联 (Security Association 缩写SA,有些文章翻译为"安全联盟"),是建立ipsec通信所需的相关参数。比如加密密钥、认证密钥等,保存在SAD(SA Database)中。
SP 描述了需要做什么;而 SA 描述了它应该如何实现。
一对SA和SP负责一个方向的数据处理,双向都需要IPsec就需要两对SA和SP。
建立SA,手工配置又复杂又不安全,生产上应该没人会用。利用软件自动配置是首选,软件配置是通过 Internet Key Exchange 协议(有IKEv1 和 IKEv2两个版本) 自动协商。IKE是一个复合协议,协议建立在Internet安全联盟和密钥管理协议ISAKMP定义的框架上,是基于UDP(User Datagram Protocol)的500 端口的应用层协议,在NAT环境下会切换为4500端口。
IKE的精髓在于它永远不在不安全的网络上传送密钥,而是通过一些数据的交换,通信双方最终计算出共享的密钥,并且即使第三方截获了双方用于计算密钥的所有交换数据,也无法计算出真正的密钥。其中的核心技术就是DH(Diffie Hellman)交换技术。
DH方法针对的是以下困难的局面:
Alice 和 Bob 想协商一个密钥,用于对称加密。但是他们之间的通信渠道是不安全的。所有经过此渠道的信息均会被敌对方Eve看到。为了防止密钥泄露,Diffie 与 Hellman提出以下密钥交换协议:
有两个全局公开的参数,一个素数p和一个整数 g ,g 是 p 的一个原根。
3.类似,Bob 取一私密的整数 b , 不让任何人知道, 发给Alice计算结果B=gb mod p. 同样 Eve 也会看见传递的B是什么。
7.虽然Eve也看见了p、g、A、B 但是鉴于计算离散对数的困难性,他无法知道a和b 的具体值,所以Eve就无从知晓密钥K是什么了。
IKE有三个组件:(了解一下不细聊)
SKEME,Oakley ,ISAKMP。
IKE协商分两个阶段:
第一阶段 ,用来协商自己用的连接信息,被称为 IKE SA(或 ISAKMP SA ),期间需要完成身份验证和密钥信息交换。
身份验证的方法
Public Key Authentication
Pre-Shared-Key Authenticiation (PSK)
Extensible Authentication Protocol (EAP) 用户名密码
eXtended Authentication (XAuth)
这个阶段有主模式(Main Mode)和野蛮模式(Aggressive Mode)两种协商方法。感兴趣的可以自行搜索或参考文后的扩展链接了解。
第二阶段 ,是在第一阶段建立的 **IKE SA ** 的保护下来确立 IPsec SA,使用快速模式。根据配置的 AH/ESP 安全协议等参数协商出 IPsec SA。
协商出IPSec 需要使用的认证算法和加密算法及相关密钥
(1)认证算法 IPSec可以使用三种认证算法
MD5(Message Digest 5):MD5 通过输入任意长度的消息,产生 128bit 的消息摘要。
SHA-1(Secure Hash Algorithm):SHA-1 通过输入长度小于 2 的 64 次方比特的消息,产生 160bit 的消息摘要。
SHA-2:SHA-2 算法相对于 SHA-1 加密数据位数有所上升,安全性能要远远高于SHA-1
(2)加密算法
加密算法实现主要通过对称密钥系统,它使用相同的密钥对数据进行加密和解密。
IPSec使用以下三种加密算法:
DES:使用 56bit 的密钥对一个 64bit 的明文块进行加密。
3DES:使用三个 56bit 的 DES 密钥(共 168bit 密钥)对明文进行加密。
AES:使用 128bit、192bit 或 256bit 密钥长度的 AES 算法对明文进行加密。
工作模式有隧道模式(Tunnel mode)和传输模式(Transport mode)。
封装协议有 AH (Authentication Header头部验证) 和 ESP (Encapsulating Security Payload安全载荷封装)两种,协议号分别为51、50。IPSEC 使用 ESP 来支持加密,使用 AH来保护报文的完整性。二者可以单独使用, 也可以一起使用。
AH 认证头协议:
鉴别头 AH:(不提供保密性,只对整个IP数据包提供保护)
无连接数据完整性:通过哈希函数产生的校验来保证
数据源认证:通过计算验证码时加入一个共享密钥来实现
抗重放服务:AH报头中的随机序列号可以防止重放攻击
ESP 封装安全载荷协议:
除提供 AH 认证头协议的所有功能之外,还有数据保密和有限的数据流保护。ESP 协议允许对 IP 报文净荷进行加密和认证、只加密或者只认证,ESP 没有对 IP头的内容进行保护。
保密服务通过使用密码算法加密 IP 数据包的相关部分来实现。
数据流保密由隧道模式下的保密服务提供。
ESP 通常使用 DES、3DES、AES 等加密算法实现数据加密,使用 MD5 或 SHA1 来实现数据完整性认证。
IPsec的数据封包方式
注:下边的图只是示意图,AH 头,ESP 头等还有其他细节结构,并未体现出来,详情请自行搜索。
AH 协议在两种模式下的封装:
ESP 协议在两种模式下的封装:
兴趣流量的识别和封装,由内核空间网络栈的 xfrm (读作transfrom)框架提供支持,处于Netfilter的处理路径上:
上图是知名的 netfilter 框架处理过程图的一部分,可以清楚的看到:input 的数据在 xfrm lookup 处,发现是需要解码的数据,解码后重新进入网络栈处理。
output 的数据经过 xfrm lookup 处,发现是需要编码的数据,编码后重新进入网络栈发出。
下边这个图看的可能更清晰些:
查看 xfrm 的状态,策略,监控可以使用ip命令:
- ip xfrm state
- ip xfrm policy
- ip xfrm monitor
关于 IPsec 做 VPN:
传输模式,只是对原始IP包的数据部分进行处理,目的IP并没有变化。传输模式只为高层协议提供安全服务,提供端到端的数据保护,本身并不能做VPN。但是
常用的VPN比如 L2TP over IPsec, 即在 IPsec 的传输模式+ESP协议下,去跑 L2TP VPN:(由外到内的数据封装)
IP/UDP(4500)/ESP/UDP(1701)/L2TP/PPP/IP/TCP/HTTP
把 其他协议(比如GRE等)跑到传输模式的ESP加密的模式上,用ESP做加密,然后用其他协议做功能,也是常见的用法。
隧道模式,是对原有的整个 IP 包进行处理,外层又封装了一层IP头。可以做 VPN用,但因为之前 IPsec 隧道模式认证和分配IP的协议标准化不太好,所以也不常用,现在不知是否可以直接使用了。
关于 IPsec 的 NAT 穿透 :
注:NAT 有很多类型,这里指的是 Port Address Translation (PAT)型的NAT,是和端口 相关的 NAT ,一般家庭网络都是这种 NAT。
AH 主要用于保护消息的完整性,其验证范围包含IP报文头,而 NAT 修改 IP 报文头会导致 AH 检查失败,因此使用 AH 保护的 IPSec 隧道是不能穿越 NAT 网关的。
ESP协议保护的报文不存在该问题,因为 ESP 保护的部分不包含IP报文头(对隧道方式而言是外层IP报文头)。
因为 AH/ESP 是 IP 层有协议号的协议,和 TCP、UDP 是同级协议,本身没有端口号,在标准的 PAT-NAT下也无法工作。
但是,还记得之前 IKE 协商时如果发现 NAT 环境会切换到 UDP 的 4500 端口么。IKE 用完了 UDP 的4500端口,后边 IPsec 真正工作时也会把自己封到 UDP-4500 端口的数据中,以支持 NAT 。这依靠 IPsec 的 NAT-Traversal,简称 NAT-T,NAT-Discovery ,简称 NAT-D 机制来实现的。
最终得到结论,只有ESP协议 配合UDP4500端口封装才能支持NAT环境。
由下图可知,NAT处理是在IPsec之前的,如果NAT改变了数据的IP地址,IPsec有可能就识别不到相关数据流了,所以在网关上配有NAT以支持内网机器联网的同时,又要通过IPsec与远程网络打通时,一定要注意NAT的配置,不要对内网打通的流量做NAT。
可以参考下边这个链接,通过strongSwan在Ubuntu系统上做个配置示例,
这个示例配通后,本机的请求会被IPsec封装,传输到远端,在远端做NAT以使用远程服务器的IP访问网络。配置过程中注意服务器本机的防火墙配置。
下图来自 strongSwan文档,可以用来解释好几种应用情景
情景一,安全加密(Host-to-Host)
图中moon和sun之间,想安全通信不被别人拦截数据。他们之间就可以打通IPsec隧道(传输或隧道模式,兴趣流 192.168.0.1 - 192.168.0.2),对他们之间的通信做加密。被加密的数据,可以是L2TP,GRE等其他VPN或隧道协议,为其他协议提供安全支持和NAT穿越等服务。
情景二,远程访问(Host-to-Site)
比如图中carol在家里,想访问左边的办公区的网络中的所有设备。carol和办公区的网关moon之间打通 IPsec 隧道(隧道模式,兴趣流 192.168.0.100-10.1.0.0/16),carol之间就可以向目的网段的服务器地址比如10.1.0.10发送数据了。
情景三,内网互联(Site-to-Site)
比如右边办公区的bob想直接访问左办公区的alice,那就在moon和sun之间打通IPsec隧道(隧道模式,兴趣流10.1.0.0/16-10.2.0.0/16),他们相互通信的数据包会被自动传输到对端。
情景四,隐藏IP(Host-to-Site + SNAT)
比如carol不想用自己的IP上网,想用winnetou的IP,那就在他们之间打通IPsec隧道(隧道模式,一般会配置一个VIP作为默认网关,兴趣流VIP - 0.0.0.0/0), 在winnetou上开通数据转发功能,并对数据包做SNAT,发出前把源地址替换成自己的192.168.0.150。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。