拓扑设计:

概述

  IPSEC是一套比较完整成体系的×××技术,它规定了一系列的协议标准。如果不深入探究IPSEC的过于详细的内容,我们对于IPSEC大致按照以下几个方面理解。

  ×××国家标准:

  标准制定单位:华为技术有限公司、中兴、深信服科技有限公司、无锡江南信息安全工程技术中心

  

为什么要导入IPSEC协议

  导入IPSEC协议,原因有2个,一个是原来的TCP/IP体系中间,没有包括基于安全的设计,任何人,只要能够搭入线路,即可分析所有的通讯数据。IPSEC引进了完整的安全机制,包括加密、认证和数据防篡改功能。

  另外一个原因,是因为Internet迅速发展,接入越来越方便,很多客户希望能够利用这种上网的带宽,实现异地网络的的互连通。

  IPSEC协议通过包封装技术,能够利用Internet可路由的地址,封装内部网络的IP地址,实现异地网络的互通。

 包封装协议

  设想现实一种通讯方式。假定发信和收信需要有×××(成年人才有),儿童没有×××,不能发信收信。有2个儿童,小张和小李,他们的老爸是老张和老李。现在小张和小李要写信互通,怎么办?

  一种合理的实现方式是:小张写好一封信,封皮写上 "小张-->小李", 然后给他爸爸,老张写一个信封,写上老张-->老李,把前面的那封信套在里面,发给老李,老李收到信以后,打开,发现这封信是给儿子的,就转给小李了。小李回信也一样,通过他父亲的名义发回给小张。

  这种通讯实现方式要依赖以下几个因素:

  * 老李和老张可以收信发信

  * 小张发信,把信件交给老张。

  * 老张收到儿子的来信以后,能够正确的处理(写好另外一个信封),并且重新包装过的信封能够正确送出去。

  * 另外一端,老李收到信拆开以后,能够正确地交给小李。

  * 反过来的流程一样。

  把信封的收发人改成Internet上的IP地址,把信件的内容改成IP的数据,这个模型就是IPsec的包封装模型。小张小李就是内部私网的IP主机,他们的老爸就是×××网关,本来不能通讯的两个异地的局域网,通过出口处的IP地址封装,就可以实现局域网对局域网的通讯。

  引进这种包封装协议,实在是有点不得已。理想的组网方式,当然是全路由方式。任意节点之间可达(就像理想的现实通讯方式是任何人之间都可以直接写信互通一样)

  Internet协议最初设计的时候,IP地址是32位,当时是很足够了,没有人能够预料到将来Internet能够发展到现在的规模(相同的例子发生在电信短消息上面,由于160字节的限制,很大地制约了短消息的发展)。按照232次方计算,理论上最多能够容纳40亿个左右IP地址。这些IP地址的利用是很不充分的,另外大约有70%左右的IP地址被美国分配掉了(谁让人家发明并且管理Internet?)所以对于中国来说,可供分配的IP地址资源非常有限。

  既然IP地址有限,又要实现异地lan-lan通讯,包封包,自然是最好的方式了。

 安全协议(加密)

  依然参照上述的通讯模型。

  假定老张给老李的信件要通过邮政系统传递,而中间途径有很多好事之徒,很想偷看小张和小李(小张小李作生意,通的是买卖信息)通讯,或者破坏其好事。

  解决这个问题,就要引进安全措施。安全可以让小李和小张自己来完成,文字用暗号来表示,也可以让他们的老爸代劳完成,写好信,交给老爸,告诉他传出去之前重新用暗号写一下。

  IPSEC协议的加密技术和这个方式是一样的,既然能够把数据封装,自然也可以把数据变换,只要到达目的地的时候,能够把数据恢复成原来的样子就可以了。这个加密工作在Internet出口的×××网关上完成。

 安全协议(数据认证)

  还是以上述通讯模型为例,仅仅有加密是不够的。

  把数据加密,对应这个模型中间,是把信件的文字用暗号表示。

  好事之徒无法破解信件,但是可以伪造一封信,或者胡乱把信件改一通。这样,信件到达目的地以后,内容就面目全非了,而且收信一方不知道这封信是被修改过的。

  为了防止这种结果,就要引入数据防篡改机制。万一数据被非法修改,能够很快识别出来。这在现实通讯中间可以采用类似这样的算法,计算信件特征(比如统计这封信件的笔划、有多少字),然后把这些特征用暗号标识在信件后面。收信人会检验这个信件特征,由于信件改变,特征也会变。所以,如果修改人没有暗号,改了以后,数据特征值就不匹配了。收信人可以看出来。

  实际的IPSEC通讯的数据认证也是这样的,使用md5算法计算报文特征,报文还原以后,就会检查这个特征码,看看是否匹配。证明数据传输过程是否被篡改。

