FTP 服务器的工作机制
FTP (File Transfer Protocol) 是文件传输协议的简称。FTP 服务只通过 TCP 连接,没有用于 FTP 的 UDP 组件。FTP 不同于其他服务的是它使用了两个端口,一个数据传输端口和一个命令传输端口 (或称为控制端口)。通常21
端口是命令端口,20
端口是数据端口。当混入主动/被动模式的概念时,数据端口就有可能不是20
了。
FTP 主动模式
主动/Port模式:
1 |
ftp server:tcp 21 <---- client:dynamic |
连接过程: 客户端向服务器的 FTP 端口 (默认是21) 发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT
命令告诉服务器: "我打开了 XXXX 端口,你过来连接我"。于是服务器从 20 端口向客户端的 XXXX 端口发送连接请求,建立一条 数据链路来传送数据。
FTP 被动模式
被动/Pasv模式:
1 |
ftp server:tcp 21 <---- client:dynamic |
连接过程: 客户端向服务器的 FTP 端口 (默认是21) 发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV
命令告诉客户端: "我打开了 XXXX 端口,你过来连接我"。于是客户端向服务器的 XXXX 端口发送连接请求,建立一条数据链路来传送数据。
防火墙配置方案
FTP 主动模式
防火墙规则/etc/sysconfig/iptables
:
1 |
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT |
即允许命令端口和数据端口通过防火墙即可。
FTP 被动模式
被动模式下首先需要限制服务器开启的数据端口的范围,vsftpd 配置文件/etc/vsftpd/vsftpd.conf
增加:
1 |
pasv_min_port=20002 |
接下来允许命令端口和以上数据端口通过防火墙即可,防火墙规则:
1 |
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT |
Writing Enriches Life.