基于Centos7、vsftpd3.0.2
0、前导:
- ftp通信中存在两种连接:
- 控制连接:用于传递控制命令及其他小数据量通信。
- 数据连接:用于传输文件数据流。
- 根据数据连接的建立方式分为主动模式(active mode)和被动模式(passive mode),主动和被动都是以ftp服务端为中心来说的。
- 主动模式:顾名思义,主动模式就是ftp-erver主动发起通向ftp-client的
数据连接
。 - 被动模式:同理,被动模式就是ftp-erver不发起连接,而是被动接受ftp-client发起的
数据连接
。
- 主动模式:顾名思义,主动模式就是ftp-erver主动发起通向ftp-client的
- ftp仍然属于tcp连接,故需三次握手。
一、主动模式:
vim /etc/vsftpd/vsftpd.conf
pasv_enable=NO #1.关闭passive模式
port_enable=YES #2.启用active模式
connect_from_port_20=YES #3.允许从20端口连接,主动模式使用20端口进行数据传输
pasv_min_port=3000 #active模式下属无效配置
pasv_max_port=4000 #active模式下属无效配置
systemctl restart vsftpd #重启ftp服务
ftp -A 192.168.50.87 #以active模式连接ftp-server,一定要加参数【-A】
连接过程:
- client用大于1024的任意端口(如1025)连接server的21端口,建立控制连接(controll-connection),用于控制通信。
- client另起一个大于1024的端口(如1026),并通过控制连接将此端口告诉server,server使用其20端口
主动
与此端口建立数据连接(data-connection)。
二、被动模式:
vim /etc/vsftpd/vsftpd.conf
pasv_enable=YES #1.开启被动模式,如果不配置pasv_enable=NO,默认是passive模式
#默认值为0,表示取任意(1024 – 65535端口),把端口范围设在比较高的一段范围内,比如3000-4000
pasv_min_port=3000 #2.指定数据连接端口下界
pasv_max_port=4000 #3.指定数据连接端口上界
systemctl restart vsftpd #重启ftp服务
ftp -p 192.168.50.87 #以passive模式连接ftp-server,【-p】为可选参数
连接过程:
-
client用大于1024的任意端口(如1025)连接server的21端口,建立控制连接(controll-connection),用于控制通信。
-
client告诉server要发起数据通信,此时server就从指定的端口范围内选择一个端口(如3001),并对其监听,而后将此端口告诉client。client另起一个大于1024的端口(如1026),主动去连接server的3001端口,server被动接受并建立数据连接。
三、区别:
- 若ftp服务器只在局域网内使用,任选一种模式都没问题。
- 若ftp要通过互联网提供服务,由于边界路由器、NAT、防火墙等机制的存在,主动模式下server会误认为边界路由器就是client,所以会试图用自己的20端口去和边界路由器的1026端口建立数据连接,而不能抵达真实client,造成能连上server但是却不能上传、下载、新建目录的问题。
- 若使用被动模式则不存在这样的问题,因为数据连接由client主动发起,能准确连接上server监听的数据端口。