IPsec(IP Security)是IETF 制定的三层隧道加密协议,它为Internet 上传输的数据提供了高质量的、可互操作的、基于密码学的安全保证。特定的通信方之间在IP 层通过加密与数据源认证等方式,提供了以下的安全服务:
① 数据机密性(Confidentiality):IPsec 发送方在通过网络传输包前对包进行加密。
② 数据完整性(Data Integrity):IPsec 接收方对发送方发送来的包进行认证,以确保数据在传输过程中没有被篡改。
③ 数据来源认证(Data Authentication):IPsec 在接收端可以认证发送IPsec 报文的发送端是否合法。
④ 防重放(Anti-Replay):IPsec 接收方可检测并拒绝接收过时或重复的报文。
IPsec 具有以下优点:
① 支持 IKE(Internet Key Exchange,因特网密钥交换),可实现密钥的自动协商功能,减少了密钥协商的开销。可以通过IKE 建立和维护SA 的服务,简化了IPsec 的使用和管理。
② 所有使用 IP 协议进行数据传输的应用系统和服务都可以使用IPsec,而不必对这些应用系统和服务本身做任何修改。
③ 对数据的加密是以数据包为单位的,而不是以整个数据流为单位,这不仅灵活而且有助于进一步提高IP 数据包的安全性,可以有效防范网络攻击。
IPSec是一个框架性架构,具体由两类协议组成:
1、 AH协议(Authentication Header,使用较少):可以同时提供数据完整性确认、数据来源确认、防重放等安全特性;AH常用摘要算法(单向Hash函数)MD5和SHA1实现该特性。
2.、ESP协议(Encapsulated Security Payload,使用较广):可以同时提供数据完整性确认、数据加密、防重放等安全特性;ESP通常使用DES、3DES、AES等加密算法实现数据加密,使用MD5或SHA1来实现数据完整性。
为何AH使用较少呢?因为AH无法提供数据加密,所有数据在传输时以明文传输,而ESP提供数据加密;其次AH因为提供数据来源确认(源IP地址一旦改变,AH校验失败),所以无法穿越NAT。当然,IPSec在极端的情况下可以同时使用AH和ESP实现最完整的安全特性,但是此种方案极其少见。
IPSec提供了两种封装模式:传输模式(Transport)的封装和隧道模式(Tunnel)的封装。
1、传输模式(Transport)的封装(AH和ESP的封装)形式,如图1所示:
图1:传输模式的封装形式
2、隧道模式(Tunnel)的封装(AH和ESP的封装)形式,如图2所示:
图2:隧道模式的封装形式
从以上两张图可以看出传输模式和隧道模式的区别:
①传输模式在AH、ESP处理前后IP头部保持不变,主要用于End-to-End(端到端或者PC到PC)的应用场景。
②隧道模式则在AH、ESP处理之后再封装了一个外网IP头,主要用于Site-to-Site(站点到站点或者网关到网关)的应用场景。
以下有个图是对传输模式、隧道模式适用于何种场景的详细说明,如图3所示:
图3:传输模式、隧道模式使用的场景
从上图的对比可以看出:①隧道模式可以适用于任何场景,②传输模式只能适合PC到PC的场景。隧道模式虽然可以适用于任何场景,但是隧道模式需要多一层IP头(通常为20字节长度)开销,所以在PC到PC的场景,建议还是使用传输模式。
为了使大家有个更直观的了解,我们看看图4,分析一下为何在Site-to-Site场景中只能使用隧道模式:
图4:为何在Site-to-Site场景中只能使用隧道模式
如图4所示,如果发起方内网PC发往响应方内网PC的流量满足网关的兴趣流匹配条件,发起方使用传输模式进行封装:
①IPSec会话建立在发起方、响应方两个网关之间。
②由于使用传输模式,所以IP头部并不会有任何变化,IP源地址是192.168.1.2,目的地址是10.1.1.2。
③这个数据包发到互联网后,其命运注定是杯具的,为什么这么讲,就因为其目的地址是10.1.1.2吗?这并不是根源,根源在于互联网并不会维护企业网络的路由,所以丢弃的可能性很大。
④即使数据包没有在互联网中丢弃,并且幸运地抵达了响应方网关,那么我们指望响应方网关进行解密工作吗?凭什么,的确没什么好的凭据,数据包的目的地址是内网PC的10.1.1.2,所以直接转发了事。
⑤最杯具的是响应方内网PC收到数据包了,因为没有参与IPSec会话的协商会议,没有对应的SA,这个数据包无法解密,而被丢弃。
我们从上面五点可以很好的解释了在Site-to-Site情况下为什么不能使用传输模式的原因。并且提出了使用传输模式的充要条件:兴趣流必须完全在发起方、响应方IP地址范围内的流量。比如在图中,发起方IP地址为6.24.1.2,响应方IP地址为2.17.1.2,那么兴趣流可以是源6.24.1.2/32、目的是2.17.1.2/32,协议可以是任意的,倘若数据包的源、目的IP地址稍有不同,对不起,请使用隧道模式。
IPsec的协商实质就是怎样建立起安全联盟(SA),这里有以下两种协商方式建立 SA:
①手工方式(manual)配置比较复杂,创建SA 所需的全部信息都必须手工配置,而且不支持一些高级特性(例如定时更新密钥),但优点是可以不依赖IKE 而单独实现IPsec 功能。
②IKE 自动协商(isakmp)方式相对比较简单,只需要配置好IKE 协商安全策略的信息,由IKE自动协商来创建和维护SA。
我们在这以最常见的IPSec隧道模式为例,解释一下IPSec的协商过程,如图5所示:
图5:IPsec的协商过程
图5描述了由兴趣流触发的IPSec协商流程,原生IPSec并无身份确认等协商过程,在方案上存在诸多缺陷,如无法支持发起方地址动态变化情况下的身份确认、密钥动态更新等。伴随IPSec出现的IKE(Internet Key Exchange)协议专门用来弥补这些不足:
①发起方定义的兴趣流是源192.168.1.0/24目的10.0.0.0/8,所以在接口发送发起方内网PC发给响应方内网PC的数据包,能够得以匹配。
②满足兴趣流条件,在转发接口上检查SA不存在、过期或不可用,都会进行协商,否则使用当前SA对数据包进行处理。
③协商的过程通常分为两个阶段,第一阶段是为第二阶段服务,第二阶段是真正的为兴趣流服务的SA,两个阶段协商的侧重有所不同,第一阶段主要确认双方身份的正确性,第二阶段则是为兴趣流创建一个指定的安全套件,其最显著的结果就是第二阶段中的兴趣流在会话中是密文,除此之外IPSec的中安全性还体现在第二阶段SA永远是单向的,我可以从图6看出,如图6所示:
图6:第二阶段SA的方向
从图6可以发现,在协商第二阶段SA时,SA是分方向性的,发起方到响应方所用SA和响应放到发起方SA都是单独协商的,这样做的好处在于即使某个方向的SA被破解并不会波及到另一个方向的SA,这样就起到了安全性的作用。
现有一家公司总公司在北京,并且在上海和郑州各有一家分公司,现要求总公司和分公司都能够连接到Internet网上,并且总公司和分公司通过使用tunnel技术能够安全通信,而且不影响各公司连接Internet网,具体实施如拓扑图所示。
根据实施要求使用绘图工具绘制出网络拓扑图,如图7所示:
图7:网络拓扑图
⑴ 交换机SW1的配置
<Quidway>system-view
Enter system view , return user view with Ctrl+Z.
[Quidway]sysn
//修改名称
[Quidway]sysname SW1
//创建VLAN 10
[SW1]vlan 10
//把端口eth0/1加入VLAN 10
[SW1-vlan10]port eth0/1
//创建VLAN 20
[SW1-vlan10]vlan 20
//把端口eth0/2加入VLAN 20
[SW1-vlan20]port eth0/2
//创建VLAN 20
[SW1-vlan20]vlan 30
//把端口eth0/3加入VLAN 30
[SW1-vlan30]port eth0/3
//在VLAN 10接口配置IP地址
[SW1]int vlan 10
//在VLAN 10接口配置IP地址
[SW1-Vlan-interface10]ip add 61.130.130.2 255.255.255.252
[SW1]int vlan 20
//在VLAN 20接口配置IP地址
[SW1-Vlan-interface20]ip add 61.130.130.6 255.255.255.252
[SW1]int vlan 30
//在VLAN 30接口配置IP地址
[SW1-Vlan-interface30]ip add 61.130.130.10 255.255.255.252
⑵ 防火墙FW1的配置
<H3C>system-view
System View: return to User View with Ctrl+Z.
[H3C]sysname FW1
[FW1]int eth0/0
//由于防火墙原来有管理的IP地址,因此先去掉IP地址
[FW1-Ethernet0/0]undo ip address
//去掉IP地址后重新再配置IP地址
[FW1-Ethernet0/0]ip address 192.168.1.1 24
[FW1-Ethernet0/0]int eth0/4
[FW1-Ethernet0/4]ip add 61.130.130.1 30
[FW1-Ethernet0/4]quit
//配置默认路由
[FW1]ip route-static 0.0.0.0 0 61.130.130.2
[FW1]firewall zone unt
//进入防火墙不可信区域
[FW1]firewall zone untrust
//把接口eth0/4加入不可信区域
[FW1-zone-untrust]add interface eth0/4
//配置扩展访问控制列表
[FW1]acl number 3000 match-order auto
//创建访问控制列表规则
[FW1-acl-adv-3000]rule 10 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255
[FW1-acl-adv-3000]rule 20 deny ip source any destination any
[FW1]acl number 3001 mat
//配置扩展访问控制列表
[FW1]acl number 3001 match-order auto
//创建访问控制列表规则
[FW1-acl-adv-3001]rule 10 permit ip source 192.168.1.0 0.0.0.255 destination 192.168.3.0 0.0.0.255
[FW1-acl-adv-3001]rule 20 deny ip source any destination any
//配置安全提出协议
[FW1]ipsec proposal tran1 //名字可以自己起
//配置采取的封装模式为tunnel
[FW1-ipsec-proposal-tran1]encapsulation-mode tunnel
//配置协商传输协议
[FW1-ipsec-proposal-tran1]transform esp
//配置传输协议采取的加密算法为md5
[FW1-ipsec-proposal-tran1]esp authentication-algorithm md5
[FW1-ipsec-proposal-tran1]esp encryption-algorithm des
//创建生成IKE,指出IKE的邻居
[FW1]ike peer fw2 //名字可以自取
//指出本地的IP地址
[FW1-ike-peer-fw2]local-address 61.130.130.1
//指出远端的IP地址
[FW1-ike-peer-fw2]remote-address 61.130.130.5
//定义一个共享密钥
[FW1-ike-peer-fw2]pre-shared-key 123456
//创建安全策略,指出安全策略协商采取的方式
[FW1]ipsec policy policy1 10 isakmp
//安全应用访问控制列表
[FW1-ipsec-policy-isakmp-policy1-10]security acl 3000
//指出安全提议
[FW1-ipsec-policy-isakmp-policy1-10]proposal tran1
//指出IKE的邻居
[FW1-ipsec-policy-isakmp-policy1-10]ike-p
[FW1-ipsec-policy-isakmp-policy1-10]ike-peer fw2
//在接口上应用
[FW1-Ethernet0/4]ipsec policy policy1
//配置通往FW3的提议
[FW1]ipsec proposal tran2
[FW1-ipsec-proposal-tran2]encapsulation-mode tun
//协商封装采取的模式
[FW1-ipsec-proposal-tran2]encapsulation-mode tunnel
[FW1-ipsec-proposal-tran2]tra
//协商传输所用的协议
[FW1-ipsec-proposal-tran2]transform esp
[FW1-ipsec-proposal-tran2]esp aut
//配置传输协议采取的加密算法为md5
[FW1-ipsec-proposal-tran2]esp authentication-algorithm md5
[FW1-ipsec-proposal-tran2]esp encryption-algorithm des
//创建生成IKE
[FW1]ike peer fw3
//指出本地的IP地址
[FW1-ike-peer-fw3]local-address 61.130.130.1
[FW1-ike-peer-fw3]remote-add
//指出远端的IP地址
[FW1-ike-peer-fw3]remote-address 61.130.130.9
//定义一个共享密钥
[FW1-ike-peer-fw3]pre-shared-key 12345
[FW1-ike-peer-fw3]quit
//创建安全策略,指出安全策略协商采取的方式
[FW1]ipsec policy policy1 20 isakmp
[FW1-ipsec-policy-isakmp-policy1-20]se
//安全应用访问控制列表
[FW1-ipsec-policy-isakmp-policy1-20]security acl 3001
[FW1-ipsec-policy-isakmp-policy1-20]pro
//指出安全提议
[FW1-ipsec-policy-isakmp-policy1-20]proposal tran2
[FW1-ipsec-policy-isakmp-policy1-20]ike-p
//指出IKE邻居
[FW1-ipsec-policy-isakmp-policy1-20]ike-peer fw3
[FW1-ipsec-policy-isakmp-policy1-20]quit
⑶ 防火墙FW2的配置
<H3C>system-view
System View: return to User View with Ctrl+Z.
[H3C]sysname FW2
[FW2]int eth0/0
[FW2-Ethernet0/0]ip add 192.168.2.1 24
//进入接口匹配值IP地址
[FW2-Ethernet0/0]int eth0/4
[FW2-Ethernet0/4]ip add
[FW2-Ethernet0/4]ip address 61.130.130.5 30
[FW2-Ethernet0/4]quit
[FW2]ip rout
//配置默认路由
[FW2]ip route-static 0.0.0.0 0 61.130.130.6
[FW2]firewall packet-filter default permit
[FW2]firewall zone trust
//把接口eth0/0加入可信区域
[FW2-zone-trust]add interface eth0/0
[FW2-zone-trust]quit
[FW2]firewall zone unt
[FW2]firewall zone untrust
//把接口eth0/4加入不可信区域
[FW2-zone-untrust]add interface eth0/4
//配置扩展访问控制列表
[FW2]acl number 3000 match-order auto
//创建访问控制列表规则
[FW2-acl-adv-3000]rule 10 permit ip source 192.168.2.0 0.0.0.255 destination 192.168.1.0 0.0.0.255
[FW2-acl-adv-3000]rule 20 deny ip source any destination any
//配置安全协商提议
[FW2]ipsec pro
[FW2]ipsec proposal tran1
[FW2-ipsec-proposal-tran1]encapsulation-mode tun
//配置采取封装类型
[FW2-ipsec-proposal-tran1]encapsulation-mode tunnel
[FW2-ipsec-proposal-tran1]transform esp
//配置传输协议采取的加密算法为md5
[FW2-ipsec-proposal-tran1]esp authentication-algorithm md5
[FW2-ipsec-proposal-tran1]esp encryption-algorithm des
//创建IKE
[FW2]ike peer fw1
[FW2-ike-peer-fw1]local-a
//指出本地和远端的IP地址
[FW2-ike-peer-fw1]local-address 61.130.130.5
[FW2-ike-peer-fw1]remote-ad
[FW2-ike-peer-fw1]remote-address 61.130.130.1
//定义一个共享密钥
[FW2-ike-peer-fw1]pre-shared-key 123456
//创建安全策略,指出安全策略协商采取的方式
[FW2]ipsec policy policy1 10 isakmp
[FW2-ipsec-policy-isakmp-policy1-10]security acl 3000
[FW2-ipsec-policy-isakmp-policy1-10]pro
[FW2-ipsec-policy-isakmp-policy1-10]proposal tran1
//指出IKE邻居
[FW2-ipsec-policy-isakmp-policy1-10]ike-peer fw1
//在接口上应用
[FW2]int eth0/4
[FW2-Ethernet0/4]ipsec po
[FW2-Ethernet0/4]ipsec policy policy1
⑷ 防火墙FW3的配置
<H3C>system-view
System View: return to User View with Ctrl+Z.
[H3C]sysname FW3
[FW3]int eth0/0
[FW3-Ethernet0/0]
//由于防火墙原来有管理的IP地址,因此先去掉IP地址
[FW3-Ethernet0/0]undo ip add
[FW3-Ethernet0/0]ip add 192.168.3.1 24
[FW3-Ethernet0/0]loopback
//进入接口eth0/4,并配置IP地址
[FW3-Ethernet0/0]int eth0/4
[FW3-Ethernet0/4]ip add 61.130.130.9 30
[FW3-Ethernet0/4]quit
[FW3]ip rout
//配置默认路由
[FW3]ip route-static 0.0.0.0 0 61.130.130.10
//配置扩展访问控制列表
[FW3]acl number 3001 mat
[FW3]acl number 3001 match-order auto
//配置控制列表规则
[FW3-acl-adv-3001]rule 10 permit ip source 192.168.3.0 0.0.0.255 destination 192.168.1.0 0.0.0.255
[FW3-acl-adv-3001]rule 20 deny ip source any destination any
//配置安全协商提议
[FW3]ipsec proposal tran2
[FW3-ipsec-proposal-tran2]encapsulation-mode tun
//安全提议封装模式
[FW3-ipsec-proposal-tran2]encapsulation-mode tunnel
[FW3-ipsec-proposal-tran2]tran
//安全提议传输协议
[FW3-ipsec-proposal-tran2]transform esp
[FW3-ipsec-proposal-tran2]esp aut
//配置传输协议采取的加密算法为md5
[FW3-ipsec-proposal-tran2]esp authentication-algorithm md5
[FW3-ipsec-proposal-tran2]esp e
[FW3-ipsec-proposal-tran2]esp encryption-algorithm des
//创建IKE
[FW3]ike peer fw3
//指出本地和远端的IP地址
[FW3-ike-peer-fw3]local-address 61.130.130.9
[FW3-ike-peer-fw3]remo
[FW3-ike-peer-fw3]remote-address 61.130.130.1
//定义一个共享密钥
[FW3-ike-peer-fw3]pre-shared-key 1234
[FW3-ike-peer-fw1]quit
//创建安全策略,指出安全策略协商采取的方式
[FW3]ipsec policy policy1 20 isakmp
[FW3-ipsec-policy-isakmp-policy1-20]se
//安全应用访问控制列表
[FW3-ipsec-policy-isakmp-policy1-20]security acl 3001
[FW3-ipsec-policy-isakmp-policy1-20]pro
//指出安全提议
[FW1-ipsec-policy-isakmp-policy1-20]proposal tran2
[FW3-ipsec-policy-isakmp-policy1-20]ike-p
[FW3-ipsec-policy-isakmp-policy1-20]ike-peer fw1
[FW3-ipsec-policy-isakmp-policy1-20]quit
//在接口上应用安全策略
[FW3]int eth0/4
[FW3-Ethernet0/4]ipsec po
[FW3-Ethernet0/4]ipsec policy policy1
(1) 查看FW1的安全策略,如下图所示
(2)配置tunnel后在FW1上ping19.168.1.1到192.168.2.1,如下图所示:
(3) 未配置tunnel后在FW1上ping19.168.1.1到192.168.3.1,如下图所示:
(4) 配置tunnel后在FW1上ping19.168.1.1到192.168.3.1,如下所示: