FTP主动模式和被动模式(3)NAT对FTP的影响 - NAT ALG

news/2024/10/3 4:34:52

NAT对FTP的影响

NAT环境下FTP存在的问题

FTP主动模式

FTP服务器在外部网络

在FTP主动模式下,如果网络中存在NAT,且FTP客户端在NAT内部网络中,那么FTP数据连接会出现下面的问题,如图:

image

内部网络中的FTP客户端和外部网络中的FTP服务器端通过NAT地址转换是可以正常建立控制连接的,控制连接中对于FTP服务器看到的客户端地址和端口是经过NAT转换之后的地址和端口,转换表项如下:

Inside global:port       Inside local:port        Outside local:port       Outside global:port
1.1.1.1:10000			 192.168.10.1:58887		   1.1.1.2:21				 1.1.1.2:21

之后客户端向服务器发送PORT命令,PORT命令中携带的是客户端的私网地址和端口192.168.10.1:58888,服务器端收到后会向该地址和端口发起数据连接,但是无法建立数据连接,原因如下:

  • 192.168.10.1是私网地址,1.1.1.2到192.168.10.1是不通的,无法直接向私网地址发起连接,但是在某些场景下客户端是向1.1.1.1发起数据连接的,因为第二个原因,连接也是无法建立成功的;
  • 即使服务器端是向1.1.1.1的50000端口发起数据连接,但是1.1.1.1的端口50000并没有和192.168.10.1的端口50000建立nat映射,数据包也无法到达192.168.10.1,数据连接中断。

实际实验中抓包分析如下:

  • 客户端

    image

  • 服务器端,对比发现载荷中的PORT字段没有被NAT转换,数据连接失败。

    image

FTP服务器在内部网络

对于FTP客户端在外部网络,FTP服务器端在内部网络的场景,是可以正常通过NAT的,如下图:

image

服务器端一般需要做地址或端口映射,映射到路由器外网端口,路由器会正常生成控制连接和数据连接的转换表项:

image

抓包如下,这里数据端口服务器使用的不是端口20,而是随机端口:

服务器端:

image

客户端:
image

路由器主要配置:

ip access-list extended 100110 permit ip 192.168.10.0 0.0.0.255 1.1.1.0 0.0.0.255exitinterface gigabitethernet0ip address 192.168.10.254 255.255.255.0ip nat insideexitinterface gigabitethernet1ip address 1.1.1.1 255.255.255.0ip nat outsideexit
# 关闭FTP ALG                          
no ip nat support ftp
ip nat inside source static tcp 192.168.10.1 21 1.1.1.1 21 
ip nat inside source list 1001 interface gigabitethernet1 overload 

FTP被动模式

客户端在外部网络

在FTP被动模式下,如果网络中存在NAT,且FTP客户端在NAT外部网络中,那么FTP数据连接会出现下面的问题,如图:

image

外部网络中的FTP客户端和内部网络中的FTP服务器端通过NAT地址转换是可以正常建立控制连接的,控制连接中对于FTP客户端看到的服务器端地址和端口是经过地址映射或端口映射之后的地址和端口,转换表项如下:

Inside global:port       Inside local:port        Outside local:port       Outside global:port
1.1.1.1:21			     192.168.10.1:21		      -		                -

之后客户端向服务器发送PASV命令,PASV命令中携带的是服务器端的私网地址和端口192.168.10.1:50000,客户端收到后会向该地址和端口发起数据连接,但是无法建立数据连接,原因如下:

  • 192.168.10.1是私网地址,1.1.1.2到192.168.10.1是不通的,无法直接向私网地址发起连接,但是在某些场景下客户端是向1.1.1.1发起数据连接的,因为第二个原因,连接也是无法建立成功的;
  • 即使客户端是向1.1.1.1的50000端口发起数据连接,但是1.1.1.1的端口50000并没有和192.168.10.1的端口50000建立nat映射,数据包也无法到达192.168.10.1,数据连接中断。

