首页 > 其他分享 >FTP主动模式和被动模式(3)NAT对FTP的影响 - NAT ALG

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

时间:2024-05-09 10:36:33浏览次数:16  
标签:FTP 被动模式 端口 192.168 NAT 1.1 客户端

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 1001
 10 permit ip 192.168.10.0 0.0.0.255 1.1.1.0 0.0.0.255
 exit

interface gigabitethernet0
 ip address 192.168.10.254 255.255.255.0
 ip nat inside
 exit

interface gigabitethernet1
 ip address 1.1.1.1 255.255.255.0
 ip nat outside
 exit
# 关闭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 1001
     10 permit ip 192.168.10.0 0.0.0.255 1.1.1.0 0.0.0.255
     exit
    
    interface gigabitethernet0
     ip address 192.168.10.254 255.255.255.0
     ip nat inside
     exit
    
    interface gigabitethernet1
     ip address 1.1.1.1 255.255.255.0
     ip nat outside
     exit
    
    # 开启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

标签:FTP,被动模式,端口,192.168,NAT,1.1,客户端
From: https://www.cnblogs.com/xuwymm/p/18181557

相关文章

  • FTP主动模式和被动模式
    FTP主动模式和被动模式(1)目录FTP主动模式和被动模式(1)FTP工作原理FTP主动模式FTP被动模式FTP工作原理FTP是基于客户—服务器(C/S)模型而设计的,FTP的独特的优势同时也是与其它客户服务器程序最大的不同点就在于它在两台通信的主机之间使用了两条TCP连接,一条是数据连接,用于数据......
  • FTP主动模式和被动模式(2)- 防火墙对FTP的影响 ASPF
    防火墙对FTP的影响ASPF多通道协议应用层程序有些使用的是单通道协议,有些使用的是多通道协议。单通道协议例如http协议,整个协议交互过程中,服务端和客户端只建立一个连接,并且服务端固定使用一个端口,例如80端口,这种一般为单通道协议;防火墙一般都需要配置精细的安全策略对数据......
  • 完美匹配企业需求的FTP替代软件,需要具备哪些功能和价值?
    FTP作为世界范围内第一个文件传输协议,已被广泛使用30多年,也是企业使用较多的一种方式。但在数字化转型的浪潮中,企业对文件传输的需求日益增长,FTP存在的弊端也逐渐成为企业发展的桎梏,比如安全性、稳定性、传输效率等方面,迫切需要寻找FTP替代软件。以下是迫使企业替换FTP的一些关键......
  • 经过dnat后访问kube-apiserver证书认证失败
    问题现象iptables-tnat-IOUTPUT-d10.10.10.10-ptcp--dport443-jDNAT--to-destination192.168.0.105:6443#报错requesteddomainnamedoesnotmatchtheserver'scertificate,无法通过证书认证。curlhttps://10.10.10.10:443/livez--key./client.key--cert......
  • 解决SpringBoot内置tomcat出现error:An incompatible version [1.2.16] of the Apache
    问题描述在运行SpringBoot时出现一个error2024-05-08T20:52:06.512+08:00ERROR20752---[springboot3-003-demo][main]o.a.catalina.core.AprLifecycleListener:Anincompatibleversion[1.2.16]oftheApacheTomcatNativelibraryisinstalled,wh......
  • C++: fatal error: Killed signal terminated program cc1plus
    C++:fatalerror:Killedsignalterminatedprogramcc1plus1.在Linux系统中进行C++编译时,出现如下报错,导致编译中止:C++:fatalerror:Killedsignalterminatedprogramcc1pluscompilationterminated.2.解决方法——swap分区查阅相关信息后,认为是虚拟机内存不足造成......
  • ssh&sftp端口分离
    ssh&sftp端口分离OS_6复制ssh相关文件为sftp的文件复制/etc/rc.d/init.d/sshd复制/etc/rc.d/init.d/sshd文件,到/etc/rc.d/init.d/sftpd[root@10_56_84_252~]#cp/etc/rc.d/init.d/sshd/etc/rc.d/init.d/sftpd复制/etc/pam.d/sshd复制/etc/pam.d/目录下的sshd文件,放......
  • 对于习惯使用ftp传输的企业,如何寻找最佳的替代方案?
    FTP协议广泛应用各行业的文件传输场景中,对于很多企业而言,由于FTP传输应用获取门槛低、使用普遍,因此,有较为稳定的FTP使用习惯,但即便如此,也不得不面对,FTP应用存在着严重缺陷:  传输效率问题:FTP协议作为最早的互联网文件传输协议,虽然解决了传输协议有无的问题,但却在传输性能上未......
  • mac 创建React Native项目遇到的问题
    ReactNative创建项目遇到的问题1.创建项目时提示:⠧ProcessingtemplateUsageError:Thenearestpackagedirectory(/Users/huang/Documents/develop/RN/myRn)doesn'tseemtobepartoftheprojectdeclaredin/Users/huang.-If/Users/huangisn'tintendedtobe......
  • 最小化安装 MSVC ( 可用于 graalvm native-image )
    前言自从接触了native-image,就想把所有Java项目全用native-image编译一遍,谁不喜欢exe呢......