ChatGPT解决这个技术问题 Extra ChatGPT

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

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

我投票结束这个问题,因为它不是一个编程问题。相反,它是关于 FTP 协议的细节。

p
paxdiablo

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

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

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

将命令信息和数据分离到单独的通道中,这是一种无需等待当前数据传输完成即可向服务器发送命令的绝妙方式。根据 RFC,仅对一部分命令强制执行此操作,例如退出、中止当前传输和获取状态。

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

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

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

作为其中的一部分,服务器还将它选择监听的端口号返回给客户端,以便客户端知道如何连接到它。

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

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


我认为围绕端口 Y 的说法不正确,在活动模式下,客户端无法确定端口 Y,服务器尝试随机选择一个端口 # 并尝试查看客户端是否允许通过该所选端口进行通信.我这么说的原因是,如果这不是真的(我的论点),那么即使客户端在防火墙后面,也总是可以创建两个防火墙规则,一个用于传出连接,一个用于传入连接。
@arun,客户端不一定控制防火墙。示例:在公司环境中,公司范围内的网络和外部世界之间通常有防火墙,运行 FTP 的客户端在该防火墙上的功率为零。
在被动模式下,为什么服务器向客户端发送随机端口而不是客户端直接连接到服务器端口 20?
@paxdiablo 在被动模式下,为什么服务器分配一个随机端口号并将其发送给客户端进行数据连接?为什么客户端不能直接打开从客户端端口号到服务器端端口号 20 的数据通道?
我现在在这里问这个问题networkengineering.stackexchange.com/q/43680/37406
Y
Yuantao

我最近在工作场所遇到了这个问题,所以我想我应该在这里多说点什么。我将使用图像来解释 FTP 如何作为先前答案的附加来源工作。

主动模式:

https://i.stack.imgur.com/pWhIu.png

被动模式:

https://i.stack.imgur.com/tRdEK.png

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

https://i.stack.imgur.com/tn0tL.png

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

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

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

如需更多信息,请阅读official document


我只是猜测哪个是安全问题。如果服务器监听同一个端口(20),那么它无法理解哪个客户端在说话,所以它选择一个随机端口并将其发送给客户端,开始监听那个端口。当客户端连接到该端口时,服务器知道它属于哪个客户端。但是 MITM 连接到同一个客户端就足够了。 (好吧,无论如何这里的中间人攻击很棘手......)
很好的答案,尤其是有关防火墙问题的信息
M
Martin Prikryl

我的文章的删节版FTP Connection Modes (Active vs. Passive)

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

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

active 模式下,客户端开始在随机端口上侦听来自服务器的传入数据连接(客户端发送 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 客户端需要知道 WinSCP 需要使用 PORT 命令提供给 FTP 服务器的外部 IP 地址。使服务器可以正确连接回客户端,打开数据连接。有些 FTP 客户端能够自动检测外部 IP 地址,有些则必须手动配置。

智能防火墙/NAT

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

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


S
Saeed Aliakbari

活动模式:-server 启动连接。

被动模式:-client 启动连接。


D
DaveW2122

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

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

上面有很多很好的答案,但这篇博文包含一些有用的图形并给出了非常可靠的解释:https://titanftp.com/2018/08/23/what-is-the-difference-between-active-and-passive-ftp/


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