我已经使用 apt-get 在 Ubuntu 10.04 上安装了带有 PureFTP 1.0.24 的 pure-ftpd 包。
尽管这是默认端口范围,但我还是添加了文件 /etc/pure-ftpd/conf/PassivePortRange,其中包含:
30000 50000
这确实在命令运行时添加了正确的选项(-p 30000:50000
),但出于某种原因,我仍然尝试使用 50000 以上的端口进行连接。我认为问题在于这些是主动 ftp 会话,但如果它仅适用于被动模式,那么指定端口范围有什么意义呢?然后我仍然需要打开防火墙中的所有端口......
有没有办法为所有连接(而不仅仅是被动连接)指定端口范围?
答案1
在主动模式下,服务器会发起与客户端定义的 IP 地址的连接,因此服务器无法影响正在使用的端口号。在这种情况下,您不需要打开 21 以外的其他传入端口,因为服务器会发起与客户端的数据连接。
在被动模式下,客户端会打开与服务器定义端口的连接,这就是被动端口范围发挥作用的地方。服务器会选择范围内的空闲端口并将其交给客户端。这当然意味着整个端口范围需要在服务器防火墙中打开,这会带来安全隐患。
Linux 有一个巧妙的功能可以减轻为被动 FTP 打开大端口范围的影响 - iptables 连接跟踪。要利用它,您需要确保ip_conntrack_ftp模块加载后,您就可以像这样允许流量# iptables -A your_chain -i your_iface -m state --state RELATED -m helper --helper ftp -j ACCEPT
(如果需要,您可以包含您的端口范围)。这会告诉 iptables 接受由 conntrack FTP 帮助程序管理的相关连接。因此,如果任何其他服务正在侦听您被动端口范围内的套接字,iptables 将拒绝访问该端口,因为它无法识别它与 FTP 相关。
答案2
在被动模式下,服务器会告诉客户端重新连接到随机端口。您已将服务器配置为使用特定范围,因此它应该只使用这些范围。此范围需要通过防火墙打开以允许连接。(除非您的防火墙足够聪明,可以查看 FTP 数据包并添加动态规则)。
在主动模式下,客户端要求服务器通过随机端口与其建立连接。由于客户端会选择此端口,因此您无法控制。但是,要使主动模式正常工作,您只需添加一条保持状态规则以允许这些连接从您的服务器发出。您无需完全打开所有端口。