NAT alg 和 ASPF
NAT alg 和 ASPF
参考:https://handbye.cn/719.html
来源:https://www.jianshu.com/p/8a8eb36eef7d
NAT的部署已经在企业网中必不可少,当防火墙作为网络的出口或者在网络中充当安全网关时,内网用户访问外网或者外网用户访问内网的服务器都要经过NAT穿越。
由于防火墙的特殊性,出于安全的考虑,需要建立相应的安全策略。当防火墙检测到这个数据包是一个首包时,就会根据相应的安全策略进行检查,符合安全策略就给通过并生成对应的会话表项。后续数据包到达是就无须在进行安全策略的检查,直接匹配会话表进行转发,这样就大大提高了转发效率。
先上一张防火墙转发数据的流程图:
![](http://upload-images.jianshu.io/upload_images/5695969-3c18f3d89e24c5c8.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/606/format/webp)
可以看到在生成会话表之前是先查NAT策略的,也就是查找玩NAT策略以后,再根据NAT生成会话表。
比如下方的会话表:
SIP VPN: public --> public 192.168.2.5:5060[1.1.1.1:2327] +-> 221.181.108.137:5060
[] 中的就是NAT过后的IP地址
通常情况下,NAT只对报文中IP头部的地址信息和TCP/UDP头部的端口信息进行转换,不关注报文载荷的信息。但是对于一些特殊的协议(如FTP协议),其报文载荷中也携带了地址或端口信息,而报文载荷中的地址或端口信息往往是由通信的双方动态协商生产的,管理员并不能为其提前配置好相应的NAT规则。如果提供NAT功能的设备不能识别并转换这些信息,将会影响到这些协议的正常使用。
下面以FTP报文为例说下为什么要启用NAT alg 或者 ASPF
FTP控制层面的连接报文,使用TCP端口号21
![](http://upload-images.jianshu.io/upload_images/5695969-c67de5aa0544bc5b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/855/format/webp)
控制层面的TCP连接端口号是携带在头部的,是可以被NAT转换的。控制层面在有NAT的环境下是可以进行连接的。
控制层面连接完成之后,进行文件传送之前要建立数据层面的连接,这时会由client侧向server侧发送port消息,携带自己开放的数据层面连接端口号(主动模式下是这样的,FTP还有被动模式,这里就以主动模式来说)。报文如下:
![](http://upload-images.jianshu.io/upload_images/5695969-f0c94b1d2aeed368.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1000/format/webp)
问题来了,数据层面的端口号是携带在报文载荷部分的,NAT只能转换头部信息,无法转换载荷信息。在存在NAT穿越的场景下,数据连接就无法建立,这时看到的情况就是能够登陆成功,但是无法显示服务器文件列表也不能上传和下载文件。
这时就需要用到NAT alg功能来识别载荷部分的端口信息,来做对应的NAT转换。
FTP协议包括两种工作模式:主动模式和被动模式。主动模式中,FTP Server主动向FTP Client发起数据连接;被动模式中,FTP Server被动接收FTP Client发起的数据连接。无论是主动模式还是被动模式,在控制连接交互报文的载荷中,都包含用于建立数据连接的IP地址和端口号信息。
如果在FTP Client和FTP Server之间部署了NAT设备,这就要求NAT设备必须能够识别出控制连接中包含的IP地址和端口号并进行处理,否则数据连接无法成功建立,FTP协议不能正常工作。
下面以FTP协议工作在主动模式为例,介绍NAT ALG功能对FTP协议的处理过程。
如图1所示,FTP Client位于私有网络,FTP Server位于公共网络。NGFW对FTP协议的报文处理过程如下:
1.FTP Client通过源NAT地址转换后可以访问FTP Server,与FTP Server完成FTP控制连接的TCP三次握手,并交付用户名和密码信息。
2.NGFW收到FTP Client发送的PORT命令报文后,将报文载荷字段中携带的私网地址和端口替换为公网地址和新的端口,然后发送至FTP Server。
3.NGFW收到FTP Server请求建立数据连接的报文后,替换报文的目的地址和目的端口为原始的地址和端口,然后发送至FTP Client。由此保证数据连接可以成功建立,FTP协议正常工作。
![](http://upload-images.jianshu.io/upload_images/5695969-c69ae0497c684f6f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/500/format/webp)
NAT ALG与ASPF的关系
差异点:
开启ASPF功能的目的是识别多通道协议,并自动为其开放相应的安全策略。
开启NAT ALG功能的目的是识别多通道协议,并自动转换报文载荷中的IP地址和端口信息。
共同点:
二者使用相同的配置。开启其中一个功能,另一功能同时生效。
其实在防火墙上二者的配置命令是同一个,对于防火墙来说对二者是没区别的。因为NAT alg自动转换报文载荷中的ip地址和端口信息后,防火墙没有将其对应的安全策略放行,数据也是不能转发的。这一安全策略是基于防火墙的server-map表实现的。
关于server-map表的详解可以百度搜索serve-map表来了解一下。
NAT ALG、NAT traversal 和 ASPF 的区别
众所周知,最著名的多通道协议,FTP 使用 TCP 端口 20 作为数据连接端口,使用 TCP 端口 21 作为控制连接端口。由于防火墙的检测机制,这种协议会在两个阶段对不一致的端口进行阻塞。
为了解决这个问题,开发了 NAT ALG 和 ASPF、NAT 穿越,那么这三个特性有什么区别呢?我们应该为现网选择哪一个?
为什么 FTP 在穿越防火墙时会失败?
FTP 协议使用 TCP 端口 21 建立控制连接,然后交换将用于建立数据连接的端口(FTP 主动模式),由于端口是图 5. IKE 添加一个额外的 UDP 标头来遍历 NAT 设备的,防火墙将由于没有会话条目而丢弃流量。
图 1. FTP 主动模式数据连接建立失败
图 2. FTP 被动模式数据连接建立失败
NAT ALG
为解决FTP等多通道协议,NAT ALG选择一种方式来转换交换端口,该端口将用于建立数据连接。这样,防火墙上就会有会话入口,从而允许数据连接的SYN数据包。
图 3. NAT ALG 转换交换的端口
ASPF
与 NAT ALG 不同,ASPF 使用服务器映射来解决此问题。当 FTP 交换将用于建立数据连接的 TCP 端口时,当 FTP 客户端尝试连接 FTP 服务器的数据连接端口(不是著名的一个,TCP 20,但随机选择一个),流量将匹配 server-map
条目,防火墙将直接创建会话表条目,而不检查安全策略。
图 4. 生成的 ASPF 服务器映射条目和会话表条目
NAT穿越
与 NAT ALG 和 ASPF 不同的是,NAT 穿越使用 UDP 报头来封装流量,以便两个终端都能识别服务,NAT 穿越最著名的应用是IPSec NAT 穿越。
图 5. IKE 添加一个额外的 UDP 标头来遍历 NAT 设备
NAT ALG、ASP 和 NAT 穿越有什么区别?
从上面的描述我们可以知道,这三个特性可以分为两个主要部分,NAT 穿越与 NAT ALG 和 ASPF 完全不同。
对于NAT ALG和ASPF,都是用来解决多通道协议通过NAT设备的,只是方式不同而已。NAT ALG 转换端口,而 ASPF 创建服务器映射条目。