当前位置:文档之家› 报文解析FTP主动被动模式和FTP结合NAT使用

报文解析FTP主动被动模式和FTP结合NAT使用

FTP模式介绍
FTP的主动模式和被动模式的区别:
主动模式:(也叫Standard模式,PORT方式)FTP服务器主动去连接FTP客户端。

FTP客户端告诉FTP服务器使用什么端口进行侦听,FTP服务器和FTP客户端的这个端口进行连接,源端口是20。

被动模式:(也叫Passive模式,也叫PASV方式)FTP服务器被动的等待FTP客户端连接自己。

FTP服务器打开指定范围内的某个端口(也叫自由端口,1024--65535之间),被动的等待客户端进行连接。

主被动模式报文解析
建立控制连接的过程
登录的时候客户端是44.1.1.44服务器是33.1.1.33,用户名1密码111111
通过命令行登录
Client:syn 我请求跟你进行连接
Server:ack+syn 可以,我也请求跟你连接
Client:ack 可以(上面是三次握手)
Server:response 我这ready准备好了
Client:ack 好的
Client:request 我使用的user是1
Server:response 请输入密码
Client:ack 好的,收到
Client:request 我用的密码是111111
Server: response 用户名1 ,密码111111,正确,logged in,允许进入
Client:ack 好的
上面是进行的连接控制的简单过程,FTP服务器使用的端口号是21,FTP客户端使用的端口号是64023。

主动连接:客户端通过PORT命令告诉服务器自己要使用的数据端口号,然后在客户端主动建立起这个端口的监听。

进行文件传输的时候,服务器来连接客户端的这个数据接口,进行数据传输。

FTP客户端想要下载文件,get hfs.exe
Client:request 我发送了PORT命令要使用主动连接,使用64024进行侦听
Server:response 主动连接的指令成功
Client:request 我想要hfs.exe文件
Server:response 为hfs.exe打开数据连接
Server:syn 主动请求建立数据连接,源端口号20,目的端口号64024
Client:ack+syn 可以,请求与服务器建立连接,sport:64024,dport:20
Server:ack 可以
之后就是server和client之间传输数据的过程,一直到文件传完
Server:response 给client发送一条命令,文件传输ok
Client:ack 好的
以上是主动模式的过程
被动连接:FTP客户端发送PASV命令到FTP服务器,想使用PASV方式传输数据。

服务器收到命令之后,主动在服务器端建立一个数据端口(随机的1023-65535)的TCP/IP监听,并把这个数据端口号返回给客户端,被动的等待客户端连接自己。

在进行文件传输的操作时,客户端连接服务器端的这个数据端口,进行数据传输。

Passive模式在建立控制连接的时候和Standard建立控制连接类似,但是建立连接之后发送的不是Port命令,而是Pasv命令。

Client:request PASV 我想要使用被动的方式传输数据
Server:response 使用被动模式,我的监听端口是4262
Client:ack 好的
Client:syn 请求连接使用端口64054和server的4262进行连接
Server:ack+syn 确认并请求连接使用4262和client的64054进行连接
Client:ack 好的
FTP主动被动模式和防火墙
多数防火墙设置的时候都是不允许外部发起连接的,所以许多位于防火墙后或者内网的FTP服务器不支持PASV模式,因为客户端无法穿越防火墙打来FTP服务器的高端端口;二许多内网的客户端不能使用PORT模式登录FTP服务器,因为从服务器的TCP的20无法和内网网络的客户端建立一个新的连接,造成无法工作。

总结:看谁在内网,谁就能主动连接对端成功,再看client和server的位置,判断出能支持的哪种模式。

FTP的连接又分为控制连接和数据连接。

下面具体分析
FTP Server在内网,FTP Client在外网的情况:
Standard模式:首先是client和server建立控制连接,目的port是21
之后是server和client建立数据连接,建立之后client向server发送数据的目的端口是20,防火墙上面开启20和21端口即可。

Passive模式:首先client和server之间建立控制连接,client发送PASV指令,server告诉client 自己打开的大于1023的端口(随机的)进行侦听,此时,客户端无法穿越防火墙打开server的高端端口。

(防火墙不知道server打开的哪些端口,而且这个端口在server端是随机的,下次数据传输不定哪个端口)所以不能使用Passive模式。

FTP Server在外网,FTP Client在内网的情况
Standard模式:首先client和server建立控制连接,目的port是21
之后server和client建立数据连接,目的端口号不是20(此时服务器无法和client建立新的数据连接,造成无法工作),所以主动模式在这种情况下行不通。

Passive模式:首先client和server建立控制连接,目的端口号是21。

Client发PASV指令。

之后server向client发送侦听端口,client连接server此端口,然后server将通过这个端口进行数据传输,这个时候server不需要建立一个新的和client之间的连接。

FTP和NAT
针对上面的client和server的分布,下面结合NAT进行试验
FTP Server在外网,FTP Client在内网的情况
内网访问外网:配置源NAT
源ip:44.1.1.44 目的ip:33.1.1.33 转换后源ip:33.1.1.1
访问过程NAT起作用:
主动模式:
源MAT主动连接cl ient端.pcapng 源NAT主动连接s erver端.pcap
客户端发送PORT指令,并发送自己的侦听端口,等待服务端的连接
服务端收到PORT指令,检查到源ip是经过NAT转换得到的,ALG将FTP部分的源ip也进行转换。

被动模式:
源MAT被动连接cl ient端.pcapng 源NAT被动连接s erver端.pcap
客户端发送PASV指令
服务端收到指令回应侦听端口并被动等待客户端的连接:
在客户端收到服务端发来的回应报文:
FTP Server在内网,FTP Client在外网的情况:
外网访问内网:配置目的地址转换:
主动模式:
目的NAT主动连接client端.pcapng 目的NAT主动连
接server端.pcap
客户端发送PORT指令,并发送侦听端口
服务端收到侦听端口
被动模式
目的NAT被动连接client端.pcapng 目的NAT被动连
接server端.pcap 客户端发送PASV指令
服务端收到PASV指令之后,想客户端发送侦听端口被动等待连接
客户端抓包:
服务端抓包:
内网访问外网:配置源NAT,被动模式不需要ALG进行转换能访问成功。

主动模式AGL对FTP部分进行ip转换。

外网访问内网,配置目的NAT,主动模式不需要ALG进行转换访问成功,被动模式ALG对FTP部分进行ip转换。

ALG用于外部地址想访问内部地址的时候。

ALG就是在发现如果报文头做了NAT,在这个时候如果发现这个是一个FTP的连接的时候,就需要同时改变PORT命令中的地址。

这样理解上面的结论就是,内网访问外网源NAT,主动模式需要外部地址跟内部地址建立数据连接,这个时候需要ALG生效;而被动模式不涉及外部地址想访问内部地址的过程。

外网访问内网目的NAT,被动模式的时候是client发起请求,就是外网想和内网建立控制连接,需要ALG 进行地址转换;而主动模式的数据连接是内网向外网的连接,不涉及。

相关主题