一、FTP使用两个T C P连接
F T P是文件传输的I n t e r n e t标准。
FTP与多数其他T C P应用不同,它在客户进程和服务器进程之间使用两个T C P连接.
第一个是控制连接,它一直持续到客户进程与服务器进程之间的会话完成为止。
另一个是数据连接,按需可以随时创建和撤消。每当一个文件传输时,就创建一个数据连接。
其中,控制连接被称为主连接。而数据连接被称为子连接。
二、FTP具有两种连接模式
这里是指FTP的数据连接分为两种模式(主动和被动)。默认采用主动连接模式。
以下摘引自:
数据连接分为两种模式:主动连接(PORT)和被动连接(PASV)。
Port模式:ftp server:tcp 21 <——client:dynamic ftp server:tcp 20 ——>client:dynamic
Pasv模式:ftp server:tcp 21 <—-client:dynamic ftp server:tcp dynamic <—-client:dynamic
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户 端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条 数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务 器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来 传送数据。
三、相关防火墙配置:
数据连接是子连接,它的连接状态在连接初期被识别为RELATED,而不是NEW:
关于RELATED的实现:netfilter为连接跟踪增加了一个特殊的helper模块,以便能检测到主连接(这里是ftp的控制连接)的子连接(这里是ftp的数据连接),然后将子连接的状态标识为RELATED。
子连接的状态演变:
主动连接:服务器发送的第一个syn包被识别为RELATED,客户机发送ack/syn时连接变为ESTABLISHED。
被动连接:客户机发送的第一个syn包被识别为RELATED,服务器发送ack/syn时连接变为ESTABLISHED。
iptables规则:
#allow all ftp incoming connections
iptables -A INPUT -p tcp –dport 21 -m state –state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp –sport 21 -m state –state NEW,ESTABLISHED -j ACCEPT
# Enable active ftp transfers
iptables -A INPUT -p tcp –dport 20 -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp –sport 20 -m state –state ESTABLISHED -j ACCEPT
# Enable passive ftp transfers
iptables -A INPUT -p tcp –sport 1024:65535 –dport 1024:65535 -m state –state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp –sport 1024:65535 –dport 1024:65535 -m state –state ESTABLISHED,RELATED -j ACCEPT
------------------------------------------Below Is Added on Dec 06, 2011---------------------
在主动模式下,FTP客户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,然后开放N+1号端口进行监听,并向服务器发出PORT N+1命令。服务器接收到命令后,会用其本地的FTP数据端口(通常是20)来连接客户端指定的端口N+1,进行数据传输。
在被动模式下,FTP库户端随机开启一个大于1024的端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器发送PASV命令,通知服务器自己处于被动模式。服务器收到命令后,会开放一个大于1024的端口P进行监听,然后用PORT P命令通知客户端,自己的数据端口是P。客户端收到命令后,会通过N+1号端口连接服务器的端口P,然后在两个端口之间进行数据传输。
总的来说,主动模式的FTP是指服务器主动连接客户端的数据端口,被动模式的FTP是指服务器被动地等待客户端连接自己的数据端口。
被动模式的FTP通常用在处于防火墙之后的FTP客户访问外界FTp服务器的情况,因为在这种情况下,防火墙通常配置为不允许外界访问防火墙之后主机,而只允许由防火墙之后的主机发起的连接请求通过。因此,在这种情况下不能使用主动模式的FTP传输,而被动模式的FTP可以良好的工作。
<--文章完-->