我目前的情况涉及到允许各种规则,但我需要从任何地方访问的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
你没有任何东西:你的文章中的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中,以便在重新启动后生效