实际实验中抓包如下:

  • 服务器端:

    image
    )

  • 客户端,对比发现载荷中的PASV字段没有被NAT转换,数据连接建立失败:

    image
    )

客户端在内部网络

对于FTP客户端在内部网络,FTP服务器端在外部网络的场景,是可以正常通过NAT的,如下图:

image

实际实验中抓包如下:

  • 服务器端:

    image

  • 客户端,PASV字段没有被NAT转换,因为是内部向外部发起数据连接,数据连接可以正常建立,无需NAT ALG的支持:

    image

  • NAT转换表项:

    image

NAT ALG在FTP中的应用

上面FTP协议穿越NAT遇到的问题就需要通过NAT ALG(应用层网关)功能来解决。

普通的NAT只能转换TCP或UDP数据包中的IP地址和端口号,但是对应用层报文中的IP地址和端口号是无法进行转换的,这就造成了FTP穿越普通NAT数据连接不通的问题。

而NAT ALG技术就可以有效的识别FTP等多通道协议中应用层载荷中IP地址和端口,将载荷中需要进行IP地址和端口转换或者需要特殊处理的字段进行相应的转换和处理,形成NAT转换表项,这样后续数据层面的报文就可以匹配到这个NAT转换表项,执行正常的转换和转发流程。

下面针对FTP的主动模式和被动模式下NAT ALG工作流程进行说明。

FTP主动模式

下面的图是FTP主动模式下NAT ALG和ASPF的工作过程,其中FTP客户端在内部网络中,FTP服务器端在外部网络中。

  • 首先FTP客户端向FTP服务器端发起控制连接的三次握手,此处客户端地址会经过源NAT转换后到达服务器;
  • 客户端向服务器发送PORT命令,告知服务器自己在数据连接中使用的地址和端口,原始报文应用层载荷中携带的地址和端口是192.168.10.1:61257,这是ASPF会识别到这个信息,生成Server-map表项,表项中记录的客户端的ip和端口就是192.168.10.1:61257,之后由NAT ALG进行处理,将载荷中的地址和端口进行转换,转换后的为1.1.1.1:50199,发送给服务器端,同时防火墙上会生成NAT转换表项,建立192.168.10.1:61257和1.1.1.1:50199的映射关系;
  • 服务器收到PORT命令后,根据载荷中的数据,对客户端发起数据连接,这里就会对1.1.1.1:50199发起连接,这里的1.1.1.1是一个公网地址,是可达的,数据自然就会到达防火墙;
  • 到达防火墙后会进行目的NAT转换,根据之前NAT ALG生成的NAT表项,将报文中的目的地址和端口转换成192.168.10.1:61257,接着匹配Server-map表现,也可以正常匹配上,无需再检查防火墙策略,该报文就会正常通过防火墙到达客户端,之后就可以正常建立数据连接的三次握手,进行数据传输。

image

下面使用实验验证上面的理论:

  • 路由器基础配置:

    ip access-list extended 100110 permit ip 192.168.10.0 0.0.0.255 1.1.1.0 0.0.0.255exitinterface gigabitethernet0ip address 192.168.10.254 255.255.255.0ip nat insideexitinterface gigabitethernet1ip address 1.1.1.1 255.255.255.0ip nat outsideexit# 开启NAT ALG
    ip nat support ftp
    ip nat inside source list 1001 interface gigabitethernet1 overload 
    
  • 客户端抓包分析

    image

  • 服务器端抓包,对比客户端和服务器的PORT字段,可以看出来TCP载荷中的PORT字段被进行了NAT转换;

    image

  • 在路由器上查看信息:

    NAT转换信息,标红的就是NAT ALG生成的转换表项;

    image

    查看NAT ALG的相关参数:

    image

FTP被动模式

