HCNA安全-防火墙之NAT技术

为何需要NAT?

NAT技术主要应用是实现大量的私网地址对少量公网地址的转换,保障通信在基础上节约IP地址资源

私网地址不能再公网中路由,否则将导致通信混乱

知识延伸

ipv4的地址分类:

为了便于对IP地址进行管理, 根据IPv4地址的第一个字节,IPv4地址可以分为以下五类。

分类

IP地址范围

公网IP范围

私网IP范围

特殊地址

A

0.0.0.0 – 127.255.255.255

1.0.0.0~9.255.255.255

11.0.0.0~126.255.255.255

10.0.0.0~10.255.255.255

0.0.0.0只能做源地址127.X.X.X是保留地址,用做环回测试

B

128.0.0.0-191.255.255.255

128.0.0.0~172.15.255.255

172.32.0.0~191.255.255.255

172.16.0.0~172.31.255.255

169.254.x.x,本地保留地址

C

192.0.0.0-223.255.255.255

192.0.0.0~192.168.255.255

192.169.0.0~223.255.255.255

192.168.0.0~192.168.255.255


D

224.0.0.0-239.255.255.255



组播地址

E

240.0.0.0-255.255.255.255

保留

保留

255.255.255.255是广播地址

NAT技术基本原理

通过对IP报文头中的源地址或者目的地址进行转换,可以使大量的私网IP地址通过共享少量的公网IP地址来访问公网

NAT的分类

源NAT:地址池方式、出接口地址方式(Easy ip)

服务器映射:静态NAT(NAT server)、目的NAT

源NAT技术

NAT地址池

NAT地址池是一些连续的IP地址集合,当来自私网的报文通过地址转换到公网IP时,将会选择地址池中的某个地址作为转换后的地址

配置命令

[FW]nat address-groupisp1   //定义地址池名称

[FW-address-group-isp1]section1.1.1.1 1.1.1.100     //定义起始公网IP地址范围

[FW-address-group-isp1]modepat   //配置NAT模式

源NAT实验

Untrust为运营商,trust为企业内网,现在企业内网用户需要通过防火墙访问互联网

                 wKiom1jFaQTgpl97AACwIu6OtVw766.png-wh_50            

配置步骤:

配置防火墙各个接口的IP地址

[FW]int g1/0/0

[FW-GigabitEthernet1/0/0]ip add 10.1.11.254 24

[FW]int g1/0/2

[FW-GigabitEthernet1/0/2]ip add 10.1.12.254 24

配置企业边界路由器接口地址

[r2]int g0/0/0

[r2-GigabitEthernet0/0/0]ip add 10.1.11.2 24

[r2]int g0/0/1

[r2-GigabitEthernet0/0/1]ip add 10.1.14.254 24

配置运营商边界接口地址

[r3]int g0/0/2

[r3-GigabitEthernet0/0/2]ip add 10.1.12.3 24

[r3]int g0/0/0

[r3-GigabitEthernet0/0/0]ip add 100.100.100.3 24

防火墙接口加入安全区域

[FW]firewall zone untrust

[FW-zone-untrust]add interface g1/0/2

[FW]firewall zone trust

[FW-zone-trust]add interface g1/0/0

防火墙配置静态路由

[FW]ip route-static 0.0.0.0 0.0.0.0 10.1.12.3  //去往运营商

[FW]ip route-static 10.1.14.0 255.255.255.0 10.1.11.2  //去往内网

企业边界路由器配置路由

[r2]ip route-static 0.0.0.0 0.0.0.0 10.1.11.254

配置NAT地址池

[FW]nat address-group isp1

[FW-address-group-isp1]section 10.1.12.10 10.1.12.20

[FW-address-group-isp1]mode pat   //当配置no-pat时会才会产生server-map

配置NAT策略

[FW]nat-policy

[FW-policy-nat]rule name permit_trust_untrust_nat

[FW-policy-nat-rule-permit_trust_untrust_nat]source-zonetrust

[FW-policy-nat-rule-permit_trust_untrust_nat]destination-zoneuntrust

[FW-policy-nat-rule-permit_trust_untrust_nat]actionnat address-group isp1

配置安全策略

[FW]security-policy

[FW-policy-security]rule namepermit_trust_untrust_icmp

[FW-policy-security-rule-permit_trust_untrust_icmp]source-zonetrust

[FW-policy-security-rule-permit_trust_untrust_icmp]destination-zoneuntrust

[FW-policy-security-rule-permit_trust_untrust_icmp]serviceicmp

