1Sftp和ftpoverssh2的区别最近使用SecureFx,涉及了两个不同的安全文件传输协议:-sftp-ftpoverSSH2这两种协议是不同的。sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身不需要ftp服务器启动。ftpoverSSH2则象一个二传手。1、SFTP的工作模式:图1显示了SFTP的工作模式,它是作为SSH2的一个子服务工作的。图1SFTP工作模式2、FTPoverSSH2此协议还是基于ftp协议的。在此协议中SSH2服务器起了一个桥梁作用,把数据在客户端和ftp之间转发。ftp协议本身包括两个通道,一个是控制通道,另一个是数据通道。FTPoverSSH2有两种情况,半安全连接(LessSecureConnection)和安全连接(FullSecureConnection)。在半安全连接时,ftp客户端先和SSH2服务器连接,在这个连接中无论控制通道和数据通道都是加密的。但是SSH2服务器和ftp服务器之间就不是加密的了,如果ftp服务器运行在另外一台机器上,SSH2服务器和ftp直接就是明文传输。见图2。图2半安全连接图3是安全连接模式的情形,SSH2服务器和FTP服务器在同一台服务器上。2图3安全连接FTP(文件传输协议)工作原理目前在网络上,如果你想把文件和其他人共享。最方便的办法莫过于将文件放FTP服务器上,然后其他人通过FTP客户端程序来下载所需要的文件。1、FTP架构如同其他的很多通讯协议,FTP通讯协议也采用客户机/服务器(Client/Server)架构。用户可以通过各种不同的FTP客户端程序,借助FTP协议,来连接FTP服务器,以上传或者下载文件。2、FTP通讯端口知识FTP服务器和客户端要进行文件传输,就需要通过端口来进行。FTP协议需要的端口一般包括两种:控制链路--------TCP端口21所有你发往FTP服务器的命令和服务器反馈的指令都是通过服务器上的21端口传送的。3数据链路--------TCP端口20数据链路主要是用来传送数据的,比如客户端上传、下载内容,以及列目录显示的内容等。3、FTP连接的两种方式在数据链路的建立上,FTPServer为了适应不同的网络环境,支持两种连接模式:主动模式(Port)和被动模式(Pasv)。其实这两种连接模式主要是针对数据链路进行的,和控制链路无关。主动模式主动模式是这样工作的:客户端把自己的高位端口和服务器端口21建立控制链路。所有的控制命令比如Is或get都是通过这条链路传送的。当客户端需要服务器端给它传送数据时,客户端会发消息给服务器端,告诉自己的位置和打开的高位端口(一般大于1024的端口都就叫高位端口),等候服务器的20端口和客户端打开的端口进行连接,从而进行数据的传输。当服务器端收到信息后,就会和客户端打开的端口连接,这样数据链路就建立起来了。采用主动模式连接服务器的客户端,当它位于NAT或者防火墙的保护之后时会碰到连接失败的问题。这是因为当防火墙接到服务器发送过来的信息的时候,并不知道应该发送给内部网络中的哪一台客户端造成的。被动模式被动模式是这样工作的:当客户端发送数据请求后,服务器也会发信息给客户端,告诉客户端:服务器在本地打开了一个高位端口P,你现在来连接我吧。当客户端收到该信息时,就会去连接服务器端的端口P,连接成功后,数据链路就建立了。从上面的解释中我们可以看到,两种模式主要的不同是数据连接建立的不同。对于Port模式,是客户端在本地打开一个端口等服务器去连接建立数据连接,而Pasv模式就是服务器打开一个端口等待客户端去建立一个数据连接。浅析文件传输协议(ftp)的工作原理起初,FTP并不是应用于IP网络上的协议,而是ARPANEt网络中计算机间的文件传输协议,ARPANET是美国国防部组建的老网络,于1960-1980年使用。在那时,FTP的主要功能是在主机间高速可靠地传输文件。目前FTP仍然保持其可靠性,即使在今天,它还4允许文件远程存取。这使得用户可以在某个系统上工作,而将文件存贮在别的系统。例如,如果某用户运行Web服务器,需要从远程主机上取得HTML文件和CGI程序在本机上工作,他需要从远程存储站点获取文件(远程站点也需安装Web服务器)。当用户完成工作后,可使用FTP将文件传回到Web服务器。采用这种方法,用户无需使用Telnet登录到远程主机进行工作,这样就使Web服务器的更新工作变得如此的轻松。FTP是TCP/IP的一种具体应用,它工作在OSI模型的第七层,TCP模型的第四层上,即应用层,使用TCP传输而不是UDP,这样FTP客户在和服务器建立连接前就要经过一个被广为熟知的三次握手的过程,它带来的意义在于客户与服务器之间的连接是可靠的,而且是面向连接,为数据的传输提供了可靠的保证。下面,让我们来看看,一个FTP客户在和服务器连接是怎么样的一个过程(以标准的FTP端口号为例)。首先,FTP并不像HTTP协议那样,只需要一个端口作为连接(HTTP的默认端口是80,FTP的默认端口是21),FTP需要2个端口,一个端口是作为控制连接端口,也就是21这个端口,用于发送指令给服务器以及等待服务器响应;另一个端口是数据传输端口,端口号为20(仅PORT模式),是用来建立数据传输通道的,主要有3个作用从客户向服务器发送一个文件。从服务器向客户发送一个文件。从服务器向客户发送文件或目录列表。其次,FTP的连接模式有两种,PORT和PASV。PORT模式是一个主动模式,PASV是被动模式,这里都是相对于服务器而言的。为了让大家清楚的认识这两种模式,朗月繁星分别举例说明。PORT模式当FTP客户以PORT模式连接服务器时,他动态的选择一个端口号(本次试验是6015)连接服务器的21端口,注意这个端口号一定是1024以上的,因为1024以前的端口都已5经预先被定义好,被一些典型的服务使用,当然有的还没使用,保留给以后会用到这些端口的资源服务。当经过TCP的三次握手后,连接(控制信道)被建立(如图1和图2)。图1:FTP客户使用FTP命令建立于服务器的连接图2:用netstat命令查看,控制信道被建立在客户机的6015和服务器的20端口现在用户要列出服务器上的目录结构(使用ls或dir命令),那么首先就要建立一个数据通道,因为只有数据通道才能传输目录和文件列表,此时用户会发出PORT指令告诉服务器连接自己的什么端口来建立一条数据通道(这个命令由控制信道发送给服务器),当服务器接到这一指令时,服务器会使用20端口连接用户在PORT指令中指定的端口号,用以发送目录的列表(如图3)。6图3:ls命令是一个交互命令,它会首先与服务器建立一个数据传输通道。经验证本次试验客户机使用6044端口当完成这一操作时,FTP客户也许要下载一个文件,那么就会发出get指令,请注意,这时客户会再次发送PORT指令,告诉服务器连接他的哪个新端口,你可以先用netstat-na这个命令验证,上一次使用的6044已经处于TIME_WAIT状态(如图4)。图4:使用netstat命令验证上一次使用ls命令建立的数据传输通道已经关闭当这个新的数据传输通道建立后(在微软的系统中,客户端通常会使用连续的端口,也就是说这一次客户端会用6045这个端口),就开始了文件传输的工作。PASV模式然而,当FTP客户以PASV模式连接服务器时,情况就有些不同了。在初始化连接这个7过程即连接服务器这个过程和PORT模式是一样的,不同的是,当FTP客户发送ls、dir、get等这些要求数据返回的命令时,他不向服务器发送PORT指令而是发送PASV指令,在这个指令中,用户告诉服务器自己要连接服务器的某一个端口,如果这个服务器上的这个端口是空闲的可用的,那么服务器会返回ACK的确认信息,之后数据传输通道被建立并返回用户所要的信息(根据用户发送的指令,如ls、dir、get等);如果服务器的这个端口被另一个资源所使用,那么服务器返回UNACK的信息,那么这时,FTP客户会再次发送PASV命令,这也就是所谓的连接建立的协商过程。为了验证这个过程我们不得不借助CUTEFTPPro这个大家经常使用的FTP客户端软件,因为微软自带的FTP命令客户端,不支持PASV模式。虽然你可以使用QUOTEPASV这个命令强制使用PASV模式,但是当你用ls命令列出服务器目录列表,你会发现它还是使用PORT方式来连接服务器的。现在我们使用CUTEFTPPro以PASV模式连接服务器(如图5)。图5:使用CUTEFTPPro以PASV模式连接服务器请注意连接LOG里有这样几句话:COMMAND:PASV227EnteringPassiveMode(127,0,0,1,26,108)COMMAND:LISTSTATUS:Connectingftpdatasocket127.0.0.1:6764...125Dataconnectionalreadyopen;Transferstarting.226Transfercomplete.8其中,227EnteringPassiveMode(127,0,0,1,26,80).代表客户机使用PASV模式连接服务器的26x256+108=6764端口。(当然服务器要支持这种模式)125Dataconnectionalreadyopen;Transferstarting.说明服务器的这个端口可用,返回ACK信息。再让我们看看用CUTEFTPPro以PORT模式连接服务器的情况。其中在LOG里有这样的记录:COMMAND:PORT127,0,0,1,28,37200PORTcommandsuccessful.COMMAND:LIST150OpeningASCIImodedataconnectionfor/bin/ls.STATUS:Acceptingconnection:127.0.0.1:20.226Transfercomplete.STATUS:Transfercomplete.其中,PORT127,0,0,1,28,37告诉服务器当收到这个PORT指令后,连接FTP客户的28x256+37=7205这个端口。Acceptingconnection:127.0.0.1:20表示服务器接到指令后用20端口连接7205端口,而且被FTP客户接受。比较分析在这两个例子中,请注意:PORT模式建立数据传输通道是由服务器端发起的,服务器使用20端口连接客户端的某一个大于1024的端口;在PASV模式中,数据传输的通道的建立是由FTP客户端发起的,他使用一个大于1024的端口连接服务器的1024以上的某一个端口。如果从C/S模型这个角度来说,PORT对于服务器来说是OUTBOUND,而PASV模式对于服务器是INBOUND,这一点请特别注意,尤其是在使用防火墙的企业里,比如使用微软的ISAServer2000发布一个FTP服务器,这一点非常关键,如果设置错了,那么客户将无法连接。最后,请注意在FTP客户连接服务器的整个过程中,控制信道是一直保持连接的,而数9据传输通道是临时建立的。在本文中把重点放到了FTP的连接模式,没有涉及FTP的其他内容,比如FTP的文件类型(Type),格式控制(Formatcontrol)以及传输方式(Transmissionmode)等。不过这些规范大家可能不需要花费过多的时间去了解,因为现在流行的FTP客户端都可以自动的选择正确的模式来处理,对于FTP服务器端通常也都做了一些限制,如下:类型:ASCII或图像。格式控制:只允许非打印。结构:只允许文件结构。传输方式:只允许流方式至于这些内容,限于篇幅在这里就不想再介绍了。希望这篇文章能对大家有些帮助,特别是正在学习ISAServer2000的朋友和一些对FTP不很了解的朋友。+userLink+;$('miniAd').show();}},onFailure:function(){}}});}showMiniAd();FTP协议安全分析前言FTP(Fi