下面的图是FTP被动模式下NAT ALG和ASPF的工作过程,其中FTP服务器端在内部网络中,FTP客户端在外部网络中。

  • 因为这里FTP客户端在防火墙内部,使用的是私网地址,因此需要把服务器在防火墙上进行端口映射,将192.168.10.1的21端口映射到1.1.1.1的21端口;这样FTP客户端就可以向FTP服务器端(1.1.1.1:21)发起控制连接的三次握手,此处会进行目的地址转换后到达服务器;
  • 服务器端向客户端发送PASV命令,告知客户端自己在数据连接中使用的地址和端口,原始报文应用层载荷中携带的地址和端口是192.168.10.1:58888,这是ASPF会识别到这个信息,生成Server-map表项,表项中记录的服务器端的ip和端口就是192.168.10.1:58888,之后由NAT ALG进行处理,将载荷中的地址和端口进行转换,转换后的为1.1.1.1:40000,发送给客户端,同时防火墙上会生成NAT转换表项,建立192.168.10.1:58888和1.1.1.1:40000的映射关系;
  • 客户端收到PASV命令后,根据载荷中的数据,对服务器端发起数据连接,这里就会对1.1.1.1:40000发起连接,这里的1.1.1.1是一个公网地址,是可达的,数据自然就会到达防火墙;
  • 到达防火墙后会进行目的NAT转换,根据之前NAT ALG生成的NAT表项,将报文中的目的地址和端口转换成192.168.10.1:58888,接着匹配Server-map表现,也可以正常匹配上,无需再检查防火墙策略,该报文就会正常通过防火墙到达服务器端,之后就可以正常建立数据连接的三次握手,进行数据传输。

image

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/29270.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

python读写json文件

1. 新建json文件打开记事本,重命名为.json后缀 使用的样例如下,注意看json文件格式:{"server":{"host": "example.com","port": 443,"protocol": "https"},"authentication":{"username":…

FTP主动模式和被动模式(2)- 防火墙对FTP的影响 ASPF

防火墙对FTP的影响 ASPF 多通道协议 应用层程序有些使用的是单通道协议,有些使用的是多通道协议。单通道协议 例如http协议,整个协议交互过程中,服务端和客户端只建立一个连接,并且服务端固定使用一个端口,例如80端口,这种一般为单通道协议; 防火墙一般都需要配置精细的…

微信小程序导出Excel文件并转发给好友

需求: 小程序的列表页面增加导出功能,点击“批量导出”按钮,则自动生成导出文件,然后自动调起微信好友列表,然后可以将文件发送给微信好友 解决方案: 由于列表数据是分页加载,所以导出直接由后端同学进行生成并返回url,则我们前端同学只负责下载wx.downloadFile并转发wx…

前端报错

一、加载控制台报错,但功能好像还都正确。 原因:组件还没加载就访问,是会报类似如下的错

在云打印服务平台上打印资料有什么优势?

随着移动互联网和电子商务的发展,现在有越来越多的用户选择在网上购物。而对于学生们来说,现在也有越来越多的同学们开始去网上打印。而云打印的出现,让这些网上打印资料的学生选择了云打印服务。那么在云打印服务平台上打印资料有什么优势?今天小易就带大家来了解一下。 在…

你的许可证不是正版,你可能是盗版软件的受害者?

你的许可证不是正版,你可能是盗版软件的受害者? 问题分析 有的用户在使用 Office 时可能会遇到许可证问题,可能是弹窗,也有可能是横幅。 我们不讨论以前是什么样,现在是这样的: 微软为了遏制 KMS 盗版过于横行,封禁了使用 KMS 工具进行激活的手段,因为使用 KMS 工具激活…

Go-Zero自定义goctl实战:定制化模板,加速你的微服务开发效率(四)

gozero如何自定义goctl?本文详解和实战,通过本文你将了解goctl的妙用,提高你的开发效率。介绍如何使用goctl工具实现模板定制化,并根据实际项目业务需求进行模板定制化实现。前言 上一篇文章带你实现了Go-Zero和goctl:解锁微服务开发的神器,快速上手指南,本文将继续深入…