当一端没有固定IP时,IPSec又该如何应对
发布时间:2021-07-08 15:18:17作者:网络之路博客阅读:0
遇到这样的情况,IPSec又该如何应对
回顾下之前IPSec之间的建立,在IKE阶段有一个很重要的配置就是要互相写peer,里面要指定对方的地址(remote-address),但是在上面这个图里面,CS_FW用的是PPPOE拨号,地址可能是动态的公网,也可能是私网地址,而CD_FW直接就是私网地址由猫分配的,基于这样的情况下,CS_FW与CD_FW可以通过remote-address写BJ_FW的地址,因为BJ_FW是固定的公网IP,但是BJ_FW这边就不行了,因为根本就不知道CS_FW与CD_FW的公网地址是多少,就算知道了,基于这种动态拨号的形式,过段时间也就变了,所以这样之前学习到的IPSec对接就派不上用场了,这个时候IPSec就出现了一个新的对接方式,IPSec模板方式。
IPSec模板方式
IPSec模板方式跟之前的IPSec一样,还是依靠IKE去协商,它最大的变化就是在IPSec是必须要求知道对方的remote-address才行,而模板方式则不要求,可以不指定对方地址,这样的情况下,上面的问题就解决了,CS_FW与CD_FW写remote-address,而BJ_FW用IPSec模板方式不需要关心对方是什么地址,照单全收。
IPSec策略方式:有多少个对等体就需要写多少个IKE与IPSec策略。
IPSec模板方式:总部只需要写一个IPSec模板,不管你多少个对等体。
IPSec模板方式由于它的配置简单,所以在实际运用中特别的多,第一个是配置简化了,第二个是大多数场景下,分支一般是没有固定IP的。但是,IPSec模板方式也有自身的缺点。
安全性有所下降,由于并不知道peer具体的地址,所以只能通过共享密钥来验证,少了一道防线。
由于使用了模板方式,并不知道对方peer的地址,所以无法主动发起建立,只能被动的等待分支来建立。
(这两个问题其实在华为设备里面加了优化的,可以进行解决,这个视频里面会详细讲解。)
实际演示
配置思路
1、防火墙基础配置要完成(包括接口地址、加入安全区域、安全策略以及NAT策略),其中安全策略与NAT策略要注意的地方可以参考上一篇
2、三个地方有默认路由存在即可,其实属于基础配置里面,这是这里强调下,不需要额外写静态的明细路由。(特殊情况除外)
3、BJ_FW配置基于IPSec模板方式配置(这个是第一次接触,会重点讲解)
4、分支采用正常的IPSec策略方式对接即可。
篇幅问题,基础配置只给暂时,为什么要这样配置就不在讲述了,可以回顾下上两篇(视频讲解会讲解)
Internet模拟(模拟专线、DHCP、PPPOE服务器)
sysname internet
#
dhcp enable
#
acl number 3000
rule 5 permit ip source 192.168.1.0 0.0.0.255
#
ip pool pool
network 100.64.55.0 mask 255.255.255.0
#
aaa
local-user ccieh3c.com password cipherccieh3c.com
local-user ccieh3c.com service-type ppp
#
nat address-group 1 61.128.1.10 61.128.1.20
#
interfaceVirtual-Template1
ppp authentication-mode chap
remote address pool pool
ip address 100.64.55.1 255.255.255.0
#
interfaceGigabitEthernet0/0/0
Ip address202.100.1.254 24
nat outbound 3000 address-group 1
#
interfaceGigabitEthernet0/0/1
pppoe-server bind Virtual-Template 1
#
interfaceGigabitEthernet0/0/2
ip address 192.168.1.1 255.255.255.0
dhcp select interface
#
interface LoopBack0
ip address 114.114.114.114 255.255.255.255
BJ_FW配置
sysname BJ_FW
#
interfaceGigabitEthernet1/0/0
undo shutdown
ip address 192.168.10.254 255.255.255.0
#
interfaceGigabitEthernet1/0/1
undo shutdown
ip address 202.100.1.1 255.255.255.0
#
firewall zone trust
add interface GigabitEthernet1/0/0
#
firewall zone untrust
add interface GigabitEthernet1/0/1
#
ip route-static 0.0.0.00.0.0.0 202.100.1.254
(安全策略与NAT策略可以参考上一篇,否则篇幅太长了,如果偷懒的画安全策略可以全放,不过是在你懂的前提下哦,另外这里要注意对方公网地址是不知道是多少
所以Local到untrust不需要匹配对方的。)
CS_FW配置
sysname CS_FW
#
interfaceGigabitEthernet1/0/0
undo shutdown
ip address 192.168.20.254 255.255.255.0
#
interface Dialer0
link-protocol ppp
ppp chap user ccieh3c.com
ppp chap password cipher%$%$ncXTXMuI"-)vgR0~~e.V.O*,%$%$
ppp pap local-user ccieh3c.com password cipher%$%$K~LuG'`NS#a-=y.f3(x28%PR%$%$
ppp ipcp dns admit-any
mtu 1400
ip address ppp-negotiate
dialer user defaultUser
dialer user ccieh3c.com
dialer bundle 1
#
interfaceGigabitEthernet1/0/1
pppoe-client dial-bundle-number 1 ipv4
undo shutdown
#
firewall zone trust
add interface GigabitEthernet1/0/0
#
firewall zone untrust
add interface Dialer0
#
ip route-static 0.0.0.00.0.0.0 Dialer0
(这里安全策略不需要匹配本端,因为地址是在一直变化的)
CD_FW配置
sysname CD_FW
#
interfaceGigabitEthernet1/0/0
undo shutdown
ip address dhcp-alloc
#
interfaceGigabitEthernet1/0/1
undo shutdown
ip address 192.168.30.254 255.255.255.0
#
firewall zone trust
add interface GigabitEthernet1/0/1
#
firewall zone untrust
set priority 5
add interface GigabitEthernet1/0/0
(这里安全策略不需要匹配本端,因为地址是在一直变化的)
到这里基础配置已经全部配置完毕,主要注意的地方安全策略要做好,放行ESP跟UDP500的流量,而且放行局域网之间流量的策略,注意是双向。NAT策略的话把NOPAT做在最前面,然后在做一个允许internet的访问即可,那么下面进入正式的内容,IPSec模板方式。
BJ_FW的IPSec模板方式配置
模板方式配置比策略配置方式大部分都是一样的,但是要注意一些细节的地方。
IKE对等体里面是不需要写对方地址的,因为也不知道对方地址是多少
受保护流量(ACL)这个是可选,写了的话可以严格匹配互访的网段
多了一个IPSEC模板,在模板里面关联IKE与IPSec相关内容
CS_FW的IPSec策略方式配置
ike proposal 1
#
ike peer BJ
undo version 2
pre-shared-key ccieh3c.com
ike-proposal 1
remote-address 202.100.1.1
#
acl number 3000
rule 5 permit ip source 192.168.20.0 0.0.0.255destination 192.168.10.0 0.0.0.255
#
ipsec proposal BJ
#
ipsec policy CS 10isakmp
security acl 3000
ike-peer BJ
proposal BJ
#
interface Dialer0
ipsec policy CS
CD_FW的IPSec策略方式配置
ike proposal 1
#
ike peer BJ
undo version 2
pre-shared-key ccieh3c.com
ike-proposal 1
remote-address 202.100.1.1
#
acl number 3000
rule 5 permit ip source 192.168.30.0 0.0.0.255destination 192.168.10.0 0.0.0.255
#
ipsec proposal BJ
#
ipsec policy CD 10isakmp
security acl 3000
ike-peer BJ
proposal BJ
#
interfaceGigabitEthernet1/0/0
undo shutdown
ip address dhcp-alloc
ipsec policy CD
两个分支的配置并没有什么特别的地方,就是普通的IPSec策略配置,注意是分支是必须写感兴趣流量的,另外peer里面也需要写remote-address,PPPOE拨号的话需要调用策略到拨号口,DHCP则直接物理口调用即可。
CS这边实际测试
这里要注意,由于BJ这边配置的是模板的形式,它是根本不知道分支的地址多少的,所以是无法发起IPSec建立,这种情况下只能分支发起建立。
CS这边的内网访问BJ的服务器没问题,通了,来看看IKE与IPSec的状态。
CS防火墙这边的状态IKE与SA信息都是正常的
看了BJ防火墙这边的SA信息,会留下疑问,BJ防火墙是没有写受保护流量的,但是SA信息里面生成了对应的,这个就是IPSec模板的效果。
模板配置里
面没有指定peer,当CS防火墙发起IPSec建立后,BJ防火墙会用对方过来的源地址作为tunnel remote地址填写进IPSec SA
模板配置里面没有明确写受保护流量ACL,会用CS防火墙发送过来的第二阶段里面的ACL进行填写,这里填写不是直接填写进去,它会对这个ACL进行镜像。
最终CS与BJ完成了IPSec的建立,可以看出来IPSec模板它是依赖于分支先发起建立,第一个是因为对方是动态的地址,所以无法事先知道,只能被动等待建立,第二个依赖对方发送过来的信息作为参考的,包括对方的公网地址信息、受保护的信息。整体下来只要分支的密钥对了、第一阶段的策略与第二阶段的策略对了,那建立隧道就会成功。接下来,看看CD_FW这边建立情况。
CD_FW能否成功建立呢?
CD这边有点特别,它的环境就跟普通家用网络一样,自动获取的地址,然后还不是公网地址,所以在上层运营商做了一层源NAT转换成实际公网地址出去上网,那么在这样的情况下IPSec还能建立起来吗?
首先测试了下,到外网是通的。(这个114.114.114.114是用互联网那台路由器模拟的)
在去ping 192.168.10.1,发现不通!!这个就要说IPSec在实际中的另外一种情况了。
IPSec在穿越NAT设备时解决办法
CD_FW跟BJ_FW之所以不能建立,因为CD_FW的环境特殊,它通过DHCP下发获取的地址上网的,获取到的就是猫(这里由路由器模拟)分配的地址192.168.1.0网段的,并不是公网地址,
这个时候如果CD_FW出去上网在经过上层设备的时候会被转换成一个实际的公网地址出去来完成上网,所以其实CD_FW的地址是经过了源NAT转换的。
这个时候就要从IPSec的应用开始说起了,IPSec是用来保护数据报文的安全性跟完整性(不被修改),而NAT则会改变报文地址中的IP地址,这个时候就冲突了,可以分析下,CD_Fw发起IPSec建立,IPSec建立是由IKE中的ISAKMP协议完成,会被封装成UDP的报文,源目端口号都是500,在经过NAT设备的时候,NAT能够直接转换地址与端口号,所以ISAKMP报文可以顺利通过完成NAT转换。但是数据实际是ESP或者AH来保护的,在NAT转换中就存在问题了。
AH协议
AH协议的作用是对数据完整性进行验证,会对整个数据包(包括新的IP头部)进行HASH计算,而NAT会改变IP地址,由于地址变了,自然HASH的结果也会变,所以AH是无法穿越NAT环境的。这个也是之前提到为什么AH在实际环境中不使用的原因。
ESP协议
ESP协议是会对数据包进行加密与验证保护,但是不包含新IP头部在内,所以IP地址在转换的过程中没有任何问题,但是对于ESP里面保护的TCP、UDP等应用来说,由于加密了无法进行转
NAT穿越
IPSec为了解决这个问题,提供一个新的技术,NAT穿越(也叫NAT-T),当两边的防火墙开启NAT穿越后,ESP报文会被封装在UDP报文中,源目端口号都为4500,有了这样的UDP头封装后,穿越NAT就没任何问题了。
ike peer BJ
nattraversal
启用NAT穿越其实很简单,就在ikepeer里面开启即可,双方都需要开启,而且这里要注意,在USG下一代防火墙中,该功能默认是开启的,但是在老UTM的设备,比如2200、5500系列需要手动开启,以及华为路由器跟其他厂商都需要注意下,是否默认开启或者需要手动开启。
既然下一代防火墙默认开了NAT-T功能,那为什么还建立不起来呢?
当30.2发起访问后,查看防火墙的状态,其实CD_FW已经开始跟BJ_FW建立了,并且有一个关键的地方,它状态里面使用的就是202.100.1.1:4500,但是在BJ_FW那边收到的是61.128.1.65:552,这是因为经过了互联网的NAT设备,转换成新的源地址跟端口号了,竟然设备都感知到NAT设备存在了,为什么建立不起来呢?
CD_Fw的安全策略
BJ_Fw的安全策略
CD_FW与BJ_FW的安全策略里面都只允许了UDP500通过,而没有放行4500,所以CD_FW这边就算检测到了NAT设备存在,用4500端口号发过去,但是对方也收不到,这边也发不出去。(这里思考下,为什么在CD_FW这边显示的是4500呢?建议抓包看看哦)
ip service-set udp500type object
service 0 protocol udp destination-port 500
service 1 protocol udp destination-port 4500
在CD_FW与BJ_FW这边把4500添加进去,在来看看。
通了!
这个时候来看两边的IKE信息,CD_FW这边都是4500,而BJ_FW这边看到是1320,这是因为中间被运营商设备给NAT了。
在IPSec SA里面就更能体现了,tunnel的源目地址后面有端口号4500以及被NAT转换了的端口号,并且在SA信息里面有一个提示UDP encapsulation user for NAT traversal的提示是Y的,说明NAT穿越是开启的。
而不需要NAT-T,则是正常的UDP500,提示也是N。
NAT-T是如何工作的?怎么判断是否需要开启NAT-T功能。
NAT穿越是否需要开启其实在IKE第一阶段里面就会进行判断,可以清空表项,重新建立抓包看看。
reset ike sa
reset ipse sa
在IKE交互的6个包里面,第一个与第二个是消息会标志双方支持的NAT-T的能力。
第三个与第四个包就比较关键了,有两个NAT-D,这两个包是协商双方通过NAT-D告诉对端,内容是发起方发送时候源和目的的IP地址与端口号的HASH值,附带这个HASH值的作用是
如果接收端收到以后通过计算得到一个HASH值与发送端发送过来的HASH值一样,则表示中间没有存在NAT设备,如果得到的结果不一样,就说明有NAT设备存在。(第一个NAT-D为对端的IP和端口的HASH值,第二个NAT-D为本端自己IP与端口的HASH值)发现了有NAT设备存在后,在第五个包开始就会使用4500端口号。
这里源端口号296,是因为经过了NAT设备,所以抓包看到的是296,在CD_FW发起的时候是4500的。同样在第二阶段以及后续的数据包都会用这个UDP封装来顺利通过NAT穿越。
正常的没经过NAT设备的,就直接是UDP500下面是ISKAMP报文,而有NAT设备的数据包则发生了一点改变,它是UDP4500(ipsec-nat-t)然后下面在多一个UDP封装IPSec报文
下面就是ESP加密报文了。
最终BJ_FW这边的SA信息是有两个站点的,一个来自于CS_FW,一个来至于CD_Fw的,每个站点都有对应的IKE SA信息与IPSEC SA信息。
CD_FW与CS_FW都能访问BJ_FW身后的资源,他们通过各自的IPSec SA信息来进行加密与解密。
实施的一些小经验分享
IPSec模板由于不知道对方地址在哪,所以在安全策略的时候,尽量”宽松”点放,
建议安全策略里面放行IKE的UDP500与4500,特别是总部这边
IPSec模板一般实施在总部或者有公网地址的一端
如果跟其他厂商对接的时候或者老一点的防火墙跟路由器设备,注意开启NAT-T功能,因为有的设备默认是关闭的。
思考:抓包会发现CD_Fw会一直给202.100.1.1发送一个包,NAT-KEEPALIVE的,而CS_FW没有,为什么呢?这个包有什么作用
“承上启下”
IPSec在遇到防火墙的安全策略与NAT策略的问题解决了,但是在实际中多数处于这样的环境,比如总部人多拉了专线,其他分支可能就用的普通的拨号宽带那种,那么这个时候IPSec要如何配置跟建立呢?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:shawn.lee@vecloud.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
标题:当一端没有固定IP时,IPSec又该如何应对
TAG标签:
地址:http://www.vecloud.com.cn/article/302.html