为什么我在 iptables 中将端口 20 添加到“接受”后,它仍然被阻止

为什么我在 iptables 中将端口 20 添加到“接受”后,它仍然被阻止

我正在尝试打开服务器上的 FTP 端口。我已经在服务器上安装了 vsftpd。但是我无法通过端口 20 和 21 访问服务器

不知何故,它现在允许我访问端口 21。

我正在运行 Ubuntu 9.10 (Karmic) 我还运行了:modprobe ip_conntrack modprobe ip_conntrack_ftp

以下是我的服务器上的 iptables -L

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:www
ACCEPT     tcp  --  anywhere             poseidon.valltek.com tcp dpts:ftp-data:ftp

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     tcp  --  poseidon.valltek.com  anywhere            tcp dpts:ftp-data:ftp

我一直在使用 www.ping.eu/port-chk/ 检查端口。以防万一是我的本地机器出了问题。

谢谢。

答案1

您可能希望将其添加ip_nat_ftp到列表中,并确保使用命令加载所有内容lsmod

这是来自某些互联网提供商的家庭服务器吗?如果是这样,您可能遇到了一个常见问题,即互联网提供商通常会阻止其住宅用户的 1 到 1024 的端口,因此他们不会创建家庭服务器(据我所知,这种方法在几个国家/地区都有使用)。

如果不是这种情况,请确保您也设置了 ip_forward。

sudo echo "1" > /proc/sys/net/ipv4/ip_foward

防火墙(iptables)

# Allow FTP connections @ port 21
iptables -A INPUT  -p tcp --sport 21 -m state --state ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT

# Allow Active FTP Connections
iptables -A INPUT -p tcp --sport 20 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --dport 20 -m state --state ESTABLISHED -j ACCEPT 

# Allow Passive FTP Connections
iptables -A INPUT -p tcp --sport 1024: --dport 1024:  -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 1024: --dport 1024:  -m state --state ESTABLISHED -j ACCEPT 

您说Somehow it is allowing me to access port 21 at the moment.,您可以下载或上传任何东西吗?如果可以,那么应该如下所示:

主动 FTP

在主动模式 FTP 中,客户端从随机的非特权端口 (N > 1023) 连接到 FTP 服务器的命令端口,即端口 21。然后,客户端开始监听端口 N+1,并将 FTP 命令 PORT N+1 发送到 FTP 服务器。然后,服务器将从其本地数据端口(即端口 20)连接回客户端指定的数据端口。

从服务器端防火墙的角度来看,为了支持主动模式 FTP,需要打开以下通信通道:

* FTP server's port 21 from anywhere (Client initiates connection)
* FTP server's port 21 to ports > 1023 (Server responds to client's control port)
* FTP server's port 20 to ports > 1023 (Server initiates data connection to client's data port)
* FTP server's port 20 from ports > 1023 (Client sends ACKs to server's data port)

被动 FTP

为了解决服务器发起与客户端连接的问题,开发了一种不同的 FTP 连接方法。这种方法被称为被动模式,简称 PASV,它源于客户端用来告知服务器其处于被动模式的命令。

在被动模式 FTP 中,客户端会发起与服务器的两个连接,从而解决了防火墙过滤从服务器到客户端的传入数据端口连接的问题。打开 FTP 连接时,客户端会在本地打开两个随机的非特权端口(N > 1023 和 N+1)。第一个端口通过端口 21 与服务器联系,但客户端不会发出 PORT 命令并允许服务器重新连接到其数据端口,而是会发出 PASV 命令。结果是服务器随后会打开一个随机的非特权端口(P > 1023)并将 PORT P 命令发送回客户端。然后,客户端会发起从端口 N+1 到服务器上的端口 P 的连接以传输数据。

从服务器端防火墙的角度来看,为了支持被动模式 FTP,需要打开以下通信通道:

* FTP server's port 21 from anywhere (Client initiates connection)
* FTP server's port 21 to ports > 1023 (Server responds to client's control port)
* FTP server's ports > 1023 from anywhere (Client initiates data connection to random port specified by server)
* FTP server's ports > 1023 to remote ports > 1023 (Server sends ACKs (and data) to client's data port)

相关内容