启用 iptables 后,我在通过 FTP 连接时遇到问题。我已经尝试了 this topic 中的所有建议和其他一些,但我仍然得到:
Error: Connection timed out
Error: Could not connect to server
当我关闭 iptables 时,连接没有问题,所以我确信这就是导致问题的原因。
这就是我的 iptables 文件的样子:
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 2020 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
# Allow FTP connections @ port 21
-A INPUT -p tcp --sport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp --dport 21 -m state --state ESTABLISHED -j ACCEPT
COMMIT
最佳答案
首先,规则的顺序很重要。由于您在 FTP ACCEPT
规则之前指定了 REJECT
规则,因此 FTP
数据包在达到相关规则并有机会被接受之前就会被该规则拒绝。
其次,the link you've mentioned in your question讨论服务器所需的规则,而不是客户端所需的规则。适用于客户端的规则是相反的。
由于 OUTPUT
链的默认策略是 ACCEPT
,并且您已允许 ESTABLISHED
或 RELATED
连接数据包进入您的计算机,因此您的规则集应该已经支持被动模式 FTP
。
为了支持主动模式 FTP
,您需要允许来自服务器端口 20
的传入 TCP
连接,如下所示:
iptables -A INPUT -p tcp --sport 20 -j ACCEPT
This link简要总结了上述规则的基本原理。
<小时/>由于在主动模式 FTP
中,数据连接的主机和端口可以通过控制连接的主机和端口可靠且轻松地确定,因此我认为加载 nf_conntrack_ftp
模块将证明允许源自端口 20
的服务器传入 TCP
连接的临时规则是多余的。我还没有检查过这一点,但使用 modprobe nf_conntrack_ftp
加载模块可能就足够了,因为允许传入 RELATED
和 ESTABLISHED
流量。这种方法更可取,因为它更安全。
关于linux - iptables 的 FTP 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27866966/