一、 ftp简介
1. 两种模式介绍
在FTP(文件传输协议)中,通常根据数据传输的方向来区分主动模式(Active Mode)和被动模式(Passive Mode):
具体来说:
- 当服务器在被动模式下等待客户端上传数据时,服务器是接收数据的一方。- 当客户端在主动模式下上传数据到服务器时,客户端是发送数据的一方。
所以,如果您的服务器只接收数据,它很可能是配置为被动模式,因为它会等待客户端的连接并接收上传的数据。相反,如果服务器需要发送数据到客户端,它可能会使用主动模式,尽管这在实际应用中较为少见,因为客户端通常更倾向于使用被动模式来避免防火墙问题。
1.1 主动模式
- **主动模式(Active Mode)**:在这种模式下,FTP客户端会告诉服务器它自己的一个端口用于数据传输,然后服务器会主动连接到客户端的这个端口来发送数据。因此,主动模式通常用于发送数据的一方,即服务器主动连接到客户端并发送数据。
主动模式的安装与被动模式相同,因为vsftpd同时支持这两种模式。在配置上,您不需要特别指定使用主动模式,因为这是FTP客户端的配置,而不是服务器。客户端会告诉服务器它想要使用哪个端口,然后服务器会连接到该端口。
1.1 被动模式
- **被动模式(Passive Mode)**:在这种模式下,FTP服务器开启一个非特权端口用于监听数据连接,客户端会主动连接到服务器上的这个端口。因此,被动模式通常用于接收数据的一方,即服务器等待并接收客户端发送的数据。
被动模式的安装与主动模式相同。在配置文件中,您需要设置`pasv_enable=YES`来启用被动模式,并指定`pasv_min_port`和`pasv_max_port`来定义被动模式下的端口号范围。
在大多数情况下,被动模式更为常用,特别是当客户端或服务器位于防火墙后面时,因为被动模式允许服务器打开一个端口并等待客户端连接,这通常更容易通过防火墙。
总的来说,无论您使用主动模式还是被动模式,安装和配置的步骤相似,主要的区别在于客户端如何发起数据连接以及服务器如何响应这些连接。
2. 安装注意事项
2.1 服务器用于接收数据
如果您的服务器只接收数据,这通常意味着您希望其他服务器将数据上传到您的服务器上。
在这种情况下,您使用的模式取决于对方服务器的配置。对方服务器可以使用主动模式或被动模式来连接到您的服务器并上传数据。
如果您希望服务器只接受数据(通常使用被动模式),以下是一些基本的配置选项:
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES
pasv_enable=YES
pasv_min_port=10000
pasv_max_port=10100
这些设置将禁用匿名登录,允许本地用户登录并写入文件,将本地用户限制在其主目录中,并设置被动模式的端口号范围。
开放端口
为了开放FTP端口,您需要更新防火墙规则。以下是如何为被动模式开放端口的步骤:
sudo ufw allow 21/tcp
sudo ufw allow 10000:10100/tcp
2.1 服务器用于发送数据
在FTP的主动模式下,您需要开放的端口主要是20端口,这是FTP协议为数据传输指定的标准端口。以下是具体说明:
### 主动模式下的端口使用
- **21端口**:这是FTP控制连接使用的端口,用于客户端和服务器之间的命令和应答交互。无论是主动模式还是被动模式,这个端口都必须开放。
- **20端口**:在主动模式下,这是服务器用来发送文件到客户端的端口。当客户端发起文件传输请求时,它会告诉服务器自己的一个端口(通常是20端口),然后服务器会通过这个20端口连接到客户端,并开始传输数据。
### 防火墙配置
为了在主动模式下允许FTP数据传输,您需要在服务器的防火墙上至少开放以下端口:
- **21端口**:开放TCP端口21,允许FTP控制信息的传输。- **20端口**:开放TCP端口20,允许服务器在主动模式下发送文件到客户端。
以下是开放这些端口的示例命令,假设您使用的是`ufw`防火墙工具:
sudo ufw allow 21/tcp # 允许FTP控制连接
sudo ufw allow 20/tcp # 允许FTP主动模式数据传输
如果您使用的是`firewalld`,命令会有所不同:
sudo firewall-cmd --permanent --zone=public --add-port=21/tcp
sudo firewall-cmd --permanent --zone=public --add-port=20/tcp
sudo firewall-cmd --reload
### 注意事项
- 在主动模式下,客户端需要允许来自服务器的入站连接到其指定的端口(通常是20端口)。
- 如果客户端位于具有严格防火墙规则的环境中,主动模式可能会遇到连接问题,因为客户端需要接受来自服务器的连接。
- 在大多数情况下,被动模式是首选,因为它允许客户端初始化所有连接,这对于客户端位于防火墙或NAT后面时更为有效。
确保防火墙规则正确配置后,您的服务器就应该能够在主动模式下接收和发送文件了。
2.1 服务器既接收数据又发送数据
如果您的服务器既要接收文件也要发送文件,您需要确保FTP服务器配置能够支持这两种操作,并且相应的端口在防火墙上开放。以下是针对这种情况的建议:
### 接收文件(被动模式)
对于接收文件,通常使用被动模式,因为这种模式允许服务器在指定的非特权端口范围内监听数据连接。这意味着您需要:
- 开放21端口:用于FTP命令的通信。- 开放一个非特权端口范围(例如10000-10100):用于被动模式下数据传输。
### 发送文件
对于发送文件,您可以选择以下两种模式:
1. **被动模式**:如果客户端和服务器都使用被动模式,那么客户端会连接到服务器指定的端口来接收数据。
2. **主动模式**:如果客户端使用主动模式,那么服务器需要连接到客户端指定的端口来发送数据。这意味着您可能还需要:
- 开放20端口:这是FTP在主动模式下用于数据传输的标准端口。
### 防火墙配置
以下是您可能需要执行的防火墙配置步骤:
#### 对于ufw(Uncomplicated Firewall):
sudo ufw allow 21/tcp # 允许FTP命令端口
sudo ufw allow 10000:10100/tcp # 允许被动模式数据端口
sudo ufw allow 20/tcp # 如果需要支持主动模式数据传输
#### 对于firewalld:
sudo firewall-cmd --permanent --zone=public --add-port=21/tcp
sudo firewall-cmd --permanent --zone=public --add-port=10000-10100/tcp
sudo firewall-cmd --permanent --zone=public --add-port=20/tcp # 如果需要支持主动模式
sudo firewall-cmd --reload
### FTP服务器配置
确保您的FTP服务器配置正确,以下是针对vsftpd的配置示例:
# 开启被动模式
pasv_enable=YES
# 设置被动模式端口范围
pasv_min_port=10000
pasv_max_port=10100
# 如果需要支持主动模式,无需特别配置,因为vsftpd默认支持
### 注意事项
- 确保客户端和服务器端都能支持您选择的FTP模式。
- 如果您决定使用主动模式,确保客户端开放用于数据传输的端口(通常是20端口)。
- 如果您仅使用被动模式,则客户端无需开放20端口。
通过正确配置服务器和开放必要的端口,您的服务器就可以既接收文件也发送文件,而不会遇到防火墙或FTP模式配置导致的问题。