学习防火墙之前,对路由交换应要有一定的认识
- NAT Server
- 1.1.基本原理
- 1.2.多出口场景下的NAT Server
- 1.3.源进源出
——————————————————————————————————————————————————
NAT Server
一般对用户提供一些可访问的服务,这些服务器的地址一般都是私网地址,公网用户是无法直接访问私网地址。源NAT是对私网用户访问公网的报文的源地址进行转换,而服务器对公网提供服务时,是公网用户向私网发起访问,方向正好反过来了。于是,NAT转换的目标也由报文的源地址变成目的地址。针对服务器地址转换,称为:NAT Server(服务器映射)。
——————————————————————————————————————————————————
1.1.基本原理
结合下图所示来看防火墙上的NAT Server是如何实现。
NAT Server也需要用到公网IP地址,与源NAT不同的是,NAT Server的公网IP地址不需要放到NAT地址池这个容器中,直接使用即可。这里假设公网IP:210.1.1.1。
配置的过程如下:
[USG6000V2]nat server global 210.1.1.1 inside 192.168.100.1
按照上述配置会将服务器上所有的服务项都发布到公网,会带来严重风险,华为防火墙支持配置指定协议的NAT Server,只将服务器上特定的服务项对公网发布,可以按照如下方式,将服务器上的80端口映射为9980端口供公网用户使用。
nat server protocol tcp global 210.1.1.1 9980 inside 192.168.100.1 80
这里将80端口转换成9980端口,而不是转换成80端口,是因为一些地区的运营商默认会阻断80、8000、8080端口业务,而导致业务失败。
NAT Server配置完,也会生成server-map,但是是静态的,不需要报文来触发,只有配置被删除,server-map才会清除。
Server-map表项和之前一样,都存在正向和反向。不论是正向和反向,都仅只是实现地址转换。而不像ASPF的Server-map表项打开一个可以绕过安全策略检查的通道。所以无论公网用户要访问私网服务器还是私网服务器主动访问公网时,都需要配置安全策略。
这里有个经典的问题:NAT Server场景下,为了让公网用户能够访问私网服务器,配置安全策略时,策略的目的地址是服务器的私网地址还是公网地址?
当公网用户通过210.1.1.1:9980访问私网服务器时,防火墙收到报文的首包,首先查找匹配到Server-map表项,将报文的目的地址和端口转换为192.168.100.1:80。然后根据目的地址查找路由找到出接口。根据入接口和出接口所处的区域,判断报文在那两个安全区域流动,进行区域安全策略检查。
因此,配置安全策略,策略的目的地址应配置为服务器私网地址,而不是服务器对外映射的公网地址。
安全策略配置:
security-policy
rule name Nat_Ser
source-zone untrust
destination-zone trust
destination-address 192.168.100.0 mask 255.255.255.0
service http
action permit
报文通过安全检查后,会建立如下会话表,并将报文转发到私网服务器。
之后服务器对公网用户的请求做出响应,响应到达防火墙后匹配上面的会话表,防火墙将报文的源地址和源端口转换为210.1.1.1:9980,而后发送至公网。公网用户和私网服务器交互后续报文。防火墙都会直接根据会话表对其进行地址和端口转换,而不会再去查找Server-map表项。
配置黑洞路由
NAT Server也需要配置黑洞路由
ip route-static 210.1.1.1 32 NULL 0
——————————————————————————————————————————————————
1.2.多出口场景下的NAT Server
与源NAT相同,NAT Server也面临多出口问题。如图:通过ISP1和ISP2两条链路连接internet,将私网服务器提供给Internet上的用户访问。
防火墙作为出口网关,双出口、双ISP接入公网时,NAT Server配置通常需要一分为二,让一个私网服务器向两个ISP发布两个不同的公网地址供公网用户访问。一分为二方法有两种:
方法1:将接入不同ISP的公网接口规划在不同安全区域中,配置NAT Server时,带上Zone参数,使同一个服务器向不同安全区域发布不同的公网地址。
配置过程,假设私网服务器对ISP1发布公网地址:110.1.1.1,对ISP2发布的公网地址是210.1.1.1。
interface GigabitEthernet1/0/1
ip address 110.1.1.1 255.255.255.0
interface GigabitEthernet1/0/0
ip address 210.1.1.1 255.255.255.0
interface GigabitEthernet1/0/2
ip address 192.168.10.254 255.255.255.0
firewall zone trust
add interface GigabitEthernet1/0/2
firewall zone name ISP1
set priority 10
add interface GigabitEthernet1/0/1
firewall zone name ISP2
set priority 20
add interface GigabitEthernet1/0/0
配置带有zone参数的NAT Server
nat server zone ISP1 protocol tcp global 110.1.1.1 9980 inside 192.168.10.2 80
nat server zone ISP2 protocol tcp global 220.1.1.1 9980 inside 192.168.10.2 80
基于不同域间关系配置两条安全策略
security-policy
rule name ISP1
source-zone ISP1
destination-zone trust
destination-address 192.168.10.2 mask 255.255.255.255
action permit
rule name ISP2
source-zone ISP2
destination-zone trust
destination-address 192.168.10.2 mask 255.255.255.255
action permit
黑洞路由
ip route-static 110.1.1.1 255.255.255.255 NULL0
ip route-static 210.1.1.1 255.255.255.255 NULL0
配置完成后,防火墙会生成如下Server-map表项
从Server-map表项可以看出,正向和反向表项都已生成,Internet用户通过正向Server-map表项就可以访问私网服务器。私网服务器通过反向Server-map也可以主动访问Internet。
推荐在网络规划时,把防火墙与ISP1和ISP2两个接口分别加入到不同的安全区域,然后规划带有ZONE参数的NAT SERVER功能。
如果两个接口在同一区域如Untrust,并且现实情况不允许调整,那么还有另外一种配置方法。
方法二:配置NAT Server时候带上No-revers参数,使同一个服务器向外发布两个不同的公网地址。
为了保证可以正常配置NAT Server功能,必须使用no-reverse参数。
nat server 0 protocol tcp global 110.1.1.1 9980 inside 192.168.10.2 www no-reverse
nat server 1 protocol tcp global 210.1.1.1 9980 inside 192.168.10.2 www no-reverse
配置完成后,防火墙生成如下Server-map表项
从会话看出,只生成了正向表项,Internet上的公网用户通过正向表项可以访问私网服务器。但是如果私网服务器想要主动访问Internet,因为没有了反向表项,就必须在Trunst------Untrust域间配置源NAT策略。
如果在同一区域,不带No-reverse参数直接配置两条NAT SERVER命令,压根就不能同时下发。
思考下,假如这两条命令能同时下发,分两次下发。
第一条,反向表,将报文源地址192.168.10.2转换为110.1.1.1,第二条,反向表,将源地址192.168.10.2,转换为210.1.1.1,如果同时下发后,防火墙既可以将报文源地址由192.168.10.2转换为110.1.1.1,又可以将源地址192.168.10.2,转换为210.1.1.1,于是,防护墙凌乱了。这就是命令不带No-reverse参数同时下发出现的问题。如果带上no-reverse参数,就不会生成反向Server-map表项。
总结:
多出口下,两个接口分别配置两个区域,配置NAT Server时,配置zone参数,生成静态server-map表项,包含正向和反向,能区分反向的区域。
多出口下,两个接口同时配置一个区域,配置NAT Server时,配置no-reverse参数,生成静态server-map表项,只包含正向,无法区分反向的区域。
——————————————————————————————————————————————————
1.3.源进源出
上面介绍了NAT Server一分为二的配置方法,根据防火墙与ISP1和ISP2相连的2个接口是否加入到不同的安全区域,选择带有ZONE参数或带有No-Reverse参数来配置NAT Server。除此之外,双出口环境中,还需要考虑两个ISP中的公网用户使用哪个公网地址访问私网服务器的问题。
例如:ISP1网络中的公网用户如果通过防火墙发布了ISP2的公网地址来访问私网服务器,或者ISP1的公网用户访问服务器后,从ISP2回包的,基本就属于绕路了。而且有时候两个ISP之间由于利益冲突可能会存在无法互通的情况,就会导致访问过程很慢或干脆不通。
如第一种情况,要求我们向两个ISP中的公网用户告知公网地址时,避免两个ISP中的公网用户使用非本ISP的公网地址访问私网服务器。即对于ISP1的用户,就让其使用防火墙发布给ISP1的公网地址来访问私网服务器,对于ISP2的用户,就让使用防火墙发布的ISP2公网地址来访问。
第二种情况,就是上图情况,ISP1中的公网用户通过防火墙发布给ISP1的公网地址访问私网服务器,报文从防火墙G1/0/1进入,私网服务器回应报文到达防火墙后,虽然匹配了会话表并进行地址转换,但还是要根据目的地之查找路由来确定出接口。如果防火墙没有配置到该公网用户的明细路由,只配置了缺省路由,就可能会导致回应报文从连接ISP2的链路G1/0/0接口发出,该报文在ISP2的网络中传输时凶多吉少,有可能会变慢,也可能干脆就不能回到公网用户处,访问就会中断。
为了解决这个问题,可以在防火墙配置明细路由,让防火墙严格按照ISP1和ISP2各自的公网地址来选路。但ISP1和ISP2的公网地址数量很大,配置起来不太现实。为此,防火墙提供了源进源回(或源进源出)功能,即请求报文从某条路径进入,响应报文依然沿着同样的路径返回,而不用查找路由表来确定接口,保证了报文从一个接口进出。
源进源回功能在接口上配置,防火墙连接ISP1和ISP2的两个接口上都需要配置。假设,ISP1提供的下一跳接口是:110.1.1.254,ISP2提供的下一跳接口:210.1.1.254
interface GigabitEthernet1/0/1
redirect-reverse next-hop 110.1.1.254
interface GigabitEthernet1/0/0
redirect-reverse next-hop 210.1.1.254
其他根据版本不同所使用的命令:
reverse-route nexthop 110.1.1.254
gateway 110.1.1.254
reverse-route enable