限制FTP客户端端口?

好的,我使用简单的linux ftp客户端从ftp服务器下载/上传文件。 我有一个iptables防火墙阻止大部分的端口,我必须closures防火墙才能正常工作。 虽然端口21是开放的,但我想这解释了为什么下载工作,而不是上传。 以下命令与防火墙完美配合:

wget ftp://user:[email protected] 

当我实际连接到服务器并尝试将文件“上传”/上传到服务器时,我遇到了一些问题。 这是当时使用的端口的netstat输出示例,但总是不同的。

 netstat -a | grep ServerIP tcp 0 197520 myIP.:59622 ServerIP:ftp-data ESTABLISHED tcp 0 0 myIP.:40341 ServerIP:ftp ESTABLISHED 

myIP范围内的两个端口都被阻塞,我无法猜测我必须打开哪些端口。 Googlesearch也会失败。 其次,如果我在iptables上尝试这样的事情,它会给我一个错误:

 -A INPUT -p tcp --match multiport --dport 40000:40500 -j ACCEPT iptables-restore v1.4.8: too many ports specified 

其次,为什么我需要在configuration文件中阻塞端口之前打开端口?

 -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

可能的原因是您使用活动的FTP。

FTP具有主动和被动模式。


活性:

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

被动:

为了解决服务器发起连接到客户端的问题,开发了一种不同的FTP连接方法。 这被称为被动模式或PASV,在客户端使用命令告诉服务器处于被动模式之后。 在被动模式FTP中,客户端启动到服务器的两个连接,解决防火墙过滤从服务器到客户端的传入数据端口连接的问题。 打开FTP连接时,客户端在本地打开两个随机非特权端口(N> 1023和N + 1)。 第一个端口与端口21上的服务器联系,但不是发出PORT命令,而是允许服务器连接回其数据端口,客户端将发出PASV命令。 这样做的结果是,服务器随后打开一个随机的非特权端口(P> 1023),并将P发送回客户端以响应PASV命令。 客户端然后启动从端口N + 1到服务器端口P的连接以传输数据。

– 主动FTP与被动FTP,一个明确的解释


这意味着你有两个select:

  1. 简单的select:使用被动模式
  2. 硬选项:允许来自任何已经build立连接的主机的来自端口20的传入连接。

我会select选项1

要从Christopher Perrin的答案中完成选项2,您可以使用recent匹配扩展。 它将源IP地址添加到列表中,您可以在随后的规则中检查。 对于这些规则,我认为eth0是您的WAN接口。

 iptables -A FORWARD -o eth0 -p tcp --dport 21 -m state --state ESTABLISHED -m recent --name trustedftp --set iptables -A FORWARD -i eth0 -p tcp --sport 20 -m recent --name trustedftp --seconds 30 --rcheck -j ACCEPT 

我没有testing过,但我认为它应该工作。