文件传输协议(FTP)是一个较老的复杂的多端口协议。它给集群环境带来了一组特殊挑战。要理解这些挑战的性质,你必须首先理解 FTP 工作原理的一些关键所在。
在多数服务器客户关系中,客户机器打开到服务器的特定端口的连接。当 FTP 客户试图连接 FTP 服务器时,它会打开到 FTP 控制端口21的连接。然后,客户告诉 FTP 服务器要建立积极(active)还是消极(passive)连接。客户所选的连接类型决定服务器的响应方式以及传输端口。
两类数据连接为:
当建立了积极连接时,服务器从端口20打开到客户机器的高位端口的连接。然后,服务器上的所有数据都通过这个连接来传递。
当建立了消极连接时,客户要求 FTP 服务器建立消极连接端口,它可以是10000以上的任何端口。然后,服务器会把这次特定对话绑定到这个高位端口,并把端口号码转发给客户。客户会打开这个新绑定的端口进行数据连接。客户随后进行的每个数据请求都会导致单独的数据连接。多数现代 FTP 客户试图建立到 FTP 服务器的消极连接。
以上内容和群集相关的两个要点是:
客户决定连接类型,而不是服务器。这意味着,要有效地集群 FTP,你必须配置 LVS 路由器来处理积极和消极连接。
FTP 客户/服务器关系具备潜在的打开大量 Piranha 配置工具和 IPVS 不知道的端口的可能性。
IPVS 分组转发只有在出入群集连接的端口号码或防火墙标记被识别时才被允许。如果群集之外的客户试图打开 IPVS 没有配置处理的端口,连接就会被放弃。同理,如果真正服务器试图在一个 IPVS 不知道的端口上打开到互联网的连接,该连接也会被放弃。这意味着所有从 FTP 客户到互联网的连接都必须被分配了同样的防火墙标记,所有从 FTP 服务器的连接都必须使用网络分组过滤规则被正确地转发到互联网中。
在给 FTP 服务分配 iptables 规则时,请回顾一下第 11.3.1 节中关于检查现存网络分组过滤规则的多端口服务和技术的信息。
以下是给 FTP 交通分配相同的防火墙标记21的规则。要使这些规则正确运行,你必须使用 Piranha 配置工具的 VIRTUAL SERVER 子节来给端口21配置一个虚拟服务器,其中的 Firewall Mark 字段被设置为 21。详情请参阅第 12.6.1 节。
积极连接的规则告诉内核接受和转发到内部浮动 IP 地址的端口20的连接。端口20是 FTP 数据端口。
/sbin/iptables -t nat -A POSTROUTING -p tcp \ -s n.n.n.0/24 --sport 20 -j MASQUERADE |
在上面的 iptables 命令中,n.n.n 应该被替换成 NAT 接口的内部网络接口的浮动 IP 地址的前三个值,它在 Piranha 配置工具的 GLOBAL SETTINGS 面板上被定义。该命令允许 LVS 路由器接受 IPVS 不知道的真正服务器的输出连接。
消极连接的规则给从互联网到服务的浮动 IP 地址的连接在大范围的端口内(从10000到20000)分配恰当的防火墙标记。
![]() | 警告 | ||
---|---|---|---|
如果你要限定消极连接的端口范围,你还必须配置 VSFTP 服务器使用匹配的端口范围。这可以通过在 /etc/vsftpd.conf 文件中添加以下行来达到:
你还必须控制服务器显示给客户的消极 FTP 连接的地址。在 NAT 选路的 LVS 系统中,给 /etc/vsftpd.conf 添加以下行来超越到 VIP 的真正服务器 IP 地址,这才是客户在连接时所看到的地址。例如:
把 X.X.X.X 替换成 LVS 系统的 VIP 地址。 关于其它 FTP 服务器的配置,请参考相应的文档。 |
这个范围应该足以满足多种情况;然而,你可以增加这个数量来包括所有可用的非安全端口,只需把以下命令中的 10000:20000 改成 1024:65535 即可。
/sbin/iptables -t mangle -A PREROUTING -p tcp \ -d n.n.n.n/32 \ --dport 21 -j MARK --set-mark 21 /sbin/iptables -t mangle -A PREROUTING -p tcp \ -d n.n.n.n/32 \ --dport 10000:20000 -j MARK --set-mark 21 |
在上面的 iptables 命令中,n.n.n.n 应该被替换成 FTP 虚拟服务器的浮动 IP 地址,它在 Piranha 配置工具的 VIRTUAL SERVER 子节中被定义。这些命令的总体效应是给所有要到浮动 IP 上的相应端口的交通分配防火墙标记21,然后它会被 IPVS 识别并正确转发。
![]() | 警告 |
---|---|
以上的命令会立即生效,但是重新启动后就无效了。要确保网络分组过滤设置在系统重新引导后被恢复,请参阅第 11.5 节。 |
最后,你需要确定恰当的服务在恰当的运行级别中被激活。关于它的详情,请参阅第 10.1 节。