[FW-policy-security-rule-permit_trust_untrust_icmp]actionpermit

测试

spacer.gif

观察防火墙session表

[FW]dis firewall session table verbose

 Current TotalSessions : 1

 icmp  ×××: public --> public  ID: c487fe5eca997d0543858c173b5

 Zone: trust--> untrust  TTL: 00:00:20  Left: 00:00:14

 Interface:GigabitEthernet1/0/2  NextHop:10.1.12.3  MAC: 00e0-fc87-780c

 <--packets:5 bytes: 300 --> packets: 5 bytes: 300

 10.1.14.1:256[10.1.12.10:2053] -->100.100.100.100:2048 PolicyName: permit_trust_untrust_icmp

EasyIP实验

注意:在防火墙里面EasyIP是根据路由表选择destination区域的出接口进行转换的,不是直接在接口下配置easyip

其他基础配置略过

[FW]nat-policy

[FW-policy-nat]rule name permit_trust_untrust_nat

[FW-policy-nat-rule-permit_trust_untrust_nat]source-zonetrust

[FW-policy-nat-rule-permit_trust_untrust_nat]destination-zoneuntrust

[FW-policy-nat-rule-permit_trust_untrust_nat]actionnat easy-ip

测试

spacer.gif

[FW]dis firewall session table

 Current TotalSessions : 1

 icmp  ×××: public --> public  10.1.14.1:256[10.1.12.254:2048]--> 100.100.100.100:2048

[FW]dis firewall session table v

[FW]dis firewall session table verbose

 Current TotalSessions : 1

 icmp  ×××: public --> public  ID: c487fddeb2b7140543858c256cf

 Zone: trust--> untrust  TTL: 00:00:20  Left: 00:00:12

 Interface:GigabitEthernet1/0/2  NextHop:10.1.12.3  MAC: 00e0-fc87-780c

 <--packets:5 bytes: 300 --> packets: 5 bytes: 300

 10.1.14.1:256[10.1.12.254:2048] -->100.100.100.100:2048 PolicyName: permit_trust_untrust_icmp

NAT的ALG

NAT ALG:application level gateway,应用级网关,是特定的应用协议的转换代理,可以完成应用层数据中携带的地址及端口信息的转换

普通NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,比如多媒体协议(H.323、SIP等)、FTP、SQLNET等,TCP/UDP载荷中带有地址或者端口信息,这些内容不能被NAT进行有效的转换,就可能导致问题。而NAT ALG技术能对多通道协议进行应用层报文信息的解析和地址转换,将载荷中需要进行地址转换的IP地址和端口或者需特殊处理的字段进行相应的转换和处理,从而保证应用层通信的正确性。

例如:FTP应用就由数据连接和控制连接共同完成,而且数据连接的建立动态地由控制连接中的载荷字段信息决定,这就需要ALG来完成载荷字段信息的转换,以保证后续数据连接的正确建立

实验

防火墙默认打开了ALG功能(和ASPF功能属于一个),现在trust区域访问untrust的ftp抓包观察nat转换功能

spacer.gif

先允许trust到untrust的ftp服务

[FW]security-policy 

[FW-policy-security]rule name permit_trust_untrust_icmp

[FW-policy-security-rule-permit_trust_untrust_icmp]disth

#

 rule namepermit_trust_untrust_icmp

  source-zonetrust

 destination-zone untrust

  service icmp

  action permit

#

return

[FW-policy-security-rule-permit_trust_untrust_icmp]serviceftp

抓包分析

找到port包

spacer.gif

spacer.gif

可以看到防火墙开启ALG功能后把应用层的数据的IP也进行了转换

现在关闭防火墙的ALG功能后抓包

[FW]undo firewalldetect ftp

spacer.gif

如上图,可以看到关闭防火墙的ALG功能后,FTP数据层面的IP地址没有被转换为公网IP地址,导致FTPserver相应请求时导致路由不可达,从而导致客户端访问失败。

NAT和server-map表

NAT中生成server map表项的两种情况:

配置NAT server时:设备会自动生成server map表项,用于存放global地址与inside地址的映射关系

配置NAT no-pat时:设备会为已经配置的多通道协议产生的有实际流量的数据流建立server-map表

NAT Server

内部服务器(nat server)功能是使用一个公网地址来代表内部服务器对外地址,在防火墙上专门为内部的服务器配置一个对外的公网地址来代表私网地址,对于外网用户来说防火墙上配置的外网地址就是服务器的地址

配置示例

