我运行pure-ftpd支持TLS,一切正常,直到启用iptables。 随着工作iptables我可以连接到FTP,但无法获得文件列表。
ip_conntrack_ftp模块已启用,这是我为ftps设置的规则:
*filter :INPUT ACCEPT [0:0] :FORWARD ACCEPT [0:0] :OUTPUT ACCEPT [0:0] :RH-Firewall-1-INPUT - [0:0] -A INPUT -j RH-Firewall-1-INPUT -A FORWARD -j RH-Firewall-1-INPUT -A RH-Firewall-1-INPUT -i lo -j ACCEPT -A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 20 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 989 -j ACCEPT -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 990 -j ACCEPT
处于被动模式的FTP涉及客户端通过端口21上的控制连接中指定的端口号与服务器build立第二个数据连接。conntrack模块嗅探控制连接并检测数据连接的端口号,然后将传入数据连接为RELATED,这通常会被这个规则所接受:
-A RH-Firewall-1-INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
但是,当控制连接被encryption时,conntrack模块不能检测到端口号,因此连接不被接受。 解决scheme是configuration您的FTP服务器的一系列端口以被动模式使用( PassivePortRange作为@ cyberx86提到),并configuration防火墙接受所有到该范围的传入连接,例如:
iptables --append INPUT --protocol tcp --dport 10000:10100 --jump ACCEPT