简述
FTP:文件传输协议,File Transfer Protocol,是在互联网中进行文件传输的一种协议,基于C/S模式,客户端通过FTP协议与服务器建立连接,并进行文件的上传、下载和管理。
在Linux系统下,有一款工具实现ftp协议,名为vsftpd,非常安全的FTP守护进程服务
默认端口
控制端口:默认端口号是21。该端口用于控制命令和信息的传输,包括身份验证、目录导航、文件传输命令等。客户端通过该端口与服务器建立控制连接,并在此进行命令交互和控制操作。
数据端口:默认端口号是20。数据端口在文件传输时被使用,用于实际的数据传输。当客户端需要下载或上传文件时,数据连接会在控制连接的基础上建立起来,进行文件的实际传输。
安全FTP
需要注意的是,FTP协议是基于TCP协议的,而TCP协议是一种面向连接的协议,它通过在通信双方之间建立可靠的连接来传递数据。在FTP通信中,客户端和服务器之间通过控制连接建立通信,然后在需要的时候在数据连接上进行文件传输。为了提高安全性,常常使用FTP over SSL/TLS(FTPS)或SSH File Transfer Protocol(SFTP)这两种安全的FTP协议替代传统的FTP协议。在这些安全协议中,控制和数据的传输都会使用加密通道,对数据进行加密保护,从而提供更高的数据安全性。
工作模式
支持两种工作模式:主动模式和被动模式。
主动模式:FTP服务器主动向客户端发起连接请求
被动模式:FTP服务器在等待客户端发来请求
主动模式
在主动模式(Active Mode)下,客户端首先建立一个控制连接(TCP连接)到服务器的默认端口(通常是端口21)。客户端发送一个PORT命令,指示服务器在哪个端口上连接数据通道。然后服务器从其数据端口(端口20)连接到客户端指定的数据端口,进行数据传输。
主动模式工作原理
- 客户端向服务器发送一个PORT命令,命令中包含客户端的IP地址和一个数据端口号。
- 服务器从它的数据端口(端口20)主动连接到客户端指定的数据端口。
- 数据传输过程中,服务器会从数据端口发送数据,客户端通过控制连接发送命令。
- 主动模式的优点是服务器可以主动连接到客户端,适用于客户端处于防火墙或NAT(网络地址转换)后面的情况。
主动模式局限性
客户端必须具有公共可访问的IP地址。如果客户端位于防火墙或NAT后面,需要配置防火墙或NAT以允许服务器连接到客户端。当服务器位于防火墙后面时,可能需要配置防火墙以允许传入的数据连接。
被动模式
被动模式(Passive Mode)下,客户端首先建立一个控制连接到服务器的默认端口(通常是端口21)。客户端发送一个PASV命令,指示服务器进入被动模式,并等待服务器告知数据通道的地址和端口。然后客户端从其端口连接到服务器指定的数据端口,进行数据传输。
被动模式工作原理
- 客户端向服务器发送一个PASV命令,告知服务器进入被动模式。
- 服务器响应一个包含服务器IP地址和一个由服务器随机选择的数据端口号的应答。
- 客户端从其端口连接到服务器指定的数据端口。
- 数据传输过程中,服务器通过控制连接发送命令,客户端通过数据连接接收数据。
- 被动模式的优点是适用于客户端位于防火墙、NAT或代理后面的情况,无需配置任何特殊的防火墙规则或NAT转换。
被动模式局限性
客户端连接到服务器的数据端口可能会受到端口范围的限制。由于服务器随机选择数据端口,可能需要配置防火墙以允许传入的数据连接。
主被动模式总结主动模式适用于客户端具有公共可访问IP地址的情况,需要服务器主动连接到客户端。
被动模式适用于客户端位于防火墙、NAT或代理后面的情况,无需服务器连接到客户端。具体使用哪种模式取决于网络环境和防火墙配置。
PORT命令
PORT命令是FTP中的一个命令,用于在主动模式下建立数据连接。当使用PORT命令时,客户端将通过指定的IP地址和端口号来指定数据连接的端点。
PORT命令的语法如下:PORT h1,h2,h3,h4,p1,p2
h1.h4指定了服务器的IP地址的四个十进制数值,p1.p2指定了服务器希望在端口上接收数据的数值。
PORT命令工作步骤客户端通过控制连接发送PORT命令到服务器。
服务器解析PORT命令中指定的IP地址和端口号。
服务器使用指定的IP地址和端口号在自己的端上建立数据连接。
以后的数据传输将通过这个数据连接进行。
需要注意的是,PORT命令只在FTP的主动模式(Active Mode)下使用。在主动模式下,服务器通过数据连接初始化数据传输。相反,在被动模式(Passive Mode)下,客户端通过PASV命令告知服务器自己将连接到的IP地址和端口号,服务器在该地址和端口上等待数据连接请求。
总结一下,PORT命令用于在FTP主动模式下指定服务器建立数据连接的端点。它允许客户端通过指定IP地址和端口号来控制数据连接的建立。
相关文件
配置文件:/etc/vsftpd/vsftpd.conf
安装FTP服务器
1)安装vsftpd软件
]# yum -y install vsftpd
2)配置文件信息
]# vi /etc/vsftpd/vsftpd.conf # 传输模式和端口设置 pasv_enable=YES #启用或禁用被动模式(PASV)。设置为 YES 表示启用被动模式 pasv_min_port=1024 # 被动模式数据连接的最小端口 pasv_max_port=1048 # 被动模式数据连接的最大端口 # 本地用户设置 local_enable=YES # 启用本地用户访问 write_enable=YES # 允许本地用户上传和修改文件 local_umask=022 # 本地用户创建文件和目录的默认权限掩码 dirmessage_enable=YES xferlog_enable=YES # 匿名用户设置 anonymous_enable=YES # 启用匿名用户访问 anon_upload_enable=YES # 允许匿名用户上传文件 anon_mkdir_write_enable=YES # 允许匿名用户创建目录的写权限 anon_umask=022 # 匿名用户创建文件和目录的默认权限掩码 # 用户限制设置 chroot_local_user=YES # 限制本地用户在其主目录 chroot_list_enable=YES # 启用根据 chroot_list 文件来限制用户的访问 chroot_list_file=/etc/vsftpd/chroot_list # chroot_list 文件的路径 # 安全设置 ssl_enable=YES # 启用 SSL/TLS 安全连接 rsa_cert_file=/etc/ssl/certs/vsftpd.crt # 服务器端证书文件的路径 rsa_private_key_file=/etc/ssl/private/vsftpd.key # 服务器端私钥文件的路径 # 日志设置 xferlog_file=/var/log/vsftpd.log # 传输日志文件的路径 xferlog_std_format=YES # 使用标准的 xferlog 格式 # 其他设置 idle_session_timeout=600 # 闲置会话超时时间为 600 秒 require_ssl_reuse=NO # 禁用 SSL 会话的重用 async_abor_enable=YES # 启用异步 ABOR 命令支持 ]# ls /var/ftp/ ]# touch /var/ftp/shizhiwang.txt
3)启动服务和检查状态
]# systemctl restart vsftpd ]# systemctl status vsftpd //检查它的状态
4)配置防火墙以允许FTP流量通过。默认情况下,vsftpd使用TCP端口21(控制连接)和20(数据连接)
]# sudo firewall-cmd --permanent --add-port=20/tcp ]# sudo firewall-cmd --permanent --add-port=21/tcp ]# sudo firewall-cmd --reload
5)访问并测试
]# curl ftp://IP地址标签:FTP,被动模式,协议,端口,文件传输,服务器,连接,客户端 From: https://www.cnblogs.com/huihengbo/p/17547265.html