主动和被动FTP有什么区别?


312

有人可以告诉我主动FTP和被动FTP有什么区别吗?
哪一个更好?

Answers:


474

主动和被动是FTP可以运行的两种模式。

对于后台,FTP实际上使用客户端和服务器之间的两个通道,即命令和数据通道,它们实际上是独立的 TCP连接。

命令通道用于命令和响应,而数据通道用于实际传输文件。

将命令信息和数据分离到单独的通道中,这是一种能够将命令发送到服务器而不必等待当前数据传输完成的好方法。根据RFC,这仅适用于命令的子集,例如退出,中止当前传输以及获取状态。


活动模式下,客户端建立命令通道,但是服务器负责建立数据通道。例如,如果客户端计算机受防火墙保护并且不允许来自外部方的未授权会话请求,则实际上可能是个问题。

被动模式下,客户端建立两个通道。我们已经知道它会在活动模式下建立命令通道,并且在此处也是如此。

但是,它随后请求服务器(在命令通道上)开始侦听端口(由服务器决定),而不是尝试建立与客户端的连接。

作为此过程的一部分,服务器还将选择的要侦听的端口号返回给客户端,以便客户端知道如何连接。

客户端知道这一点后,便可以成功创建数据通道并继续。

RFC中提供了更多详细信息:https : //www.ietf.org/rfc/rfc959.txt


1
我认为端口Y周围的语句不正确,在活动模式下,客户端无法确定端口Y,服务器会尝试随机选择端口号,并尝试查看客户端是否允许通过所选端口进行通信。我之所以这样说是因为,如果这不是真的(我的说法),那么即使客户端位于防火墙后面,客户端也可以始终创建两个防火墙规则,一个用于传出连接,一个用于传入连接。
arun.raj.mony 2013年

1
@arun,客户端不必控制防火墙。示例:在公司环境中,通常在公司范围的网络与外部世界之间存在防火墙,运行FTP的客户端在该防火墙上的功率为零。
paxdiablo 2014年

在被动模式下,为什么服务器向客户端发送一个随机端口给客户端,而不是客户端直接连接到服务器端口20?
chengbo 2014年

@paxdiablo在被动模式下,为什么服务器会分配一个随机端口no并将其发送给客户端以进行数据连接?客户端为什么不能在服务器端直接从客户端端口号到端口号20打开数据通道?
Zephyr

1
我现在在这里问这个问题networkengineering.stackexchange.com/q/43680/37406
Zephyr

166

我最近在工作场所遇到了这个问题,所以我想在这里再说些什么。我将使用图像来说明FTP如何作为先前答案的其他来源。

活动模式:

主动模式


被动模式:

在此处输入图片说明


在活动模式配置中,服务器将尝试连接到随机客户端端口。因此,该端口将不是那些预定义的端口之一。结果,尝试连接到它的将被防火墙阻止,并且将不会建立任何连接。

在此处输入图片说明


被动配置不会出现此问题,因为客户端将是发起连接的客户端。当然,服务器端也可能有防火墙。但是,由于期望服务器比客户端接收更多的连接请求,因此服务器管理员适应这种情况并开放端口选择以满足被动模式配置是合乎逻辑的。

因此,最好将服务器配置为支持被动模式FTP。但是,被动模式会使您的系统容易受到攻击,因为客户端应该连接到随机服务器端口。因此,要支持此模式,不仅服务器必须具有多个可用端口,而且防火墙还应允许与所有这些端口的连接通过!

为了减轻风险,一个好的解决方案是在服务器上指定端口范围,然后在防火墙上仅允许该范围的端口。

有关更多信息,请阅读正式文档


我只是在猜测哪个是安全问题。如果服务器侦听相同的端口(20),则它无法理解哪个客户端正在通话,因此它选择一个随机端口并将其发送给客户端,从而开始侦听该端口。当客户端连接到该端口时,服务器知道它属于哪个客户端。但是对于一个MITM来说,连接到相同的客户端就足够了。(好吧,无论如何这里的mitm攻击都是棘手的……)
Daniele Cruciani

2
很好的答案,尤其是有关防火墙问题的信息
Anh Tuan

14

我的文章FTP连接模式(主动与被动)的修订版本

FTP连接模式(主动或被动)确定如何建立数据连接。在这两种情况下,客户端都会创建到FTP服务器命令端口21的TCP控制连接。这是标准的传出连接,与任何其他文件传输协议(SFTP,SCP,WebDAV)或任何其他TCP客户端应用程序(例如Web浏览器)一样)。因此,打开控制连接时通常没有问题。

与其他文件传输协议相比,FTP协议更复杂的地方是文件传输。其他协议将相同的连接用于会话控制和文件(数据)传输,而FTP协议将单独的连接用于文件传输和目录列表。

活动模式下,客户端开始在随机端口上侦听来自服务器的传入数据连接(客户端发送FTP命令PORT以通知服务器正在侦听哪个端口)。如今,通常客户端位于防火墙(例如内置Windows防火墙)或NAT路由器(例如ADSL调制解调器)之后,无法接受传入的TCP连接。

由于这个原因,引入了被动模式,并且如今已被广泛使用。使用被动模式是更可取的,因为大多数复杂的配置在服务器端仅由经验丰富的管理员执行一次,而不是在客户端(可能)由经验不足的用户单独执行。

被动模式下,客户端使用控制连接向PASV服务器发送命令,然后从服务器接收服务器IP地址和服务器端口号,然后客户端将其用于打开与服务器IP地址和服务器的数据连接收到的端口号。

被动模式的网络配置

使用被动模式时,大多数配置负担都在服务器端。服务器管理员应按以下说明设置服务器。

FTP服务器端的防火墙和NAT必须配置为不仅允许/路由FTP端口21上的传入连接,而且还必须配置一系列用于传入数据连接的端口。通常,FTP服务器软件具有配置选项来设置服务器将使用的端口范围。并且必须在防火墙/ NAT上打开/路由相同的范围。

当FTP服务器位于NAT之后时,它需要知道它的外部IP地址,以便可以将其提供给客户端以响应PASV命令。

活动模式的网络配置

使用活动模式时,大多数配置负担都在客户端。

客户端上的防火墙(例如Windows防火墙)和NAT(例如ADSL调制解调器路由规则)必须配置为允许/路由用于传入数据连接的一系列端口。要在Windows中打开端口,请转到“ 控制面板”>“系统和安全性”>“ Windows防火墙”>“高级设置”>“入站规则”>“新规则”。有关在NAT上路由端口(如果有)的信息,请参阅其文档。

当网络中存在NAT时,FTP客户端需要使用PORT命令知道WinSCP需要提供给FTP服务器的外部IP地址。这样服务器就可以正确连接回客户端以打开数据连接。有些FTP客户端能够自动检测外部IP地址,有些则必须手动配置。

智能防火墙/ NAT

某些防火墙/ NAT尝试通过检查FTP控制连接和/或在控制连接流量中转换数据连接IP地址来自动打开/关闭数据端口。

使用这样的防火墙/ NAT,对于普通的未加密FTP,不需要上述配置。但这不适用于FTPS,因为控制连接流量已加密,防火墙/ NAT无法检查或修改。



1

活动模式-客户端向服务器发出PORT命令,表明它将“主动”提供IP和端口号以将数据连接打开回客户端。

被动模式-客户端发出PASV命令以指示它将“被动”等待服务器提供IP和端口号,此后客户端将创建到服务器的数据连接。

上面有很多不错的答案,但此博客文章包含一些有用的图形并给出了相当扎实的解释:https : //titanftp.com/2018/08/23/what-is-the-difference-between-active-and -被动FTP /

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.