linux - iptables 的 FTP 问题

标签 linux ftp iptables centos7

启用 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,并且您已允许 ESTABLISHEDRELATED 连接数据包进入您的计算机,因此您的规则集应该已经支持被动模式 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 加载模块可能就足够了,因为允许传入 RELATEDESTABLISHED 流量。这种方法更可取,因为它更安全。

关于linux - iptables 的 FTP 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27866966/

相关文章:

java - 无法使用 Java 程序从控制台中提取字符串

c++ - 如何检查文件是否仍在写入?

c++ - 在特定情况下不发送 UDP 广播

Emacs FTP 不适用于 Ubuntu 中的某些站点

mysql - UFW 3306 端口转发在 RaspberryPi 2 上不起作用

firewall - iptables 阻止对端口 8000 的访问(IP 地址除外)

c++ - FFTW 的功率谱不起作用,但在 MATLAB 中它可以

c++ - InternetConnect 无法通过 ftp 代理连接到 FTP 服务器

php - 从文件夹加载所有 .php 文件

Linux 狂欢 : Setting iptables rules to allow both active and passive FTP