您的位置:首页 > 编程语言 > PHP开发

配置FTP服务器——passive mode

2016-05-01 14:42 585 查看

配置FTP服务器的一个问题

1. 环境

服务器:debian6.0 vsftpd,客户端:Ubuntu10.04,系统自带的ftp客户端


2. 问题

在客户端登录时,输入ls,提示“500 Illegal port command ftp: bind: Address already in use”报错

3. 解决方法

修改服务器配置
vim /etc/vsftpd.conf


pasv_enable=YES
pasv_max_port=10010
pasv_min_port=10090


还需要给防火墙设置一个INPUT fileter,让它允许接收从pasv_min_port到pasv_max_port的包:


sudo iptables -t filter -A INPUT -p tcp --dport 10090:10100 -j ACCEPT


2.客户端使用ftp的passive模式,ftp -p server_ip

4. 原因分析

a. ftp的基本原理

ftp是完全基于TCP的,使用两个端口,数据端口和控制端口,一般21是控制端口,20是数据端口。如果是被动模式,数据端口就不是20了。

b. ftp的主动模式

连接建立过程:client从端口N(N>1023)向server的21端口发起连接请求,并发送命令PORT N+1给server, 同时开始监听 N + 1 端口。server收到PORT命令后,从端口20向client端口N + 1 发起连接请求。



step1: client发送PORT 1027;step2:server回复ACK;step3:server主动发起连接; step4: client回复ACK。

上述过程会在客户端这边出现问题,当server主动连接client的1027端口时,在client的防火墙看来,这是外界主动向自己发起连接,这通常会被拦截。

c. ftp的被动模式

为了解决server主动向client发起连接的问题,提出了被动模式。在被动模式中,控制连接和数据连接都是由ftp客户端发起的,因此客户端的防火墙就不会把数据连接拦截。

连接建立过程:

建立连接时,client从端口N连接server的端口21,把PASV命令发送给server,server收到PASV命令后,打开一个端口X,然后给client发送命令PORT X。然后client从端口N+1向sever的端口X发起连接请求。



在step1, client发PASV命令,在step2,server回复PORT 2024, step3, client主动发起连接, step4, server回复ACK。

5. 参考文献

Active FTP vs. Passive FTP, a Definitive Explanation
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  vsftpd passive