FTP/FTPS/FTPES/SFTP主被动模式详解

什么是FTP的主被动模式

FTP客户端从任意的非特殊的端口N > 1023连入到FTP服务器的命令端口21端口,然后客户端在N+1 (N+1 >= 1024)端口监听,并且通过N+1 (N+1 >= 1024)端口发送命令给FTP服务器,服务器会连接用户本地指定的数据端口,比如20端口,以服务器端防火墙为立足点,要支持主动模式FTP需要打开如下交互中使用到的端口:

命令端口21接受客户端命令端口的连接(客户端初始连接)
命令端口21到客户端命令端口N > 1023(服务器响应客户端命令)
数据端口20到客户端数据端口N+1 > 1024(服务器初始化数据连接到客户端数据端口)
数据端口20接受客户端数据端口N+1 > 1024(客户端发送ACK包到服务器的数据端口)

示例

客户端的命令端口1023与服务器的命令端口21建立连接,并发送命令"PORT 1024"服务器给客户端的命令端口返回一个"ACK",服务器发起一个从它自己的数据端口20到客户端先前指定的数据端口1024的连接,客户端的数据端口1024给服务器端数据端口20返回一个"ACK"
***Attention***
对于客户端的防火墙来说这是从外部系统建立到内部客户端的连接,所以,此模式需要客户端拥有公网IP并开放端口予以访问,当前运营商,如电信,通常会把用户拉入自己的私网IP,故需要联系运营商开通私网转公网业务,此业务是免费的。

被动模式:

为了解决服务器发起到客户的连接的问题,增加了一种被动模式PASV,当客户端通知服务器它处于被动模式时才启用,在被动方式FTP中,命令连接和数据连接都由客户端发起,这样就可以解决从服务器到客户端的数据端口的入方向连接失败的问题,客户端打开两个任意的非特殊端口N > 1023 和 N+1 >= 1024N连接服务器的21端口,但与主动模式不同,客户端不会提交PORT命令并允许服务器来回连它的数据端口,而是提交PASV命令,于是服务器会开启一个任意的非特殊端口P > 1023,并发送”PORT {P}”命令给客户端,然后客户端发起从N+1到服务器的端口P的连接用来传送数据,对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动模式:

服务器命令端口21接受客户端命令端口(客户端初始连接)
服务器命令端口21到客户端命令端口N > 1023(服务器响应客户端命令)
服务器数据端口P > 1023接受客户端数据端口N+1 > 1024(客户端初始化数据连接到服务器数据端口)
服务器数据端口P > 1023到客户端数据端口N+1 > 1024(服务器发送ACK响应到客户端的数据端口)

示例:

客户端的命令端口与服务器的命令端口建立连接,并发送命令"PASV"服务器返回命令"PORT 1023",客户端初始化一个从自己的数据端口到服务器端指定的数据端口的数据连接,服务器的数据端口1023给客户端数据端口1024返回一个"ACK"
***Attention***
被动模式解决了客户端的许多问题,但同时给服务器端带来了更多的问题,最大的问题是需要允许从任意远程终端到服务器高位端口的连接,第二个问题是客户端有的支持被动模式,有的不支持被动模式,必须考虑如何能支持这些客户端,以及为他们提供解决办法。

当NAT(Network Address Translation)设备以主动模式访问FTP服务器时,由于NAT设备不会变更数据包中的IP地址,从而导致无法访问服务器,最权威的FTP参考资料是RFC 959,它是FTP协议的官方规范。

FTPS是一种扩展的FTP协议,它支持Transport Layer Security(TLS)和Secure Sockets Layer(SSL)加密协议,当使用FTPS与服务器连接时,有两种方法:显式和隐式显示又叫FTPES,FTPS客户端跟FTPS服务器必须显式使用一种同样的加密方法,如果客户端不要求加密,服务器也允许非加密通讯
隐式就是客户端直接通过TSL/SSL加密与服务器通讯,如果服务器无响应,则停止通讯。

划重点

SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议,可以为传输文件提供一种安全的网络的加密方法与FTP有着几乎一样的语法和功能SFTP为SSH的其中一部分,在SSH软件包中已经包含了一个叫作SFTP(Secure File Transfer Protocol)的安全文件信息传输子系统,SFTP本身没有单独的守护进程,它必须使用SSHD守护进程(端口号默认是22)来完成相应的连接和答复操作,所以从某种意义上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。

SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。并且,SFTP不需要客户端开放任何可以被服务器连接的端口也不需要服务器开放非22的其他端口,只要服务器支持SSH连接,即可直接使用SFTP且SFTP在CentOS自带的SSH包(SSH/SSHD)中默认是启用状态(需要OpenSSH版本大于4.8p1)其他系统未经测试,可自行测试,至于用户名和密码就是你使用SSH连接服务器并进行操作的账户,至于权限,就是这个系统账户和所属用户组的文件访问权限,root用户具有最高访问权限,如果没有开启,只需要修改sshd_config配置文件:

Subsystem sftp /usr/libexec/openssh/sftp-server #去掉此行的注释
发布了84 篇原创文章 · 获赞 2 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_46192300/article/details/105326463