Administrator
Published on 2024-04-02 / 48 Visits
0
0

FTP的主动模式和被动模式

主动模式(Active Mode)

概念

  • 主动模式下,FTP客户端发送一个PORT命令(主动模式命令)到服务器,告诉服务器客户端用于接收数据的端口号。然后服务器将从它的数据端口(通常是20端口)主动连接到客户端指定的端口来传输数据。
  • 主动指的是服务端主动连接客户端的端口来传输数据。

步骤

  1. 客户端使用N端口(一般大于1024)连接到FTP服务器的Y端口(一般为21),发送用户名和密码登录,登录成功,读取列表。
  2. 客户端向服务器的21端口发送控制命令,告诉服务器,客户端采用主动模式并要监听的数据端口。(一般为Y端口+1)
  3. 服务器从X端口(一般是20端口,Y端口-1)连接客户端指定的端口,并进行数据传输(下载/上传)。
  4. 数据传输完成,连接关闭。

防火墙

由于服务器需要主动连接到客户端,如果客户端位于防火墙或NAT(网络地址转换)设备后面,可能会遇到连接问题,客户端处于受限制的网络环境中,被动模式可能是更好的选择。
大多数FTP客户端都在局域网中,没有独立的公网IP地址,且有防火墙阻拦,主动模式下FTP服务器成功连接到客户端比较困难。

在客户端没有固定外网IP地址的情况下,尤其是当客户端位于NAT(网络地址转换)/路由器后面时,主动模式通常会遇到问题。这是因为主动模式要求服务器能够直接连接到客户端开放的数据端口,但由于NAT的存在,客户端的内部IP地址是不可见的,外网无法直接访问。

NAT设备通常会将内部网络的私有IP地址映射到外网的一个或几个公共IP地址上,并且只允许出站连接(即从内部网络到外网的连接)。当服务器尝试从其数据端口(通常是端口20)主动连接到客户端时,这个连接请求很可能被NAT设备阻止,因为它不匹配任何预先建立的出站连接。

被动模式(Passive Mode)

概念

  • 在被动模式下,FTP客户端发送一个PASV命令到服务器,请求服务器进入被动模式。服务器收到这个命令后,会打开一个随机的端口,并通知客户端这个端口号。然后客户端会主动从这个新打开的端口连接到服务器来传输数据。
  • 被动指的是客户端连接服务端的端口来传输数据,服务器被动接受连接。

步骤

  1. 客户端使用N端口(一般大于1024)连接到FTP服务器的Y端口(一般为21),发送用户名和密码登录,登录成功,读取列表。
  2. 客户端向服务器的21端口发送控制命令,告诉服务器,客户端采用被动模式。
  3. 服务器打开一个随机端口(一般大于1024,该端口由ftp服务端设置范围),并告诉客户端这个端口号。
  4. 客户端从从X端口(一般为Y端口+1)主动连接到服务器打开的随机端口,并传输数据(上传/下载)。
  5. 数据传输完成,连接关闭。

防火墙

由于客户端要连接到服务端的随机端口,所以服务器需要开放随机端口(X-X),不然会出现客户端能登录成功,但是无法获取列表和读取数据。

比较

  1. 无论是主动模式,还是被动模式,客户端都需要先连接到服务端的某个端口,通过该端口发送指令,告知服务端,要是使用主动模式,还是被动模式。然后再决定是客户端开启端口接收数据,还是服务器开启端口,让客户端连接该端口,通过该端口传输数据。
  2. 无论是FTP的主动模式还是被动模式,都是使用TCP(传输控制协议)来建立连接和传输数据的。

认证模式

  • 匿名用户模式:任何人无需密码验证就可以直接登录到FTP服务器。这种模式最不安全,一般只用来保存不重要的公开文件,不推荐在生产环境中使用。
  • 本地用户模式:通过Linux系统本地账号进行验证的模式,相较于匿名用户模式更安全。
  • 虚拟用户模式:FTP服务器的专有用户。虚拟用户只能访问Linux系统为其提供的FTP服务,而不能访问Linux系统的其他资源,进一步增强了FTP服务器的安全性。

搭建ftp服务端

centos参考:
https://help.aliyun.com/zh/ecs/use-cases/manually-build-an-ftp-site-on-a-centos-7-instance#a3a93120065zt

修改默认的21监听端口:
vi /etc/vsftpd/vsftpd.conf
增加:listen_port=2121

注意:要有删除修改权限,必须是文件属于登录的账号,且文件的父级目录也得属于登录的账号,可以用类似命令修改:chown ftptest:ftptest Test/

开启并查看日志:
vi /etc/vsftpd/vsftpd.conf
传输日志:
xferlog_enable=YES
xferlog_file=/var/log/vsftpd.log
登录下载等日志:
dual_log_enable=YES
vsftpd_log_file=/var/log/vsftpd.log

Windows的ftp相关操作

IIS ftp服务端

支持主动和被动,如果要被动模式,则启用“FTP防火墙支持”代表为被动模式。
如果没特意设置被动模式,默认为主动模式,在主动模式下,一般的云服务器在内部127.0.0.1能正常下载上传文件,在外网则不行,所以需要启用“FTP防火墙支持”和在安全组放行对应21端口和被动模式下的端口范围。

CMD ftp客户端

使用cmd执行ftp,请注意是否主动模式能不通信上,因为cmd的ftp不支持被动模式。
可以使用linux下的ftp命令,模式是被动。

资源管理器 ftp客户端

先进行主动模式测试,后不行再进行被动模式。所以会打开会打开两个窗口有时候。

使用FileZilla Server和FileZilla Client

FileZilla是windows免费常用的服务端和客户端软件,本项进行一些使用说明。

FileZilla Server

安装说明

1721891844006.png
1721892373587.png

使用说明

安装后有三个应用:

  1. Start FileZilla Server (开启ftp服务)
  2. Stop FileZilla Server(关闭启ftp服务)
  3. Administer FileZilla Server(启动管理配置面板)

其中管理配置面板不像常规的软件直接管理,他这个需要进行登录,登录的信息就是安装的时候的信息,这个好处就是可以在其他电脑对本机ftp服务器进行管理。

配置说明

下面改动不需要重启服务。

ftp端口配置

1721893569573.png

增加ftp用户,访问路径,权限

1721892640612.png
1721893059561.png

调整被动模式端口和外网IP

1721897999519.png

注意外网IP一定要填写,不然有些客户端,比如windows资源管理器,就会报错:

FileZilla Client

下载说明

如果需要连接上,且能读取文件,但是下载时,提示Permission denied,这个不是服务端的问题,而是本地电脑无法将待下载的文件进行保存的问题。
1721890821279.png

进行主动模式和被动模式的选择

1721890909072.png


Comment