我一直在做无数的search,每次都学到了一点,但还没有find解决我的问题。
我有vsftpd安装,使用SSL / TLS我得到它的工作,因为我需要,但无法应用下面的iptable规则。 主要是PASV模式不起作用。 随着iptables -F一切按预期工作。 只要我应用下面的规则连接,但客户端(CuteFTP)尝试进入PASV模式超时。
我的ip表规则如下:
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT # ssh -A INPUT -p tcp -m tcp --dport 22 -j ACCEPT # web -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT # ssl #-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT # subversion -A INPUT -p tcp -m tcp --dport 3690 -j ACCEPT # ftp + active ftp + pasv ftp -A INPUT -p tcp --dport 21 -m state --state ESTABLISHED,NEW -j ACCEPT -A INPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT -A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED -j ACCEPT # mysql -A INPUT -p tcp -m tcp --dport 3306 -s 67.181.185.126 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -s 98.224.120.34 -j ACCEPT -A INPUT -p tcp -m tcp --dport 3306 -s 174.143.169.230 -j ACCEPT # ping -A INPUT -p icmp -j ACCEPT -A INPUT -i lo -j ACCEPT -A INPUT -j DROP -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT -A OUTPUT -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT COMMIT
我使用(用于testing目的)加载它们:
iptables-restore < /etc/iptables.test.rules
为了参考我运行Ubuntu 10.04 LTS另外这里有一些输出,我得到了以下命令:
lsmod
Module Size Used by xt_conntrack 2303 1 xt_helper 1155 0 nf_nat_ftp 1751 0 nf_nat 12653 1 nf_nat_ftp ipv6 220702 16 xt_state 1215 4 nf_conntrack_ftp 5108 1 nf_nat_ftp nf_conntrack_ipv4 9505 7 nf_nat nf_conntrack 43972 7 xt_conntrack,xt_helper,nf_nat_ftp,nf_nat,xt_state,nf_conntrack_ftp,nf_conntrack_ipv4 iptable_filter 2218 1 ip_tables 13794 1 iptable_filter nf_defrag_ipv4 1051 1 nf_conntrack_ipv4 dm_mirror 11338 0 dm_region_hash 6224 1 dm_mirror dm_log 7341 2 dm_mirror,dm_region_hash dm_snapshot 23956 0 dm_mod 50258 3 dm_mirror,dm_log,dm_snapshot
locate _ftp
/lib/modules/2.6.33.5-rscloud/kernel/net/ipv4/netfilter/nf_nat_ftp.ko /lib/modules/2.6.33.5-rscloud/kernel/net/netfilter/ipvs/ip_vs_ftp.ko /lib/modules/2.6.33.5-rscloud/kernel/net/netfilter/nf_conntrack_ftp.ko /lib/security/pam_ftp.so /usr/share/man/man8/pam_ftp.8.gz
另外我的vsftpd.conf被动端口设置如下:
pasv_min_port=50000 pasv_max_port=60000
我也试过用modprobe ip_conntrack_ftp加载模块,但似乎不工作。 通过上面提到,似乎模块甚至不在系统上,或被nf_conntrack_ftp … nf_模块取代…
最终编辑
所以我想我find了我的答案: http : //www.shorewall.net/FTP.html#Conntrack
由于ftp助手模块必须读取和修改通过命令通道发送的命令,因此当命令通道使用TLS / SSL进行encryption时,它们将不起作用。
另外另一个引起混淆的有趣的事实是为什么我有nf_conntrack vs ip_conntrack 。
如果您正在运行内核2.6.19或更低版本,那么模块名称是ip_nat_ftp和ip_conntrack_ftp
testing与uname -r (获取内核版本)
我已经通过禁用TLS / SSL和PASV在RELATED,ESTABLISHED正常工作来testing上述情况。 然而,我想使用TLS / SSL的主要原因是,用户名/密码不会被清晰地发送。
如果你加载内核模块ip_conntrack_ftp这应该有助于解决你的问题。 您可以使用以下命令加载模块
modprobe ip_conntrack_ftp
这一个是不正确的:
-A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED -j ACCEPT
它应该是 :
-A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED,NEW -j ACCEPT
确定通常大于1023的被动端口。
-A INPUT -p tcp --dport 50000:60000 -m state --state RELATED,ESTABLISHED -j ACCEPT
修改被动模式使用的端口范围的这一行。