安全协议(身份认证)

  还是假定小张小李通讯模型。

  由于老张和老李不在一个地方,他们互相不能见面,为了保证他们儿子通讯的安全。老张和老李必须要相互确认对方是否可信。这就是身份认证问题。

  假定老李老张以前见过面,他们事先就约定了通讯暗号,比如1234567890对应abcdefghij, 那么写个255,对应就是一个bee

  常见的×××身份认证可以包括预共享密钥,通讯双方实现约定加密解密的密码,直接通讯就可以了。能够通讯就是朋友,不能通讯就是坏人,区分很简单。

  其他复杂的身份认证机制包括证书(电子证书比如x509之类的),比较罗里罗嗦,这里就不具体展开了,怕有兄弟看了打瞌睡。如果需要,可以找我要更具体的技术白皮书以及相关的身份认证文档。

  如果有身份认证机制,密钥的经常更换就成为了可能。

  

其他

  解决了上述的几个问题,基本可以保证×××通讯模型能够建立起来了。

  但是并不完美,这是最简单的×××。即通过对端两个静态的IP地址,实现异地网络的互联。美国的很多×××设备就作到这一级,因为美国IP地址充裕,分配静态IP地址没有问题。苦的是我等中国客户,2端都需要静态IP地址,相当于2Internet专线接入。

  ×××要在中国用起来,还要解决一堆的相关问题。。

  

IPSEC通过包封装包的方法

  通过Internet建立了一个通讯的隧道,通过这个通讯的隧道,就可以建立起网络的连接。但是这个模型并非完美,仍然有很多问题需要解决。

  在讲述其他问题以前,我们对×××定义几个概念。

  

×××节点

  一个×××节点,可能是一台×××网关,也可能是一个客户端软件。在×××组网中间,属于组网的一个通讯节点。它应该能够连接 Internet,有可能是直接连接,比如adsl、电话拨号等等,也可能是通过nat方式,例如:小区宽带、cdma上网、铁通线路等等。

  ×××隧道:在两个***节点之间建立的一个虚拟链路通道。两个设备内部的网络,能够通过这个虚拟的数据链路到达对方。与此相关的信息是当时两个×××节点的IP地址,隧道名称、双方的密钥。

  

隧道路由

  一个设备可能和很多设备建立隧道,那么就存在一个隧道选择的问题,即到什么目的地,走哪一个隧道?

  用前面的通讯模型来说,老李老张就是隧道节点,他们通过邮政系统建立的密码通讯关系,就是一个数据隧道,小张和小李把信发给他们老爸的时候,他们老爸要作出抉择,这封信怎么封装,封装以后送给谁。假如还有一个老王和他们的儿子,也要通讯,这时候隧道路由就比较好理解了。送给小王的数据,就封装给老王,送给小李的数据,就封装发给老李。如果节点非常多,那么这个隧道路由就会比较复杂。

  理解了以上的问题,我们就知道,ipsec要解决的问题其实,可以分为以下几个步骤:

  找到对方***节点设备,如果对方是动态IP地址,那么必须能够通过一种有效途径能够及时发现对方IP地址的变化。按照通讯模型,就是老李老张如果经常搬家的话,必须有一个有效的机制,能够及时发现老李老张地址的变化。

  

建立隧道

  建立隧道说起来简单,作起来不容易。如果两个设备都有合法的公网IP,那么建立一个隧道是比较容易的。如果一方在nat之后,那就比较罗嗦了。一般通过内部的***节点发起一个udp连接,再封装一次ipsec,送到对方,因为udp可以通过防火墙进行记忆,因此通过udp再封装的ipsec 包,可以通过防火墙来回传递。

  建立隧道以后,就确定隧道路由,即到哪里去,走哪个隧道。很多×××隧道配置的时候,就定义了保护网络,这样,隧道路由就根据保护的网络关系来决定。但是这丧失了一定的灵活性。

  所有的ipsec ×××展开来讲,实现的无非就是以上几个要点,具体各家公司,各有各的做法。但是可以肯定,目前在市场销售的×××,肯定都已经解决了以上的问题。

  IPSEC ××× 的类型:

  常见的IPSEC ××× 类型有 站到站(site to site 或者是LAN TO LAN)easy ×××(远程访问×××)DM×××(动态多点×××)GET ×××(Group Encrypted Transport(GET) ××× )等。

 

 

条件:

a.       R1为总部路由

b.       R2为分公司1路由

c.       R3为分公司2路由

d.       R0为模拟的Internet路由

IP地址分配如图

 

组网要求:

1.  总部与分支机构1建立ipsec ***隧道

2.  总部与分支机构2建立ipsec ***隧道

 

 

配置:

 

R1

IP地址配置:

[R1]int s1

[R1-Ethernet1]ip add 10.0.1.2 24

 

 

[R1]int e0

[R1-Ethernet1]ip add 192.168.1.1 24

 

配置静态路由:

[R1]ip route-static 0.0.0.0 0 10.0.1.1

 

配置ACL

[R1]acl 3000

[R1-acl-3000]rule permit ip source 192.168.1.0 0.0.0.255 destination 192.168.2.0 0.0.0.255

[R1-acl-3000]rule deny ip source any destination any

 

[R1]acl 3001

[R1-acl-3000]rule permit ip source 192.168.1.0 0.0.0.255 destination 192.168.3.0 0.0.0.255

[R1-acl-3000]rule deny ip source any destination any

 

配置安全提议:

[R1]ipsec proposal tran1

[R1-ipsec-proposal-tran1]encapsulation-mode tunnel

[R1-ipsec-proposal-tran1]transform esp-new

[R1-ipsec-proposal-tran1]esp-new encryption-algorithm des

[R1-ipsec-proposal-tran1]esp-new authentication-algorithm sha1-hmac-96

 

[R1]ipsec proposal tran2

[R1-ipsec-proposal-tran1]encapsulation-mode tunnel

[R1-ipsec-proposal-tran1]transform esp-new

[R1-ipsec-proposal-tran1]esp-new encryption-algorithm des

[R1-ipsec-proposal-tran1]esp-new authentication-algorithm sha1-hmac-96

 

配置策略:

[R1]ipsec policy policy1 10 isakmp

[R1-ipsec-policy-policy1-10]tunnel remote 10.0.2.2

[R1-ipsec-policy-policy1-10]proposal tran1

[R1-ipsec-policy-policy1-10]security acl 3000

 

[R1]ipsec policy policy1 20 isakmp

[R1-ipsec-policy-policy1-20]tunnel remote 10.0.3.2

[R1-ipsec-policy-policy1-20]proposal tran2

[R1-ipsec-policy-policy1-20]security acl 3001

 

配置自动协商的IKE

[R1]ike pre-shared-key abcdefg remote 10.0.2.2

[R1]ike pre-shared-key 1234567 remote 10.0.3.2

把策略应用到接口:

[R1]int e1

[R1- Ethernet1]ipsec policy policy1

 

 

 

R2

IP地址配置:

[R2]int s0

[R2- Serial0]ip add 10.0.2.2 24

 

[R2]int e0

[R2-Ethernet0]ip add 192.168.2.1 24

配置静态路由:

[R2]ip route-static 0.0.0.0 0 10.0.2.1

 

配置ACL

 

[R2]acl 3000

[R2-acl-3000]rule permit ip source 192.168.2.0 0.0.0.255 destination 192.168.1.0 0.0.0.255

[R2-acl-3000]rule deny ip source any destination any

配置安全提议:

 

[R2]ipsec proposal tran1

[R2-ipsec-proposal-tran1]encapsulation-mode tunnel

[R2-ipsec-proposal-tran1]transform esp-new

[R2-ipsec-proposal-tran1]esp-new encryption-algorithm des

[R2-ipsec-proposal-tran1]esp-new authentication-algorithm sha1-hmac-96

配置策略:

 

[R2]ipsec policy policy1 10 isakmp

[R2-ipsec-policy-policy1-10]tunnel remote 10.0.1.2

[R2-ipsec-policy-policy1-10]proposal tran1

[R2-ipsec-policy-policy1-10]security acl 3000

配置自动协商的IKE

 

[R2]ike pre-shared-key abcdefg remote 10.0.1.2

把策略应用到接口:

 

[R2]int s0

[R2-Serial0]ipsec policy policy1

 

 

 

 

R3

IP地址配置:

 

[R3]int s1

[R3- Serial1]ip add 10.0.3.2 24

 

 

[R3]int e0

[R3- Ethernet0]ip add 192.168.3.1 24

配置静态路由:

 

[R3]ip route-static 0.0.0.0 0 10.0.3.1

 

配置ACL

 

[R3]acl 3000

[R3-acl-3000]rule permit ip source 192.168.3.0 0.0.0.255 destination 192.168.1.0 0.0.0.255

[R3-acl-3000]rule deny ip source any destination any

配置安全提议:

 

[R3]ipsec proposal tran2

[R3-ipsec-proposal-tran1]encapsulation-mode tunnel

[R3-ipsec-proposal-tran1]transform esp-new

[R3-ipsec-proposal-tran1]esp-new encryption-algorithm des

[R3-ipsec-proposal-tran1]esp-new authentication-algorithm sha1-hmac-96

配置策略:

 

[R3]ipsec policy policy1 10 isakmp

[R3-ipsec-policy-policy1-10]tunnel remote 10.0.1.2

[R3-ipsec-policy-policy1-10]proposal tran2

[R3-ipsec-policy-policy1-10]security acl 3000

配置自动协商的IKE

 

[R3]ike pre-shared-key 1234567 remote 10.0.1.2

 

把策略应用到接口:

 

[R3]int s1

[R3-Serial1]ipsec policy policy1

 

 

R0

配置接口IP

[R0]int e0

[R0-Ethernet0]ip add 10.0.1.1 24

 

[R0]int s0

[R0-Serial0]ip add 10.0.2.1 24

 

[R0]int s1

[R0-Serial1]ip add 10.0.3.1 24

 

配置静态路由:

[R0]ip route-static 192.168.1.0 24 10.0.1.2

[R0]ip route-static 192.168.2.0 24 10.0.2.2

[R0]ip route-static 192.168.3.0 24 10.0.3.2