分类: LINUX
2011-04-01 15:59:35
什么叫做PASV mode(被动模式传送)?他是如何工作的?
FTP的连接一般是有两个连接的,一个是客户程和服务器传输命令的,另一个是数据传送的连接。FTP服务程序一般会支持两种不同的模式,一种是Port模式,一种是Passive模式(Pasv Mode),我先说说这两种不同模式连接方式的分别。
先假设客户端为C,服务端为S.
Port模式:
当客户端C向服务端S连接后,使用的是Port模式,那么客户端C会发送一条命令告诉服务端S(客户端C在本地打开了一个端口N在等着你进行数据连接),当服务端S收到这个Port命令后 就会向客户端打开的那个端口N进行连接,这种数据连接就生成了。
Pasv模式:
当客户端C向服务端S连接后,服务端S会发信息给客户端C,这个信息是(服务端S在本地打开了一个端口M,你现在去连接我吧),当客户端C收到这个信息后,就可以向服务端S的M端口进行连接,连接成功后,数据连接也建立了。
从上面的解释中,大家可以看到两种模式主要的不同是数据连接建立的不同,对于Port模式,是客户端C在本地打开一个端口等服务端S去连接建立数据连接;而Pasv模式就是服务端S打开一个端口等待客户端C去建立一个数据连接。
我需要把传送模式设置成PASV mode吗?
如果您连接到INTERNET的方式如下图,你需要设置成为PASV mode模式传送
路由上有两个ip一个是内网ip(也就是你的网关地址)另外一个是外网IP,你所有LAN中的计算机都是共享这个218.63.1.5访问INTERNET的(中间通过了192.168.1.1这个网关),让我们来看一个连接的详细过程,以便您
更进一步了解为什么需要设置成为PASV mode 传送:
当您通过下载工具或使用浏览器下载影片的时候就开始连接FTP服务器,
当FTP服务收到你的连接请求后发送应答信息给客户并开始等待用户的认证信息,-->认证通过后开始建立数据连接
如果你不是设置成为pasv模式,那么客户段(下载工具)会在本地计算机开一个数据端口,然后发送一条“命令”给FTP服务段,(我已打开了n端口你现在
可以连接我),那么FTP服务器段就开始连接你ip地址的N端口,(但是连接是失败的) 因为你是通过192.168.1.1
这个网关(你的路由设备)访问internet的ftp服务段他实际上是同你的外网地址为218.63.1.5的路由设备连接,根本就连接不上你下载工具
中打开的端口,例如你使用的是 192.168.1.2
这个客户机,FTP服务段此时无法同你计算机192.168.1.2)监听端口N连接上,所以此时你会看到服务器反馈的错误信息,提示你
192.168.1.2打开的端口无法连接之类的,
信息此时你就需要把传送模式设置成为PASV模式,而如果你使用的是PASV模式那么当你ftp通过认证后,客户段首先向服务器发送一条PASV命令,服
务段接受到命令后打开一个端口并告诉客户段“我已打开了一个端口,你此时可以来连接了"
客户段(下载工具)接受到信息后,就去连接服务段已经打开了的端口,从而完成数据连接,所有ftp下载的数据流都将通过这个端口传送
而且在用iptables做NAT时,应该装载这两个模块(ip_nat_ftp、ip_conntrack_ftp),才能正常连到ftp服务器。否则pasv被动模式都无法连接到ftp服务器。
FTP模式与数据端口
FTP 分为两类,PORT FTP和PASV FTP,PORT
FTP是一般形式的FTP。这两种FTP在建立控制连接时操作是一样的,都是由客户端首先和FTP服务器的控制端口(默认值为21)建立控制链接,并通过
此链接进行传输操作指令。它们的区别在于使用数据传输端口(ftp- data)的方式。PORT
FTP由FTP服务器指定数据传输所使用的端口,默认值为20。PASV FTP由FTP客户端决定数据传输的端口。 PASV
FTP这种做法,主要是考虑到存在防火墙的环境下,由客户端与服务器进行沟通(客户端向服务器发出数据传输请求中包含了数据传输端口),决定两者之间的数
据传输端口更为方便一些。
port_enable=YES|NO
如果你要在数据连接时取消PORT模式时,设此选项为NO。默认值为YES。
connetc_from_port_20=YES|NO
控制以PORT模式进行数据传输时是否使用20端口(ftp-data)。YES使用,NO不使用。默认值为NO,但RHL自带的vsftpd.conf文件中此参数设为YES。
ftp_data_port=port number
设定ftp数据传输端口(ftp-data)值。默认值为20。此参数用于PORT FTP模式。
port_promiscuous=YES|NO
默认值为NO。为YES时,取消PORT安全检查。该检查确保外出的数据只能连接到客户端上。小心打开此选项。
pasv_enable=YES|NO
YES,允许数据传输时使用PASV模式。NO,不允许使用PASV模式。默认值为YES。
pasv_min_port=port number
pasv_max_port=port number
设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意。默认值为0。把端口范围设在比较高的一段范围内,比如50000-60000,将有助于安全性的提高。
pasv_promiscuous=YES|NO
此选项激活时,将关闭PASV模式的安全检查。该检查确保数据连接和控制连接是来自同一个IP地址。小心打开此选项。此选项唯一合理的用法是存在于由安全隧道方案构成的组织中。默认值为NO。
pasv_address=
此选项为一个数字IP地址,作为PASV命令的响应。默认值为none,即地址是从呼入的连接套接字(incoming connectd socket)中获取。
所以如果linux打开了防火场,必须开通对应的端口 例如:
-A RH-Firewall-1-INPUT -m state --state NEW -p tcp -m tcp --dport 30000:31000 --syn -j ACCEPT