主动式连接:port连接方式即客户端通过ftp的端口(21)和ftp服务器建立连接,形成一条链路,当需要有数据传输的时候,客户端在链路上会用port打开某个端口,并告诉ftp服务器自己打开的端口号,然后ftp服务器就可用通过自己的20端口和客户端的那个端口号进行通讯,建立连接,进行数据传输,防火墙的设置也比较简单,只要控制21端口的连接就可以。
Port模式FTP 客户端首先和FTP服务器的TCP 21端口建立连接,通过这个通道发送命令,客户端需要接收数据的时候在这个通道上发送PORT命令。 PORT命令包含了客户端用什么端口接收数据。在传送数据的时候,服务器端通过自己的TCP 20端口连接至客户端的指定端口发送数据。 FTP server必须和客户端建立一个新的连接用来传送数据。
例如: iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 21 -j ACCEPT 就可以让客户端联机了
被动式连接:pasv连接方式即客户端通过ftp的端口号和ftp服务器建立连接,形成一条链路,当需要传输数据的时候,服务器会在链路上通过pasv命令打开一个端口,告诉客户端可以通过这个端口建立连接,传输文件,防火墙设置会多一个步骤
首先需要修改ftp的配置文件
vim /etc/vsftpd/vsftpd.conf
pasv_min_port=6000
pasv_max_port=6100
然后增加防火墙规则
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport -j ACCEPT
iptables -A INPUT -p tcp -s 192.168.1.0/24 --dport 6000:6100 -j ACCEPT
所以,如果你是如果通过代理上网的话,就不能用主动模式,因为服务器敲的是上网代理服务器的门,而不是敲客户端的门
而且有时候,客户端也不是轻易就开门的,因为有防火墙阻挡,除非客户端开放大于1024的高端端口
FTP有两种使用模式:主动和被动。主动模式要求客户端和服务器端同时打开并且监听一个端口以建立连接。在这种情况下,客户端由于安装了防火墙会产生一些问题。所以,创立了被动模式。
被动模式只要求服务器端产生一个监听相应端口的进程,这样就可以绕过客户端安装了防火墙的问题。
一个主动模式的FTP连接建立要遵循以下步骤:
1.客户端打开一个随机的端口(端口号大于1024,在这里,我们称它为x),同时一个FTP进程连接至服务器的21号命令端口。此时,源端口为随机端口x,在客户端,远程端口为21,在服务器。
2.客户端开始监听端口(x+1),同时向服务器发送一个端口命令(通过服务器的21号命令端口),此命令告诉服务器客户端正在监听的端口号并且已准备好从此端口接收数据。这个端口就是我们所知的数据端口。
3.服务器打开20号源端口并且建立和客户端数据端口的连接。此时,源端口为20,远程数据端口为(x+1)。
4.客户端通过本地的数据端口建立一个和服务器20号端口的连接,然后向服务器发送一个应答,告诉服务器它已经建立好了一个连接。
被动模式FTP:
为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。
在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。
当开启一个 FTP连接时,客户端打开两个任意的非特权本地端口(N > 1024和N+1)。第一个端口连接服务器的21端口,但与主动方式的FTP不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交 PASV命令。这样做的结果是服务器会开启一个任意的非特权端口(P > 1024),并发送PORT P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。
对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:
1. 从任何大于1024的端口到服务器的21端口 (客户端的初始化连接)
2.服务器的21端口到任何大于1024的端口 (服务器响应到客户端的控制端口的连接)
3. 从任何大于1024端口到服务器的大于1024端口 (客户端初始化数据连接到服务器指定的任意端口)
4.服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)
本文转自 chengxuyonghu 51CTO博客,原文链接:http://blog.51cto.com/6226001001/1653664,如需转载请自行联系原作者