Nat server 名称 protocol tcp global 202.202.1.1 www inside 192.168.1.1 www  [no –revrse] 这个参数如果加上后就不会产生反向的nat表项也就是说服务器不能主动发起去公网的访问,只能被动接受访问(通俗的讲就是不允许服务器上网)

注意:no-revrse参数加不加都不受nat-policy限制,但是受到security-policy的限制

实验

需求:untrust用的用户需要访问dmz区域的http服务,要求通过nat server的方式配置,并且只允许www服务

spacer.gif

配置步骤

端口ip地址配置以及加入dmz区域

[FW]int g1/0/1

[FW-GigabitEthernet1/0/1]ip add 10.1.13.254 24

[FW]firewall zone dmz

[FW-zone-dmz]add int g1/0/1

配置NAT server

[FW]nat server ftp_server protocol tcp global10.1.12.254 www inside 10.1.13.1 www no-reverse

配置安全策略

[FW]security-policy

[FW-policy-security]rule name permit_untrust_dmz_http

[FW-policy-security-rule-permit_untrust_dmz_http]source-zoneuntrust

[FW-policy-security-rule-permit_untrust_dmz_http]destination-zonedmz

[FW-policy-security-rule-permit_untrust_dmz_http]servicehttp

[FW-policy-security-rule-permit_untrust_dmz_http]actionpermit

测试

spacer.gif

观察server map表项

[FW]dis firewall server-map

 Current TotalServer-map : 1

 Type: NatServer,  ANY ->10.1.12.254:80[10.1.13.1:80], Zone:---,  protocol:tcp

 ***: public-> public

目的NAT

场景:在移动终端访问无线网时,如果其缺省的wap网关地址与所在地运营商的wap网关地址不一致时,可以在终端与wap网关中间部署一台设备,并配置目的NAT功能,使设备自动将终端发往错误WAP网关地址的报文自动转发给正确的WAP网关

spacer.gif

实验

现在DMZ区域的server1充当手机角色,fw1充当运营商防火墙,untrust区域的server2充当正确的wap网关,现在server1是一部从国外购买回来的手机,由于内置的wap网关不正确(8.8.8.8)导致无法接入运营商网络,现在通过目的nat技术解决这一问题(把访问8.8.8.8的地址转换到100.100.100.200 server2上面)

spacer.gif

配置步骤

防火墙配置ACL

[FW]acl 3000

[FW-acl-adv-3000]rule 0 permit ip destination 8.8.8.80

允许server1访问外网(因为是实验环境)

[FW]nat-policy

[FW-policy-nat]rule name permit_dmz_untrust_icmp

[FW-policy-nat-rule-permit_dmz_untrust_icmp]source-zonedmz

[FW-policy-nat-rule-permit_dmz_untrust_icmp]destination-zoneuntrust

[FW-policy-nat-rule-permit_dmz_untrust_icmp]action nataddress-group isp1

[FW]security-policy

[FW-policy-security]rule name permit_dmz_untrust_icmp

[FW-policy-security-rule-permit_dmz_untrust_icmp]source-zonedmz

[FW-policy-security-rule-permit_dmz_untrust_icmp]destination-zoneuntrust

[FW-policy-security-rule-permit_dmz_untrust_icmp]serviceicmp

[FW-policy-security-rule-permit_dmz_untrust_icmp]actionpermit

配置目的NAT

[FW]firewall zone dmz

[FW-zone-dmz]destination-nat 3000 address100.100.100.200

测试

spacer.gif

spacer.gif

上图,ping 8.8.8.8的地址已经被转换为100.100.100.200

双向NAT技术

双向NAT的应用场景

NAT server+源NAT(又叫做域间双向NAT)

域内NAT

域间双向NAT

为了简化配置服务器到公网的路由,可以在NAT Server基础上增加源NAT配置,实际上就是服务器不配置网关地址可以和外界进行通信(奇葩想法,哪有服务器不配置网关的,那和内网其他网段通信呢?)

spacer.gif

域内双向NAT

场景:如图由于前期网络规划不合理,将用户网段和服务器网段处于同一个网段,防火墙配置NAT SERVER将192.168.1.1映射为202.202.1.1后给互联网提供服务,互联网用户通过域名解析到202.202.1.1,同时内网用户也需要使用域名的方式访问该服务器,并且也是使用公网DNS进行解析。当用户192.168.1.5通过域名访问192.168.1.1,首先数据包到达防火墙,防火墙查询nat server后发现目的地是192.168.1.1,所以该数据包并未出防火墙而是直接交给内网的192.168.1.1,并且此时192.168.1.5访问并没有发生源目地址的转换,当数据包到达192.168.1.1以后,服务器会响应,查看源IP是192.168.1.5和自己属于同一网段,所以直接向192.168.1.5发送syn+ack报文但是192.168.1.5并不会接收,因为192.168.1.5是朝着202.202.1.1发送的syn报文,收到的syn+ack却是192.168.1.1,所以访问失败

