星期二, 一月 23, 2007

ftp 传输模式和防火墙设置

ftp 总是要用到两个端口,一个指定的默认端口(21)用来接受 ftp 指令和一个数据传输的端口。而 ftp 传输又可分为两种模式,即 PORT 和 PASV(passive 被动模式)。PORT 模式是由服务器端来指定数据传输所使用的端口,一般是20端口,而 PASV 则是由客户端来指定,一般是一个随机的高端端口。

所以为了 ftp 的正常使用,需要正确配置 iptables 防火墙,如果采用 PORT 模式,那么只需要加载了 ip_conntrack 模块,并且有:
iptables -A INPUT/FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
这样的配置即可,因为20端口可以看做一个 RELATED 的状态。

而如果使用 PASV 模式,则需要加载 ip_conntrack_ftp 和 ip_nat_ftp 这两个模块,否则客户端无法使用 passive 模式。

从实际使用的情况来看,如果不添加 ip_conntrack_ftp 和 ip_nat_ftp 模块,即不使用 PASV 模式时,速度比较慢,而且有时候会挂起、断掉。这可能也和 Windows 的客户端的有关,比如 cuteftp,运行时有如下的记录:
COMMAND:> [2007-1-31 10:55:18] PORT 192,168,0,64,11,208
[2007-1-31 10:55:18] 200 PORT command successful. Consider using PASV.

没有评论: