学习防火墙之前,对路由交换应要有一定的认识
- 1.源NAT场景下的黑洞路由
- 2.NAT Server场景下的路由黑洞
- 3.总结
- 4.黑洞路由其他作用
——————————————————————————————————————————————————
1.源NAT场景下的黑洞路由
先搭建一个典型的源NAT组网环境。
防火墙上NAT相关配置如下:
1、配置NAT地址池
nat address-group GW section 0 110.1.1.10 110.1.1.10
2、配置NAT策略
nat-policyrule name sounatsource-zone trustdestination-zone untrustsource-address 192.168.100.0 mask 255.255.255.0action source-nat address-group GW
3、配置安全策略
security-policyrule name sounatpolicysource-zone trustdestination-zone untrustsource-address 192.168.100.0 mask 255.255.255.0action permit
4、默认路由
ip route-static 0.0.0.0 0.0.0.0 110.1.1.2
NAT地址池是110.1.1.10,防火墙与路由器相连接口地址是110.1.1.0/30,NAT地址池和防火墙公网接口地址不在同一网段。
正常情况下,私网PC访问公网WEB服务器,会生成会话表,源地址进行了转换,一切都没有问题。
此时,如果公网上的一台PC,主动访问防火墙的NAT地址池地址,会发生什么情况?
在公网WEB执行Ping 110.1.1.10,发现无法Ping通。
显然,这是正常的结果,因为NAT地址池只有在转换私网地址的时候才会用到,也就是说,私网PC必须先发起访问请求,防火墙收到该请求后才会为其转换地址。NAT地址池地址并不对外提供任何单独的服务。所以当公网PC主动访问NAT地址池地址时,报文无法穿过防火墙到达私网PC,结果肯定不通。
但实际情况远远没有这么简单,我们在防火墙的G1/0/0口上抓包,然后再次在公网WEB上执行PING 110.1.1.10命令,使用-c 1参数,就Ping一次报文。
不看不知道,一看吓一跳,报文的TTL值逐一递减,最后变为1。
TTL是报文的生存时间,每经过一台设备的转发,TTL值减1,当TTL值为0时,就会被设备丢弃。这说明公网PC主动访问NAT地址池地址的报文,在防火墙和路由器之间相互转发。
梳理下过程:
1、路由器收到公网PC访问NAT地址池地址报文后,发现目的地址不是自己的直连网段,因此查找路由表,发送到防火墙。
2、防火墙收到报文后,该报文不属于私网访问公网的回程报文,无法匹配会话表,同时目的地址也不是自己的直连网段(防火墙没有意识到该报文的目的地址是自己的NAT地址池地址),只能根据缺省路由来转发。因为报文从同一接口入和出,相当于一个安全区域流动,默认情况下不受安全策略控制,这样报文又从防火墙出接口发送至路由器。
3、路由器收到该报文后,再次查找路由表,还是发送到防火墙,如此反复。
下来我们配置一条路由黑洞,为了避免影响其他业务,将掩码设置为32位。
ip route-static 110.1.1.10 255.255.255.255 NULL0
第二种方法:在防火墙配置NAT地址池时,配置命令:
nat address-group GW route enablesection 0 110.1.1.10 110.1.1.10
两者作用相同
Ping了一次,抓到了1个ICMP报文,说明防火墙收到路由器发送过来的报文后,匹配到了黑洞路由,直接将报文丢弃。此时就不会在防火墙和路由器之间产生路由环路,及时收到再多的报文,都会送到黑洞中。且不会影响正常业务。
上面只是用了一个Ping报文来演示这个过程,如果公网上的捣乱分子利用成千上万的PC主动向NAT地址池地址发起大量访问,无数的报文就会在防火墙和路由器之间循环,占用链路带宽资源,消耗大量的系统资源来处理这些报文,可能会导致正常报文无法处理。
所以,在防火墙上NAT地址池地址和公网接口地址不在同一网段时,必须配置路由黑洞,避免在防火墙和路由器之间产生路由环路。
———————————————————————
如果NAT地址池和防火墙公网接口地址在同一网段,还会出现这种问题?再次验证下。
interface GigabitEthernet1/0/0ip address 110.1.1.1 255.255.255.0
在来Ping抓包看看。
抓到了ARP报文和ICMP报文,但是没有在防火墙和路由器之间相互转发。过程:
1、路由器收到PC访问NAT地址池地址报文后,发现目的地址属于自己的直连网段,发送ARP请求,防火墙会回应这个ARP请求,前两个ARP就是来完成这一交互过程。路由器使用防火墙告知的MAC地址封装报文,发送至防火墙。
2、防火墙收到后,发现报文的目的地址和自己的G1/0/0接口在同一网段,直接发送ARP请求报文,寻找该地址的MAC地址(防火墙依然没有意识到该报文的目的地址是自己的NAT地址池地址),但是网络中其他设备都没有配置这个地址,肯定就不会回应,最终防火墙将报文丢弃。
所以说,在这种情况下不会产生路由环路,但是如果公网上捣乱分子发起大量访问时,防火墙将发送大量ARP请求报文,也会消耗系统资源。所以,当防火墙上NAT地址池地址和公网接口地址在同一网段时,建议也配置黑洞路由,避免防火墙发送ARP请求报文,节省防火墙系统资源。
ip route-static 110.1.1.10 32 NULL 0
配置了路由黑洞后,防火墙再也不会发送ARP请求报文。
———————————————————————
还有一种极端的情况,配置源NAT时,直接把公网接口地址作为转换后地址Easy-IP方式。也可以把公网接口地址配置成地址池地址。这样NAT转换使用的地址和公网接口地址是同一个地址。
Easy-IP方式下不需要配置路由黑洞。防火墙收到PC报文后,发现访问自身报文,这时候取决于公网接口所属安全区域和Local区域之间的安全策略。安全策略允许通过就处理,安全策略不允许通过,就丢弃。不会产生环路,也不需要配置黑洞路由。
——————————————————————————————————————————————————
2.NAT Server场景下的路由黑洞
NAT Server也存在环路的问题,不过发生环路的前提条件比较特殊,要看NAT Server是怎么配置的。先看看NAT Server Global地址和公网接口地址不再同一网段的情况。
假设接口地址、安全策略、安全区域、路由都已完成配置。
如果我们在防火墙上配置一条粗犷型NAT Server,将私网Web服务器发布到公网。
nat server 0 global 110.1.1.10 inside 192.168.100.2
公网PC访问110.1.1.10,目的地址都会转换成192.168.100.2,然后发送给私网Web服务器,自然不会产生环路。
但是如果配置了一条精细化的NAT Server,只把私网Web服务器特定的端口发布到公网上:
nat server protocol tcp global 110.1.1.10 8889 inside 192.168.100.2 80
此时,如果公网PC不按常理出牌,没有访问110.1.1.10的8889端口,而使用ping命令访问110.1.1.10,防火墙收到该报文,既无法匹配server-map表,也无法匹配会话表,就只能查找路由,从G1/0/0接口发出,路由器收到报文后,还是送到防火墙,依然产生环路。
所以,当防火墙配置了特定协议和端口的NAT Server并且NAT Server的Global地址和公网接口地址不在同一网段,必须配置路由黑洞,避免在防火墙和路由器之间产生环路。
如果NAT Server的Global地址和公网接口地址在同一网段,会发送ARP请求,和上面说的情况是一样的。
所以,当防火墙配置了特定协议和端口的NAT Server并且NAT Server的Global地址和公网接口地址在同一网段,建议也配置路由黑洞,避免在防火墙发送ARP请求报文,节省防火墙系统资源。
如果配置NAT Server时,把公网接口地址配置成Global地址,防火墙收到PC报文,匹配Server-map表然后转换目的地址,发送到特定私网。如果匹配不上Server-map表,就会认为是访问自身报文,由公网接口所属安全区域和Local区域之间安全策略决定如何处理,不会产生环路,也不需要配置黑洞路由。
——————————————————————————————————————————————————
3.总结
源NAT来说:
—————————————————
如果NAT地址池地址与公网接口地址不在同一网段,必须配置黑洞路由。
如果NAT地址池地址与公网接口地址在同一网段,建议配置黑洞路由。
对于特定协议和端口的NAT Server来说:
—————————————————
如果NAT Server的Global地址与公网接口地址不在同一网段,必须配置路由黑洞。
如果NAT Server的Global地址与公网接口地址在同一网段,建议配置路由黑洞。
——————————————————————————————————————————————————
4.黑洞路由其他作用
除了防止环路,节省系统资源,其实黑洞路由还有一个作用,就是在防火墙上引入到OSPF中,发布给路由器。
当NAT地址池地址或NAT Server的Global地址与公网接口地址不在同一网段,在路由器上需要配置静态路由,保证路由器可以把去往NAT地址池地址或NAT Server的Global地址的报文发送到防火墙。
[Router]ip route-static 110.1.1.10 255.255.255.255 110.1.1.1
如果防火墙和路由器之间运行OSPF协议,那么可以通过OSPF协议来学习路由,减少手动配置的工作量,但是NAT地址池不同于接口地址,无法在OSPF中通过network命令发布,路由器如何才能学到路由?
此时可以使用OSPF中引入静态路由方式,把黑洞路由引入到OSPF中,然后通过OSPF发布给路由器。 这样路由器就知道去往NAT地址池地址或NAT Server的Global地址的报文都要发送到防火墙上。
ospf 100import-route staticarea 0.0.0.0network 110.1.1.0 0.0.0.3
——————————————————————————————————————————————————