spacer.gif

解决办法:在防火墙的内接口进行nat转换,把192.168.1.5访问192.168.1.1转换成接口地址,变成防火墙接口地址访问192.168.1.1

实验:

Trust区域的服务器10.1.14.200做NAT映射发布到公网,公网100.100.100.100通过域名访问(这里无dns服务器直接使用转换后的IP地址访问)这台内网服务器,同时内网的10.1.14.1客户端也通过发布后的公网IP地址访问此服务器(不能使用内网IP地址访问)

spacer.gif

配置步骤

基础的配置略过

防火墙NAT server配置

[FW]nat server trust_http protocol tcp global10.1.12.200 www inside 10.1.14.200 www no-reverse

配置安全策略放行untrust到trust的访问

[FW-policy-security]rule namepermit_untrust_trust_http

[FW-policy-security-rule-permit_untrust_trust_http]source-zoneuntrust

[FW-policy-security-rule-permit_untrust_trust_http]destination-zonetrust

[FW-policy-security-rule-permit_untrust_trust_http]servicehttp

[FW-policy-security-rule-permit_untrust_trust_http]actionpermit

公网客户端测试

spacer.gif

内网客户端通过公网IP访问测试(未配置域内双向NAT的情况),发现访问失败

spacer.gif

发包是10.1.14.1发给10.1.12.200,但是回包却是10.1.14.200回复的syn+ack

spacer.gif

配置域内双向NAT

先配置源NAT

[FW]nat-policy

[FW-policy-nat]rule name permit_trust_trust_nat_http

[FW-policy-nat-rule-permit_trust_trust_nat_http]source-zonetrust

[FW-policy-nat-rule-permit_trust_trust_nat_http]destination-zonetrust

[FW-policy-nat-rule-permit_trust_trust_nat_http]servicehttp

[FW-policy-nat-rule-permit_trust_trust_nat_http]actionnat easy-ip

配置安全策略放行trust到trust的http流量

[FW]security-policy

[FW-policy-security]rule name permit_trust_trust_http

[FW-policy-security-rule-permit_trust_trust_http]source-zonetrust

[FW-policy-security-rule-permit_trust_trust_http]destination-zonetrust

[FW-policy-security-rule-permit_trust_trust_http]servicehttp

[FW-policy-security-rule-permit_trust_trust_http]actionpermit

测试内网客户端访问

spacer.gif

防火墙NAT双出口实验

需求:两个不同运营商用户需要访问同一内网服务器资源

      内网用户通过两个运营商访问互联网

spacer.gif

配置步骤

1基础配置(接口IP、路由协议略过)

2创建zone

[FW]firewall zone name isp1

[FW-zone-isp1]set priority 10

[FW]firewall zone name isp2

[FW-zone-isp2]set priority 20

3各接口加入相应的zone

[FW]firewall zone isp1

[FW-zone-isp1]add int g1/0/2

[FW-zone-isp1]quit

[FW]firewall zone isp2

[FW-zone-isp2]add int g1/0/0

[FW-zone-isp2]quit

[FW]firewall zone dmz

[FW-zone-dmz]add int g1/0/3

[FW-zone-dmz]quit

[FW]firewall zone trust

[FW-zone-trust]add int g1/0/1

3配置静态默认路由(暂时不考虑策略路由的问题)

[FW]ip route-static 0.0.0.0 0.0.0.0 200.1.1.1

[FW]ip route-static 0.0.0.0 0.0.0.0 100.1.1.2

4配置NAT地址池

[FW]nat address-group isp1

[FW-address-group-isp1]section 200.1.1.10 200.1.1.20

[FW-address-group-isp1]mode pat

[FW-address-group-isp1]quit

[FW]nat address-group isp2

[FW-address-group-isp2]section 100.1.1.10 100.1.1.20

[FW-address-group-isp2]mode pat

[FW-address-group-isp2]quit

5配置源NAT策略

配置isp1线路的nat

[FW]nat-policy

[FW-policy-nat]rule name permit_trust_isp1_nat

[FW-policy-nat-rule-permit_trust_isp1_nat]source-zonetrust

[FW-policy-nat-rule-permit_trust_isp1_nat]destination-zoneisp1

[FW-policy-nat-rule-permit_trust_isp1_nat]action nataddress-group isp1

配置isp2线路的nat

[FW]nat-policy

[FW-policy-nat]rule name permit_trust_isp2_nat

[FW-policy-nat-rule-permit_trust_isp2_nat]source-zonetrust

[FW-policy-nat-rule-permit_trust_isp2_nat]destination-zoneisp2

[FW-policy-nat-rule-permit_trust_isp2_nat]action nataddress-group isp2

6配置安全策略放行trust到isp1和isp2的流量

[FW]security-policy

[FW-policy-security]rule namepermit_trust_isp1_isp2_any

[FW-policy-security-rule-permit_trust_isp1_isp2_any]source-zonetrust

[FW-policy-security-rule-permit_trust_isp1_isp2_any]destinationisp1 isp2

[FW-policy-security-rule-permit_trust_isp1_isp2_any]actionpermit

测试源nat是否成功

  断开isp1链路后访问202.1.1.200

spacer.gif

可以看到匹配的是isp2的安全策略

<FW>dis firewall session table verbose

 Current TotalSessions : 1

 http  ×××: public --> public  ID: c487f45fee596e014ff58c5450c

 Zone: trust--> isp2  TTL: 00:00:10  Left: 00:00:08

 Interface:GigabitEthernet1/0/0  NextHop:100.1.1.2  MAC: 00e0-fce0-19da

 <--packets:4 bytes: 471 --> packets: 6 bytes: 401

 10.0.1.10:2054[100.1.1.10:2052] -->202.1.1.200:80 PolicyName: permit_trust_isp1_isp2_any

②恢复isp1线路后观察数据走向以及匹配的安全策略

可以看到还是匹配的isp2的安全策略,如果想让线路负载分担就需要使用策略路由(后续在介绍)

[FW]dis firewall session table verbose

 Current TotalSessions : 1

 http  ×××: public --> public  ID: c387f45fee598c0c9d58c547c8

 Zone: trust--> isp1  TTL: 00:00:10  Left: 00:00:09

 Interface:GigabitEthernet1/0/2  NextHop:200.1.1.1  MAC: 00e0-fcce-7e9a

 <--packets:5 bytes: 511 --> packets: 6 bytes: 401

 10.0.1.10:2057[200.1.1.10:2050] -->202.1.1.200:80 PolicyName: permit_trust_isp1_isp2_any

7配置NAT server

[FW]nat server http_isp1 zone isp1 protocol tcp global200.1.1.100 www inside 10.0.2.200 www no-reverse

[FW]nat server http_isp2 zone isp2 protocol tcp global100.1.1.100 www inside 10.0.2.200 www no-reverse

8配置安全策略放行isp1和isp2访问dmz

[FW]security-policy

[FW-policy-security]rule namepermit_isp1_isp2_dmz_http

[FW-policy-security-rule-permit_isp1_isp2_dmz_http]source-zoneisp1 isp2

[FW-policy-security-rule-permit_isp1_isp2_dmz_http]destination-zonedmz

[FW-policy-security-rule-permit_isp1_isp2_dmz_http]servicehttp

[FW-policy-security-rule-permit_isp1_isp2_dmz_http]actionpermit

9测试访问

  通过200.1.1.100访问内部服务器

spacer.gif

[FW]dis firewall session table verbose

 Current TotalSessions : 1

 http  ×××: public --> public  ID: c487f45fee5841034c058c54f6d

 Zone: isp1--> dmz  TTL: 00:00:10  Left: 00:00:07

 Interface:GigabitEthernet1/0/3  NextHop:10.0.2.200  MAC: 5489-980f-492a

 <--packets:4 bytes: 471 --> packets: 6 bytes: 401

 202.1.1.100:2061 -->200.1.1.100:80[10.0.2.200:80] PolicyName: permit_isp1_isp2_dmz_http

②通过100.1.1.100访问内部服务器

spacer.gif

[FW]dis firewall session table verbose

 Current TotalSessions : 1

 http  ×××: public --> public  ID: c387f45fee585f021a58c54fb5

 Zone: isp2--> dmz  TTL: 00:00:10  Left: 00:00:08

 Interface:GigabitEthernet1/0/3  NextHop:10.0.2.200  MAC: 5489-980f-492a

 <--packets:4 bytes: 471 --> packets: 6 bytes: 401

 202.1.1.100:2063 -->100.1.1.100:80[10.0.2.200:80] PolicyName: permit_isp1_isp2_dmz_http