防火墙NAT转换
NAT的优点:
- 可以使一个局域网中的多台主机使用少数的合法地址访问外部的资源,也可以设定内部的WWW、FTP、Telnet等服务提供给外部网络使用,解决了IP地址日益短缺的问题。
- 对于内外网络用户,感觉不到IP地址转换的过程,整个过程对于用户来说是透明的。
- 对内网用户提供隐私保护,外网用户不能直接获得内网用户的IP地址、服务等信息,具有一定的安全性。
- 通过配置多个相同的内部服务器的方式可以减小单个服务器在大流量时承担的压力,实现服务器负载均衡。
NAT的不足:
- 由于需要对数据报文进行IP地址的转换,涉及IP地址的数据报文的报头不能被加密。在应用协议中,如果报文中有地址或端口需要转换,则报文不能被加密。例如,不能使用加密的FTP连接,否则FTP的port命令不能被正确转换。
- 网络监管变得更加困难。例如,如果一个黑客从内网攻击公网上的一台服务器,那么要想追踪这个攻击者很难。因为在报文经过NAT转换设备的时候,地址经过了转换,不能确定哪台才是黑客的主机。
NAT类型(三种)
- 源NAT(Source NAT):用来使多个私网用户能够同时访问Internet。
- 地址池方式:采用地址池中的公网地址为私网用户进行地址转换,适合大量的私网用户访问Internet的场景。
- 出接口地址方式(Esay IP):内网主机直接借用公网接口的IP地址访问Internet,特别适用于公网接口IP地址是动态获取的情况。
NAT No-PAT 方式的配置过程如下。
(1)配置NAT地址池和NAT策略
配置NAT地址池:
[FW]nat address-group 1 202.1.1.2 202.1.1.3 //地址池中配置两个公网 IP地址
配置NAT策略:
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 1
[FW- nat- policy- interzone- trust- untrust- outbound-1]policy source192.168.0.0
0.0.0.255 //匹配条件
[FW-nat-policy-interzone-trust-untrust-outbound-1]action source-nat //动作为进行源NAT转换
[FW-nat-policy-interzone-trust-untrust-outbound-1] address-group 1 no-pat//引用NAT地址池并指定转换方式为No-PAT 不加no-pat就是NAPT
[FW-nat-policy-interzone-trust-untrust-outbound-1] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
完成NAT的相关配置后,接下来强叔还要强调两个重要配置:安全策略和黑洞路由。
(2)配置安全策略
安全策略和NAT策略从字面上看很相近,但是二者各司其职:安全策略的作用是控制报文能否通过防火墙,而NAT策略的作用是对报文进行地址转换,因此配置NAT的时候也需要配置安全策略允许报文通过。由于防火墙对报文进行安全策略处理发生在进行NAT策略处理之前,所以如果要针对源地址设置安全策略,则源地址应该是进行NAT转换之前的私网地址。
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 1
[FW-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-1] action permit
[FW-policy-interzone-trust-untrust-outbound-1] quit
[FW-policy-interzone-trust-untrust-outbound] quit
(3)配置黑洞路由
黑洞路由是一个让报文“有去无回”的路由,它的效果就是让防火墙丢弃命中黑洞路由的报文。为了避免产生路由环路,在防火墙上必须针对地址池中的公网IP地址配置黑洞路由。
[FW] ip route-static 202.1.1.2 32 NULL 0
[FW] ip route-static 202.1.1.3 32 NULL 0
Easy-IP方式的配置过程如下。
(1)配置NAT策略
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-nat-policy-interzone-trust-untrust-outbound-1] action source-nat
[FW-nat-policy-interzone-trust-untrust-outbound-1] easy-ip GigabitEthernet1/0/2 //指定出接口
[FW-nat-policy-interzone-trust-untrust-outbound-1] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
(2)配置安全策略
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 1
[FW-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-1] action permit
[FW-policy-interzone-trust-untrust-outbound-1] quit
[FW-policy-interzone-trust-untrust-outbound] quit
Smart NAT 方式的配置过程如下。
(1)配置NAT地址池
[FW] nat address-group 1
[FW-address-group-1] mode no-pat local
[FW-address-group-1] smart-nopat 202.1.1.3 //预留地址
[FW-address-group-1] section 1 202.1.1.2 202.1.1.2 //section中不能包含预留地址
[FW-address-group-1] quit
(2)配置NAT策略
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-nat-policy-interzone-trust-untrust-outbound-1] action source-nat
[FW-nat-policy-interzone-trust-untrust-outbound-1] address-group 1//引用NAT地址池
[FW-nat-policy-interzone-trust-untrust-outbound-1] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
(3)配置安全策略
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 1
[FW-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-1] action permit
[FW-policy-interzone-trust-untrust-outbound-1] quit
[FW-policy-interzone-trust-untrust-outbound] quit
(4)配置黑洞路由
[FW] ip route-static 202.1.1.2 32 NULL 0
[FW] ip route-static 202.1.1.3 32 NULL 0
三元组NAT
- 对外呈现端口一致性
- PC1访问P2P服务器后,在一段时间内,PC1再次访问P2P服务器或者访问Internet上的其他主机时,防火墙都会将PC1的端口转换成相同的端口,这样就保证了PC1对外所呈现的端口的一致性,不会动态变化
- 支持外网主动访问
- 无论PC1是否访问过PC2,只要PC2获取到PC1经过NAT转换后的地址和端口,就可以主动向该地址和端口发起访问。防火墙上即使没有配置相应的安全策略,也允许此类访问报文通过。
三元组 NAT 方式的配置过程如下
(三元组 NAT 不能配置黑洞路由,否则会影响业务)。
(1)配置NAT地址池
[FW] nat address-group 1
[FW-address-group-1]mode full-cone local //指定模式为三元组NAT方式
[FW-address-group-1] section 1 202.1.1.2 202.1.1.3
[FW-address-group-1] quit
(2)配置NAT策略
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-nat-policy-interzone-trust-untrust-outbound-1] action source-nat
[FW-nat-policy-interzone-trust-untrust-outbound-1]address-group 1 //引用NAT地址
池
[FW-nat-policy-interzone-trust-untrust-outbound-1] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
(3)配置安全策略
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 1
[FW-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-1] action permit
[FW-policy-interzone-trust-untrust-outbound-1] quit
[FW-policy-interzone-trust-untrust-outbound] quit
完成上述配置后,内部网络中的P2P客户端访问P2P服务器,在防火墙上可以查看到会
NAT ALG
- 在以太网数据帧结构中,IP首部包含32位的源IP地址和32位的目的IP地址,TCP首部包含16位的源端口号和16位的目的端口号。
- 但是很多协议会通过IP报文的数据载荷进行新端口甚至新IP地址的协商。协商完成之后,通信双方会根据协商结果建立新的连接进行后续报文的传输。而这些协商出来的端口和IP地址往往是随机的,管理员并不能为其提前配置好相应的NAT规则,这些协议在NAT转换过程中就会出现问题。
- 普通NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,比如多媒体协议(H.323、SIP等)、FTP、SQLNET等,TCP/UDP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换,就可能导致问题。而NAT ALG(Application Level Gateway,应用层网关)技术能对多通道协议进行应用层报文信息的解析和地址转换,将载荷中需要进行地址转换的IP地址和端口或者需特殊处理的字段进行相应的转换和处理,从而保证应用层通信的正确性。
- 例如,FTP应用就由数据连接和控制连接共同完成,而且数据连接的建立动态地由控制连接中的载荷字段信息决定,这就需要ALG来完成载荷字段信息的转换,以保证后续数据连接的正确建立。
- 为了实现应用层协议的转发策略而提出了ASPF功能。ASPF功能的主要目的是通过对应用层协议的报文分析,为其开放相应的包过滤规则,而NAT ALG的主要目的,是为其开放相应的NAT规则。由于两者通常都是结合使用的,所以使用同一条命令就可以将两者同时开启。
NAT Server :用来使外网用户能够访问私网服务器。
-
静态映射(NAT Server):公网地址和私网地址一对一进行映射,用在公网用户访问私网内部服务器的场景。
-
NAT Server,即内部服务器。NAT隐藏了内部网络的结构,具有“屏蔽”内部主机的作用。但是在实际应用中,可能需要提供给外部一个访问内部主机的机会,如提供给外部一台WWW的服务器,而外部主机根本没有指向内部地址的路由,因此无法正常访问。这时可以使用内部服务器(Nat Server)功能来实现这个功能应用。
-
使用NAT可以灵活地添加内部服务器。例如:可以使用202.202.1.1等公网地址作为Web服务器的外部地址,甚至还可以使用202.202.1.1 :8080这样的IP地址加端口号的方式作为Web的外部地址。
-
外部用户访问内部服务器时,有如下两部分操作:
- 防火墙将外部用户的请求报文的目的地址转换成内部服务器的私有地址。
- 防火墙将内部服务器的回应报文的源地址(私网地址)转换成公网地址。
-
防火墙支持基于安全区域的内部服务器。例如,当需要对处于多个网段的外部用户提供访问服务时,防火墙结合安全区域配置内部服务器可以为一个内部服务器配置多个公网地址。通过配置防火墙的不同级别的安全区域对应不同网段的外部网络,并根据不同安全区域配置同一个内部服务器对外的不同的公网地址,使处于不同网段的外部网络访问同一个内部服务器时,即通过访问对应配置的公网地址来实现对内部服务器的访问能力。
多出口场景下的NAT Server
方案一
(1)将接口分别加入到不同的安全区域
[FW] firewall zone dmz
[FW-zone-dmz] add interface GigabitEthernet1/0/4
[FW-zone-dmz] quit
[FW] firewall zone name isp1
[FW-zone-isp1] set priority 10
[FW-zone-isp1] add interface GigabitEthernet1/0/2
[FW-zone-isp1] quit
[FW] firewall zone name isp2
[FW-zone-isp2] set priority 20
[FW-zone-isp2] add interface GigabitEthernet1/0/3
[FW-zone-isp2] quit
(2)配置带有zone 参数的NAT Server
[FW] nat server zone isp1 protocol tcp global 1.1.1.20 9980 inside 172.16.0.2 80
[FW] nat server zone isp2 protocol tcp global 2.2.2.20 9980 inside 172.16.0.2 80
(3)基于不同的域间关系配置两条安全策略
[FW] policy interzone isp1 dmz inbound
[FW-policy-interzone-dmz-isp1-inbound] policy 1
[FW-policy-interzone-dmz-isp1-inbound-1] policy destination 172.16.0.2 0
[FW-policy-interzone-dmz-isp1-inbound-1] policy service service-set http
[FW-policy-interzone-dmz-isp1-inbound-1] action permit
[FW-policy-interzone-dmz-isp1-inbound-1] quit
[FW-policy-interzone-dmz-isp1-inbound] quit
[FW] policy interzone isp2 dmz inbound
[FW-policy-interzone-dmz-isp2-inbound] policy 1
[FW-policy-interzone-dmz-isp2-inbound-1] policy destination 172.16.0.2 0
[FW-policy-interzone-dmz-isp2-inbound-1] policy service service-set http
[FW-policy-interzone-dmz-isp2-inbound-1] action permit
[FW-policy-interzone-dmz-isp2-inbound-1] quit
[FW-policy-interzone-dmz-isp2-inbound] quit
(4)黑洞路由的配置必不可少
[FW] ip route-static 1.1.1.20 32 NULL 0
[FW] ip route-static 2.2.2.20 32 NULL 0
方案二
配置带有no-reverse 参数的NAT Server。
[FW] nat server protocol tcp global 1.1.1.20 9980 inside 172.16.0.2 80 no-reverse
[FW] nat server protocol tcp global 2.2.2.20 9980 inside 172.16.0.2 80 no-reverse
源进源出
私网服务器的回应报文到达防火墙后,虽然匹配了会话表并进行了地址转换,但还是要根据目的地址查找路由来确定出接口。如果防火墙上没有配置到该公网用户的明细路由,只配置了缺省路由,就可能会导致回应报文从连接ISP2的链路即GE1/0/3接口发出。该报文在ISP2的网络中传输时凶多吉少,很有可能就回不到ISP1中,访问就会中断。
[FW] interface GigabitEthernet 1/0/2
[FW-GigabitEthernet1/0/2] redirect-reverse nexthop 1.1.1.254
如果是USG2000/5000系列防火墙,相应的配置命令是:
[FW] interface GigabitEthernet 1/0/2
[FW-GigabitEthernet1/0/2] reverse-route nexthop 1.1.1.254
如果是USG6000系列防火墙,相应的配置命令是:
[FW] interface GigabitEthernet 1/0/2
[FW-GigabitEthernet1/0/2] gateway 1.1.1.254
[FW-GigabitEthernet1/0/2] reverse-route enable
双向NAT(域间)
当配置NAT Server时,服务器需要配置到公网地址的路由才可正常发送回应报文。如果要简化配置,避免配置到公网地址的路由,则可以对外网用户的源IP地址也进行转换,转换后的源IP地址与服务器的私网地址在同一网段。这样内部服务器会缺省将回应报文发给网关,即设备本身,由设备来转发回应报文。
- 防火墙将用户的请求报文的目的地址转换成FTP服务器的内网IP地址,源地址转换成用户对外公布的IP地址。
- 防火墙将FTP服务器回应报文的源地址转换成对外公布的地址,目的地址转换成用户的内网IP地址。
[FW] nat server protocol tcp global 1.1.1.1 9980 inside 10.1.1.2 80
源NAT的配置。
[FW] nat address-group 1 10.1.1.100 10.1.1.100
[FW] nat-policy interzone untrust dmz inbound
[FW-nat-policy-interzone-dmz-untrust-inbound] policy 1
[FW-nat-policy-interzone-dmz-untrust-inbound-1] policy destination 10.1.1.2 0//由于先进行NAT Server 转换,再进行源NAT转换,所以此处的目的地址是NAT Server 转换后的地址,
即服务器的私网地址
[FW-nat-policy-interzone-dmz-untrust-inbound-1] action source-nat
[FW-nat-policy-interzone-dmz-untrust-inbound-1] address-group 1
[FW-nat-policy-interzone-dmz-untrust-inbound-1] quit
[FW-nat-policy-interzone-dmz-untrust-inbound] quit
双向NAT(域内)
[FW] nat server protocol tcp global 1.1.1.1 9980 inside 10.1.1.2 80
域内NAT的配置,域内NAT的配置和域间NAT几乎完全一样,只不过前者在域内进行NAT转换,后者在域间进行NAT转换。
[FW] nat address-group 1 1.1.1.100 1.1.1.100//公网地址或私网地址均可,不能和私网服
务器的地址在同一网段
[FW] nat-policy zone trust
[FW-nat-policy-zone-trust] policy 1
[FW-nat-policy-zone-trust-1] policy destination 10.1.1.2 0//由于先进行NAT Server 转换,再进行域内NAT转换,所以此处的目的地址是NAT Server 转换后的地址,即服务器的私网地址
[FW-nat-policy-zone-trust-1] action source-nat
[FW-nat-policy-zone-trust-1] address-group 1
[FW-nat-policy-zone-trust-1] quit
[FW-nat-policy-zone-trust] quit
NAT 场景下黑洞路由的作用
(1)配置NAT地址池
[FW] nat address-group 1 202.1.1.10 202.1.1.10
(2)配置NAT策略
[FW] nat-policy interzone trust untrust outbound
[FW-nat-policy-interzone-trust-untrust-outbound] policy 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-nat-policy-interzone-trust-untrust-outbound-1] action source-nat
[FW-nat-policy-interzone-trust-untrust-outbound-1] address-group 1
[FW-nat-policy-interzone-trust-untrust-outbound-1] quit
[FW-nat-policy-interzone-trust-untrust-outbound] quit
(3)配置安全策略
[FW] policy interzone trust untrust outbound
[FW-policy-interzone-trust-untrust-outbound] policy 1
[FW-policy-interzone-trust-untrust-outbound-1] policy source 192.168.0.0 0.0.0.255
[FW-policy-interzone-trust-untrust-outbound-1] action permit
[FW-policy-interzone-trust-untrust-outbound-1] quit
[FW-policy-interzone-trust-untrust-outbound] quit
配置缺省路由,下一跳指向路由器接口的地址202.1.1.2。
[FW] ip route-static 0.0.0.0 0 202.1.1.2
NAT地址池地址是202.1.1.10,防火墙与路由器相连接口的地址是202.1.1.1,掩码是30位,NAT地址池地址与防火墙公网接口地址不在同一网段。
公网上的一台PC,主动访问防火墙上的NAT地址池地址(ping),会发生什么情况呢?
答:无法ping通,因为NAT地址池只有在转换私网地址的时候才会用到,私网 PC 必须先发起访问请求,防火墙收到该请求后才会为其转换地址,NAT地址池地址并不对外提供任何单独的服务。所以当公网PC主动访问NAT地址池地址时,报文无法穿过防火墙到达私网PC。
公网PC主动访问NAT地址池地址的报文,在防火墙和路由器之间相互转发,直到TTL变成0之后,被最后收到该报文的设备丢弃
[FW] ip route-static 202.1.1.10 32 NULL 0
NAT Server 场景下的黑洞路由
[FW] nat server global 202.1.1.20 inside 192.168.0.20
公网PC访问202.1.1.20的报文,目的地址都会被转换成192.168.0.20,然后发送给私网Web服务器,这个时候自然不会产生路由环路。但是如果我们配置了一条精细化的NAT Server,只把私网Web 服务器特定的端口发布到公网上,如:
[FW] nat server protocol tcp 202.1.1.20 9980 inside 192.168.0.20 80
公网PC不没有访问202.1.1.20的80端口,而是使用ping命令访问202.1.1.20,防火墙收到该报文后,既无法匹配 Server-map 表,也无法匹配会话表,就只能查找路由转发,从GE1/0/2接口送出去。而路由器收到报文后,还是要送到防火墙,这样依然会产生路由环路。
NAT 黑洞路由总结
- 对于源NAT来说:
- 如果NAT 地址池地址与公网接口地址不在同一网段,必须配置黑洞路由;
- 如果NAT 地址池地址与公网接口地址在同一网段,建议也配置黑洞路由。
- 对于指定了特定协议和端口的NAT Server 来说:
- 如果NAT Server的Global地址与公网接口地址不在同一网段,必须配置黑洞路由;
- 如果NAT Server的Global地址与公网接口地址在同一网段,建议也配置黑洞路由。
- 除了防止路由环路、节省设备的系统资源,其实黑洞路由还有一个作用,那就是在防火墙上引入到OSPF中,保证路由器可以把去往NAT地址池地址或NAT Server的Global地址的报文
发送到防火墙。