允许使用IPTables的FTP

我目前的情况涉及到允许各种规则,但我需要从任何地方访问的FTP。 操作系统是分5,我正在使用VSFTPD。 我似乎无法得到正确的语法。 所有其他规则正常工作。

## Filter all previous rules *filter ## Loopback address -A INPUT -i lo -j ACCEPT ## Established inbound rule -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT ## Management ports -A INPUT -s xxxx/24 -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -s xxxx/23 -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -s xxxx/24 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -s xxxx/23 -p icmp -m icmp --icmp-type any -j ACCEPT -A INPUT -s xxxx/23 -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT -A INPUT -i lo -j ACCEPT ## Allow NRPE port (Nagios) -A INPUT -s xxxx -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT -A INPUT -s xxxx -p tcp -m state --state NEW -m tcp --dport 5666 -j ACCEPT ##Allow FTP ## Default rules :INPUT DROP [0:0] :FORWARD DROP :OUTPUT ACCEPT [0:0] COMMIT 

以下是我试过的规则。

 ##Allow FTP -A INPUT --dport 21 any -j ACCEPT -A INPUT --dport 20 any -j ACCEPT -A INPUT -p tcp --dport 21 -j ACCEPT -A INPUT -p tcp --dport 20 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT -A INPUT -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 20 -j ACCEPT -A INPUT -p tcp -s 0/0 -d 0/0 --destination-port 21 -j ACCEPT -A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT -A INPUT -s 0.0.0.0/0 -p tcp -m state --state NEW -m tcp --dport 20 -j ACCEPT 

这里是我引用人的文档,以便他们可以遵循FTP协议: http : //slacksite.com/other/ftp.html

  • 要进行主动模式FTP,您需要允许传入连接到TCP端口21和从端口20传出连接。
  • 要执行被动模式的FTP,您需要允许传入连接到TCP端口21和传入连接到服务器计算机上的随机生成的端口(需要使用netfilter中的conntrack模块)

你没有任何东西:你的文章中的OUTPUT链,所以我也会在这里join。 如果你的OUTPUT链是默认的,那么这个问题很重要。

将这些规则添加到您的iptablesconfiguration中:

 iptables -A INPUT -p tcp --dport 21 -j ACCEPT iptables -A OUTPUT -p tcp --sport 20 -j ACCEPT 

要支持被动模式FTP,则需要在启动时加载ip_conntrack_ftp模块。 取消注释并修改/ etc / sysconfig / iptables-config文件中的IPTABLES_MODULES行以读取:

 IPTABLES_MODULES="ip_conntrack_ftp" 

保存iptablesconfiguration并重启iptables。

 service iptables save service iptables restart 

要彻底排除VSFTPD是一个问题,请停止VSFTPD,validation它是否正在使用“netstat -a”侦听端口21,然后运行:

 nc -l 21 

这将启动netcat侦听端口21,并将input回显到你的shell。 从另一台主机TELNET连接到服务器的21端口,并validation您是否获得了TCP连接,并在您inputTELNET连接时在shell中看到输出。

最后,将VSFTPD备份,确认它正在侦听端口21,并尝试再次连接。 如果连接到netcat工作,那么你的iptables规则是好的。 如果在netcat之后连接到VSFTPD不起作用,那么在你的VSFTPDconfiguration中是有问题的。

试试这个规则。 注意: $EXTIP是FTP服务器的外部IP地址。

 -A INPUT -i $EXTIP -m state --state NEW,ESTABLISHED,RELATED -p TCP -s 0.0.0.0 -d $EXTIP --dport 21 -j ACCEPT 

在我的情况下,我错过了ip_conntrack_ftp内核模块。 它需要被加载。 所以你可以试试这个:

 modprobe ip_conntrack_ftp 

并且将ip_conntrack_ftp添加到/ etc / modules中,以便在重新启动后生效