一,NAT ALG
NAT ALG(Application Level Gateway)应用级网关,支持对应用层信息进行相应转换。通常情况下,NAT只对报文的IP头部的地址信息喝TCP/UDP头部的端口信息进行转换而不会关注其报文的载荷信息。但是对于一些特殊的协议(如FTP等多通道协议),其报文载荷中也携带了地址或端口的信息,而载荷的信息通常是双方协商产生的。如果经过NAT后不修改会影响到后续的使用。
FW提供了NAT ALG功能,对报文的载荷字段进行解析,识别并转换其中的重要信息,保证FTP的正常使用。
下图以FTP主动模式为例,在FW上配置了NAT,将客户端的源地址和端口号转换。
1.客户端和FTP服务器TCP握手并协商完成用户名和密码信息。
2.FW收到客户端发送的PORT命令,如果直接转发那么载荷中的地址和端口号将会是错误的内网地址。NAT ALG对PORT命令的载荷进行改变,修改为正确的NAT后的载荷。
3.FW收到服务器的请求后,再次改变目的地址和端口号发送到客户端。
二,ASPF
ASPF(Application Specific Packet Filter)是一种高级通信过滤,它检查应用层协议信息并监控连接的应用层协议状态。对特定应用协议的所有连接,每一个连接状态信息都会被ASPF维护并用于动态的决定数据包是否被允许通过防火墙或者被丢弃。
在打开ASPF功能后,设备会根据检测到的应用报文根据报文中的地址信息动态创建server-map表项。转发QQ、TFTP等STUN(Simple Traversal of UDP over NATs,NAT的UDP简单穿越)类型协议。通过配置STUN类型的ASPF,设备会记录用户的IP和端口号信息,并生成STUN类型的server-map。这个server-map表项中包含三元组信息,通信方的IP,端口号和协议号。
NAT ALG与ASPF的关系:
差异:①开启ASPF的功能目的是识别多通道协议,并自动为其开放相应的安全策略。②开启NAT ALG功能是为了识别顶多通道协议,并自动转换报文载荷的IP地址和端口信息。
三,FTP
FTP有两个端口,端口21用于控制,端口20,用于上传,下载数据。同时它有两个模式分别是主动模式和被动模式。
①主动模式:
第一步FTP服务器将Port内容封装在载荷中,如图所示载荷中的内容表示,对端的IP地址为10.1.1.1,端口号为最后两个数字中的第一个数字乘以256加上最后一个数字。
第二步,服务器返回确认。
第三步,FTP根据第一步中计算的目的IP和端口号进行TCP握手。
第四步,客户端发送ACK建立连接。
②被动模式
第一步,客户端与服务器建立TCP连接并发送PASV,声明被动模式。
第二步,服务器发送Port命令。其载荷包含了计算进行FTP数据传输的IP地址和端口号。
第三步,客户端从自己的数据端口和计算出的IP地址和端口号建立数据连接。
第四步,服务器进行ACK确认。
四,FTP经过NAT实验
4.1拓扑
根据上图配置FTP客户端和服务器和配置FW的基础配置。先测试FW不配置NAT以及关闭NAT ALG和ASPF,再配置NAT观察现象并配置NAG ALG和ASPF后再观察现象。
4.2无NAT无NAT ALG和ASPF
1.开启NAT ALG和ASPF的命令是同一条" firewall detect 协议 ",该功能默认开启,关闭配置如下
[FW]undo firewall detect ftp
2.配置安全策略放行客户端访问服务器
[FW-policy-security] rule name Trust_Internet
[FW-policy-security-rule-Trust_Internet] source-zone trust
[FW-policy-security-rule-Trust_Internet] destination-zone untrust
[FW-policy-security-rule-Trust_Internet] source-address 10.1.1.0 mask 255.255.255.0
[FW-policy-security-rule-Trust_Internet] action permit
3.在G1/0/1接口下抓取数据报文,并使用客户端使用被动模式访问服务器
①客户端访问服务器之前的会话表
[FW]display firewall session table
2023-02-18 01:23:42.040
Current Total Sessions : 0
②客户端使用被动模式访问服务器
③成功访问服务器,并抓取到客户端发送给服务器的PASV命令的报文和服务器返回的PORT命令,其载荷包括通知客户端建立数据链路的目的IP地址和端口号的材料(IP地址为:10.1.5.188,端口号为:192*256+13=49165)。
ftp VPN: public --> public ID: c387faf3bc67128eaa63f02a43
Zone: trust --> untrust TTL: 00:20:00 Left: 00:19:59
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/1 NextHop: 10.1.5.188 MAC: 000c-29e0-9f9a
<--packets: 20 bytes: 1,480 --> packets: 19 bytes: 888
10.1.1.1:51320 --> 10.1.5.188:21 PolicyName: Trust_Internet
TCP State: established
③查看建立数据连接的报文和会话,验证现象。控制链路识别为FTP,但关闭ASPF后无法识别FTP的数据链路。
tcp VPN: public --> public ID: c487faf3bc672d8370163f02a4b
Zone: trust --> untrust TTL: 00:00:10 Left: 00:00:09
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/1 NextHop: 10.1.5.188 MAC: 000c-29e0-9f9a
<--packets: 4 bytes: 240 --> packets: 5 bytes: 212
10.1.1.1:51324 --> 10.1.5.188:49165 PolicyName: Trust_Internet
4.将被动模式建立的连接关闭,并建立主动模式的FTP观察现象同时清除会话表。
①客户端配置主动模式连接服务器
②发现FTP无法建立连接
③通过抓包和查看会话表发现,FTP的控制连接是建立的即客户端和服务器的21端口的连接是建立的。也发现客户端已经发送了Port命令其中包含计算主动模式下服务器主动连接客户端建立数据链路的材料。
④根据FTP的原理就可以理解为防火墙阻断了这条链路,因为这条链路并没有配置安全策略。配置安全策略并重新观察现象。
rule name FTPServer_Trust
source-zone untrust
destination-zone trust
source-address 10.1.5.188 mask 255.255.255.255
destination-address 10.1.1.0 mask 255.255.255.0
action permit
⑤查看抓包和会话表,FTP的主动模式成功建立并匹配安全策略
tcp VPN: public --> public ID: c487faf3bc6505010fd63f02d9f
Zone: untrust --> trust TTL: 00:00:10 Left: 00:00:04
Recv Interface: GigabitEthernet1/0/1
Interface: GigabitEthernet1/0/0 NextHop: 10.1.1.1 MAC: 000c-2958-190a
<--packets: 4 bytes: 172 --> packets: 5 bytes: 280
10.1.5.188:20 --> 10.1.1.1:52879 PolicyName: FTPServer_Trust
ftp VPN: public --> public ID: c487faf3bc65128153063f02d96
Zone: trust --> untrust TTL: 00:20:00 Left: 00:19:54
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/1 NextHop: 10.1.5.188 MAC: 000c-29e0-9f9a
<--packets: 20 bytes: 1,470 --> packets: 19 bytes: 922
10.1.1.1:52857 --> 10.1.5.188:21 PolicyName: Trust_Internet
4.3有NAT无NAT ALG和ASPF
根据4.2的配置不删除,关闭FTP连接并清空会话表,继续在FW设备上配置NAT,使得trust区域10.1.1.0/24的主机通过源NAT转换为公网地址访问FTP服务器。详细过程如下。
1.源NAT配置
[FW]nat address-group SNAT_Group_1
[FW-address-group-SNAT_Group_1]section 2.2.2.2 2.2.2.2
[FW-address-group-SNAT_Group_1]mode pat
[FW]nat-policy
[FW-policy-nat]rule name Trust_PC
[FW-policy-nat-rule-Trust_PC]source-zone trust
[FW-policy-nat-rule-Trust_PC]destination-zone untrust
[FW-policy-nat-rule-Trust_PC]source-address 10.1.1.0 24
[FW-policy-nat-rule-Trust_PC]action source-nat address-group SNAT_Group_1
2.除了4.2中对G1/0/1接口(服务器侧)进行抓包,同时对G1/0/0接口(客户端侧)进行抓包使用客户端使用主动模式连接服务器。
①查看会话表,FTP控制链路成功建立同时观察到源NAT的记录。
Current Total Sessions : 1
ftp VPN: public --> public ID: c487faf3bc5d05019fc63f0300b
Zone: trust --> untrust TTL: 00:20:00 Left: 00:19:53
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/1 NextHop: 10.1.5.188 MAC: 000c-29e0-9f9a
<--packets: 16 bytes: 1,279 --> packets: 18 bytes: 900
10.1.1.1:53543[2.2.2.2:2048] --> 10.1.5.188:21 PolicyName: Trust_Internet
②我们的安全策略已经放开,但是FTP数据链路依然建立失败,观察报文。发现NAT只是进行了源地址和端口号的转换并没有对FTP的载荷进行转换导致了FTP建立失败。
③同理,思考被动模式下会不会还是失败,根据FTP的原理。被动模式下是服务器发送PORT命令给客户端,载荷是正常的所以NAT不会影响到被动模式。验证如下。载荷是正确的。
[FW]display firewall session table verbose
2023-02-18 02:03:33.710
Current Total Sessions : 2
ftp VPN: public --> public ID: c387faf3bc5d138ddf63f031ef
Zone: trust --> untrust TTL: 00:20:00 Left: 00:19:55
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/1 NextHop: 10.1.5.188 MAC: 000c-29e0-9f9a
<--packets: 17 bytes: 1,243 --> packets: 14 bytes: 666
10.1.1.1:53980[2.2.2.2:2049] --> 10.1.5.188:21 PolicyName: Trust_Internet
TCP State: established
tcp VPN: public --> public ID: c487faf3bc5d2201fe463f031f0
Zone: trust --> untrust TTL: 00:00:10 Left: 00:00:05
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/1 NextHop: 10.1.5.188 MAC: 000c-29e0-9f9a
<--packets: 4 bytes: 417 --> packets: 4 bytes: 172
10.1.1.1:53981[2.2.2.2:2048] --> 10.1.5.188:49171 PolicyName: Trust_Internet
TCP State: close
4.4有NAT有NAT ALG和ASPF
1.根据4.3的配置,增加一条命令开启NAT ALG和ASPF,删除安全策略FTPServer_Trust。
[FW]firewall detect ftp
[FW-policy-security]undo rule name FTPServer_Trust
2.使用客户端被动模式连接FTP服务器。
①查看会话表,FTP数据链路被ASPF识别为ftp-data
ftp VPN: public --> public ID: c487faf3bc5d4d8245963f03392
Zone: trust --> untrust TTL: 00:20:00 Left: 00:20:00
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/1 NextHop: 10.1.5.188 MAC: 000c-29e0-9f9a
<--packets: 25 bytes: 1,833 --> packets: 25 bytes: 1,156
10.1.1.1:54362[2.2.2.2:2050] +-> 10.1.5.188:21 PolicyName: Trust_Internet
TCP State: established
ftp-data VPN: public --> public ID: c487faf3bc5d7902dc263f033ce
Zone: trust --> untrust TTL: 00:00:10 Left: 00:00:09
Recv Interface: GigabitEthernet1/0/0
Interface: GigabitEthernet1/0/1 NextHop: 10.1.5.188 MAC: 000c-29e0-9f9a
<--packets: 4 bytes: 240 --> packets: 5 bytes: 212
10.1.1.1:54409[2.2.2.2:54409] --> 10.1.5.188:49176 PolicyName: Trust_Internet
②ASPF还产生了一条server-map对应ftp-data的流量。该条server-map产生不需要配置安全策略。
[FW] display firewall server-map
2023-02-18 02:12:21.670
Current Total Server-map : 1
Type: ASPF, 10.1.1.1[2.2.2.2] -> 10.1.5.188:49177, Zone:---
Protocol: tcp(Appro: ftp-data), Left-Time:00:00:14
Vpn: public -> public
3.再使用客户端使用主动模式连接服务器,观察是否在NAT ALG的作用下修改FTP的载荷。