无法通过主动 FTP 连接到 CentoOS 服务器

无法通过主动 FTP 连接到 CentoOS 服务器

我无法通过 Active FTP 连接到我的 CentOS 服务器。

我已经安装并启动了 vsftpd。我已经加载了 ftp 连接跟踪模块 ( /sbin/modprobe ip_conntrack_ftp)。

以下是 /etc/sysconfig/iptables 的输出:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/255.0.0.0 -i ! lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 44444 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -p tcp -m tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --sport 20 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT
COMMIT

[编辑]

事实证明我的 iptable 配置不好。以下是正确的版本:

*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/255.0.0.0 -i ! lo -j REJECT --reject-with icmp-port-unreachable
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 44444 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -j ACCEPT
-A OUTPUT -p tcp -m tcp --dport 21 -m state --state ESTABLISHED,RELATED -j ACCEPT

答案1

每当您尝试连接时,您是在同一个网络上还是尝试通过 NAT 进行连接?在任何一端都是如此,因为如果至少有一端通过 NAT,您将无法进行主动连接,只有 PASV 可以工作。

答案2

您需要通过编辑 /etc/sysconfig/iptables-config 并修改以下行来加载 conntrack 模块:

   IPTABLES_MODULES="ip_nat_ftp"

如果您不这样做,那么在下次重新启动后,由于 FTP 客户端中的某些“被动”设置,您的 FTP 连接将突然停止工作。

就您的问题而言,正如您注意到的,这是一个防火墙规则问题,我发现通过从客户端 telnet 到端口 21 上的服务器进行测试很有用,例如:

   guin:Documents$ telnet ftp.tummy.com 21
   Trying 198.49.126.195...
   Connected to ftp.tummy.com.
   Escape character is '^]'.
   220 tummy.com, ltd. FTP server
   quit
   221 Goodbye.
   Connection closed by foreign host.
   zsh: exit 1     telnet ftp.tummy.com 21
   guin:Documents$ 

在这种情况下,它可以正常工作。如果它只是停留在“尝试”状态,那么这是因为防火墙规则。

答案3

具体的错误信息是什么?

我经常忘记配置文件中的以下设置。确保检查它们

userlist_file
userlist_enable
userlist_deny

还,主机允许主机拒绝可能是罪魁祸首。

答案4

按照Ophidian的建议:

事实证明我的 iptable 规则不正确。这就是我需要的

-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT -A OUTPUT -p tcp -m tcp --dport 21 -m state --state`enter code here`

相关内容