了解FTP; 主动/被动防火墙和NAT

我有一些FTP与防火墙NAT的基本问题,我希望有人可以帮助我:)

我把它们分成不同的场景:

没有NAT的活动FTP

build立:

服务器1.2.3.4,默认端口; 客户端1.2.3.5,端口:3141(cmd),3142(数据)

客户端:3141连接到服务器:20

服务器:20个响应客户端:3141

服务器:21连接到客户端:3142

这在实践中通常如何解决? 我可以想到以下几种可能性:

  • 客户端防火墙记住有一个FTP命令连接,因此打开端口3142
  • 客户端防火墙记住有一个FTP命令连接,因此允许从1.2.3.4:21到1.2.3.5:3142的所有连接
  • 客户端防火墙允许从xxxx:21到1.2.3.5:3142的所有连接

我认为在所有这些解决scheme中,客户端将始终使用两个连续的端口 – 这是真的吗?

主动FTP与NAT

build立:

服务器1.2.3.4默认端口; 客户端192.168.0.2,端口3141,3142; 路由器,1.2.3.5和192.168.0.1

客户端:3141通过192.168.0.1连接到1.2.3.4:20

服务器:对1.2.3.5:ARBITRARY的20个响应 – 被传递到192.168.0.2:3141,因为有SNAT

服务器:21连接到1.2.3.5:(ARBITRARY + 1) – 路由器从哪里知道这个数据包属于谁?

被动FTP与NAT

服务器在路由器后面 – 路由器从哪里知道,在任意一个端口上接收的数据包是用于FTP服务器的? (因此,路由器如何知道不要丢弃这个数据包)

为什么被动FTP使用服务器站点上的任意端口进行数据连接? 为什么不端口21?

我希望你明白我的问题,有人可以帮助我:)

谢谢

我可以给你关于FTP和NAT的绝对最好的build议就是要这样做

使用像SFTP这样的现代替代方法来增加连接的安全性(以明文forms发送密码通常被认为是一件坏事),而且也不会执行FTP所执行的错误的端口跳舞。 这样你就不用担心FTP如何工作了。


要回答您的具体问题,您需要阅读FTP RFC 。
您可能还需要阅读防火墙友好FTP ,以及如果您要使用FTP的安全考虑的大列表 。

如果你是出于好奇心求出这些引用就足够了。
如果在阅读RFC后仍然有与解决实际问题有关的具体实施问题,请提出具体细节的新问题。