我正在与我们的网络管理员讨论他们应该如何配置防火墙以允许我使用FTP和FTPS将我的FTP客户端用于被动模式,并且他们已经要求允许特定目标端口允许通过。我的理解是FTP服务器'对PASV命令的响应将始终指定大于1023的端口,但我无法找到明确声明此标准的文档或文档!
RFC 959似乎已接近尾声,因为在5.3.2节中,它定义了BNF如下:
<port-number> ::= <number>,<number>
<number> ::= any decimal integer 1 through 255
(虽然这实际上是PORT命令,但我认为它假设227对PASV的响应使用了相同的格式)。
随后在Errata ID 3039中确定此错误,因为当然该数字应为0到255.但这意味着端口号可以是0到65535之间的任意端口号。
为什么需要最终处于1024-65535的非系统端口范围内?还有其他一些RFC这样说吗?
答案 0 :(得分:1)
看看RFC 1579 Firewall-Friendly FTP。它提到了以下内容(在客户端,而不是服务器端):
FTP规范说默认情况下,所有数据传输都应该 通过一个连接。活动打开由服务器完成, 从其端口20到客户端计算机上使用的相同端口 用于控制连接。客户端被动打开。
无论好坏,大多数当前的FTP客户端都不会这样做。 每次传输都使用新连接;避免与之发生冲突 TCP的TIMEWAIT状态,客户端每次都会选择一个新的端口号 并发送一个PORT命令向服务器通知。
这两种情况都不适合防火墙。如果使用包过滤器 (例如,由大多数现代路由器提供)数据信道 请求显示为对未知端口的传入呼叫。 大多数防火墙 被构造为允许来电仅限于某些被认为 - 安全端口,例如SMTP。通常的妥协只是阻止 “服务器”区域,即低于1024的端口号。但该策略 风险很大; X Windows等危险服务更高 编号端口。
并非确实要求服务器必须使用非系统端口&gt; = 1024.但这是现代系统中的常见做法。
IIRC,在旧系统上,系统端口1-1023仅可用于低级系统/内核服务(部分原因是它们保留为开头)并且不能用于非用户模式应用程序以系统权限运行。因此,FTP服务器可以接受端口21上的客户端并在端口20上执行传输,但不能在任何其他系统端口上执行传输,因此PASV
端口范围必须> = 1024。