当安全策略遇上OSPF

在安全策略初体验一篇中,强叔提到,路由协议一般是不受安全策略控制的,防火墙直接允许路由协议的报文通过。强叔还提到,这和具体产品实现有关,不同型号的产品会有差异。大家看完帖子后感觉有点语焉不详,纷纷向强叔咨询这个问题。今天,强叔就使用华为防火墙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状态不正常,大家也可以从安全策略这个角度入手,检查是不是由于没有开启安全策略而导致的。

 

你可能感兴趣的:(当安全策略遇上OSPF)