我无法通过 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
答案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`