iptables 配置 FTP 端口

FTP 服务器的工作机制

FTP (File Transfer Protocol) 是文件传输协议的简称。FTP 服务只通过 TCP 连接,没有用于 FTP 的 UDP 组件。FTP 不同于其他服务的是它使用了两个端口,一个数据传输端口和一个命令传输端口 (或称为控制端口)。通常21端口是命令端口,20端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20了。

FTP 主动模式

主动/Port模式:

1
2
ftp server:tcp 21 <---- client:dynamic    
ftp server:tcp 20 ----> client:dynamic

连接过程: 客户端向服务器的 FTP 端口 (默认是21) 发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器: "我打开了 XXXX 端口,你过来连接我"。于是服务器从 20 端口向客户端的 XXXX 端口发送连接请求,建立一条 数据链路来传送数据。

FTP 被动模式

被动/Pasv模式:

1
2
ftp server:tcp 21 <---- client:dynamic
ftp server:tcp dynamic <---- client:dynamic

连接过程: 客户端向服务器的 FTP 端口 (默认是21) 发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端: "我打开了 XXXX 端口,你过来连接我"。于是客户端向服务器的 XXXX 端口发送连接请求,建立一条数据链路来传送数据。

防火墙配置方案

FTP 主动模式

防火墙规则/etc/sysconfig/iptables:

1
2
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 20,21 -j ACCEPT

即允许命令端口和数据端口通过防火墙即可。

FTP 被动模式

被动模式下首先需要限制服务器开启的数据端口的范围,vsftpd 配置文件/etc/vsftpd/vsftpd.conf增加:

1
2
pasv_min_port=20002
pasv_max_port=20005

接下来允许命令端口和以上数据端口通过防火墙即可,防火墙规则:

1
2
3
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 21 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp -m multiport --dports 20002:20005 -j ACCEPT

Writing Enriches Life.