在安全策略初体验一篇中,强叔提到,路由协议一般是不受安全策略控制的,防火墙直接允许路由协议的报文通过。强叔还提到,这和具体产品实现有关,不同型号的产品会有差异。大家看完帖子后感觉有点语焉不详,纷纷向强叔咨询这个问题。今天,强叔就使用华为防火墙USG9000(软件版本为V300R001)来实际验证一把,看一看当安全策略遇上OSPF路由协议时,会发生什么事情。
需要说明一点,本篇验证的是防火墙本身参与到OSPF路由计算的场景,即验证防火墙接口所在安全区域与Local区域之间是否需要开启安全策略。而防火墙本身不参与OSPF路由计算,只是二层转发OSPF路由报文的场景中,如果防火墙的接口属于不同的安全区域,则需要开启安全区域之间的安全策略,允许OSPF路由报文通过。
我们使用一台USG9000防火墙和两台路由器搭建一个简单的网络环境,网络拓扑如下图所示:
根据下表中的数据,在USG9000上配置接口的IP地址、将接口加入安全区域、开启OSPF功能,以及在路由器R1和R2上配置接口的IP地址、开启OSPF功能。具体配置过程在这里不再赘述。
配置项 | USG9000 | R1 | R2 |
接口 | # interface GigabitEthernet1/1/9 ip address 30.1.1.10 255.255.255.0 # | # interface GigabitEthernet5/0/0 ip address 30.1.1.11 255.255.255.0 # interface GigabitEthernet5/0/1 ip address 50.1.1.11 255.255.255.0 # | # interface GigabitEthernet0/0/4 ip address 50.1.1.10 255.255.255.0 # |
安全区域 | # firewall zone untrust set priority 5 add interface GigabitEthernet1/1/9 # | - | - |
OSPF | # ospf 1 area 0.0.0.1 network 30.1.1.0 0.0.0.255 # | # ospf 1 area 0.0.0.1 network 30.1.1.0 0.0.0.255 network 50.1.1.0 0.0.0.255 # | # ospf 1 area 0.0.0.1 network 50.1.1.0 0.0.0.255 # |
默认情况下,防火墙上没有开启GE1/1/9接口所在的Untrust区域和Local区域之间的安全策略,这两个区域之间不允许报文通过。我们在防火墙上使用display ospf peer命令查看OSPF的邻接关系:
在路由器R1上使用display ospf peer命令查看OSPF的邻接关系:
在USG9000和R1上看到的OSPF邻接状态都为ExStart,我们根据下面的OSPF邻接关系建立过程示意图,发现OSPF邻接关系没建立起来,因为USG9000和R1之间没有成功交换DD(Database Description)报文。
此时,我们怀疑有可能是USG9000丢弃了DD报文。在USG9000上使用display firewall statistic system discarded命令查看丢包信息:
上面的信息表示缺省包过滤将报文丢弃,而且被丢弃报文的个数还在不断增长,说明OSPF模块在不断地尝试发送DD报文,但都被安全策略模块丢弃了。
接下来我们在USG9000上开启Local区域和Untrust区域之间的安全策略,允许OSPF报文通过。注意,因为USG9000既要发送DD报文又要接收DD报文,所以Inbound和Outbound方向上的安全策略都要开启。如下:
强叔提示:这里为了精确匹配OSPF协议,我们使用了系统提供的ospf服务集,如果防火墙中没有提供这个服务集,我们可以自己创建一个服务集,协议号设置为89即可。
然后分别在USG9000和R1上使用display ospf peer命令查看OSPF的邻接关系(可能需要等待几分钟的时间才会出现下面的结果,或者可以使用reset ospf process命令重启OSPF进程,就可以很快看到结果):
此时可以看到OSPF邻接建立成功,同时USG9000上已经存在了通过OSPF路由协议学习到的去往50.1.1.0这个网段的路由:
我们来总结一下,对于防火墙USG9000来说,需要开启接口所在安全区域和Local区域之间的安全策略,允许OSPF报文通过,这样防火墙才能和相连的设备正常建立邻接关系。
实际上,我们可以从另外一个角度来考虑这个问题:单播报文和组播报文。对于防火墙来说,一般情况下,单播报文是要经过安全策略的检查,所以需要开启安全策略允许报文通过;而组播报文不经过安全策略的检查,也就不需要开启相应的安全策略。
那么在OSPF中,哪些报文是单播哪些报文是组播呢?不同的网络类型,OSPF报文的发送形式也不相同,如下表所示。
强叔提示:我们可以在接口上执行ospf network-type命令来修改OSPF的网络类型。
网络类型 | Hello | Database Description | Link State Request | Link State Update | Link State Ack |
Broadcast | 组播 | 单播 | 单播 | 组播 | 组播 |
P2P | 组播 | 组播 | 组播 | 组播 | 组播 |
NBMA | 单播 | 单播 | 单播 | 单播 | 单播 |
P2MP | 组播 | 单播 | 单播 | 单播 | 单播 |
从表中可以看出,网络类型是Broadcast类型时,OSPF报文中的DD报文和LSR报文是单播报文,需要开启安全策略;网络类型是P2P时,OSPF报文都是组播报文,因此无需开启安全策略。NBMA和P2MP类型也是同理。
最后再次提醒,上面的验证结论基于华为防火墙USG9000 V3R1版本,并不适用于其他型号的防火墙产品。本篇主要还是提供一种验证思路,大家可以参考强叔的操作过程来验证华为USG2000、USG5000和USG6000系列防火墙产品,看一看在这些防火墙产品上是否需要开启安全策略。另外,在实际网络环境中,如果防火墙上运行的OSPF状态不正常,大家也可以从安全策略这个角度入手,检查是不是由于没有开启安全策略而导致的。
转载于:https://blog.51cto.com/hanjh8/1580770