FTP 协议

13 篇文章 2 订阅
订阅专栏
12 篇文章 0 订阅
订阅专栏

 一个完整的FTP文件传输需要建立两种类型的连接,一种为文件传输下命令,称为控制连接,另一种实现真正的文件传输,称为数据连接。


FTP是文件传输协议的缩写,包含了两个通道,一个叫控制通道,一个叫数据通道。 控制通道:控制通道是和FTP服务器进行沟通的通道,连接FTP,发送FTP指令都是通过控制通道来完成的。 数据通道:数据通道是和FTP服务器进行文件传输或者列表的通道。 大家可能会问,为什么FTP协议需要两个通道呢? 我举一个简单的例子,当我们用FTP客户端比如FTPRush下载FTP上的文件的时候,通常会加入好几个目录和文件到队列窗口,那么当下载开始的时候,队列里面的第二个文件怎么知道该被传输呢?这就是控制通道的用处了,当下载文件的时候,FTP客户端会 等待FTP服务器返回指令,这个指令就是通过控制通道来完成的,当数据通道的传输完成以后,FTP客户端就会接收到来自控制通道的指令,这样FTP客户端就可以知道这个文件已经传输完成或者失败,进行下一个传输了。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

FTP基于TCP连接,交互过程分为控制通道和数据通道。控制通道发送和回应FTP命令,数据通道传输文件数据等信息。

FTP服务器默认监听端口控制通道为21,数据通道为20。

FTP服务器在控制通道端口进行监听,客户端与服务器控制通道端口建立连接,客户端通过向服务器端发送控制命令来进行流程控制,当有数据传输时(LIST-列取所有文件信息, RETR-获取文件等命令)开始建立数据通道。数据通道的建立有两种方式,主动模式和被动模式,主动模式为客户端主动在端口监听,通过发送PORT命令告诉服务器端监听的端口,服务器端连接此端口来进行数据传输。被动模式为服务器在数据端口进行监听(默认为20),通过客户端发送的PASV(进入被动模式)命令的回应来告诉客户端监听的地址和端口,客户端通过连接此端口来进行数据传输。数据传输结束后服务器端通过控制通道向客户端发送数据传输结束消息。

FTP服务器回应包括三个数字和一些文本,客户端根据这三个数字来检测下一步要进入的状态。回应包括三个数字码+空格+文本。

-------------------------------------------------------------------------------------------------------------------------------------------------------------

在整个交互的 FTP 会话中,控制连接始终是处于连接状态的,数据连接则在每一次文件传送时先打开后关闭。

FTP客户端发起FTP会话,与FTP服务器建立相应的连接。FTP会话期间要建立控制信息进程与数据进程两个连接。控制连接不能完成传输数据的任务,只能用来传送FTP执行的内部命令以及命令的响应等控制信息;数据连接是服务器与客户端之间传输文件的连接,是全双工的,允许同时进行双向数据传输。当数据传输完成后,数据连接会撤消,再回到FTP会话状态,直到控制连接被撤消,并退出会话为止。

---------------------------------------------------------------------------------------------------------------------------------------------------------------

TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet, 你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。

 

  FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。

 

  1.ASCII传输方式:假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。

 

  但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序, 数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。

 

  2.二进制传输模式:在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。

 

  如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢 ,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII方式一般假设每一字符的第一有效位无意义,因为ASCII字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。

 

1)      控制连接

客户端希望与FTP服务器建立上传下载的数据传输时,它首先向服务器的TCP 21端口发起一个建立连接的请求,FTP服务器接受来自客户端的请求,完成连接的建立过程,这样的连接就称为FTP控制连接。

2)      数据连接

FTP控制连接建立之后,即可开始传输文件,传输文件的连接称为FTP数据连接。FTP数据连接就是FTP传输数据的过程,它有两种传输模式

(1) PORT(主动模式)

PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据,原理图如下图:

http://static.oschina.net/uploads/space/2011/0528/204156_vG81_97118.jpg

 

    (2) PASV(被动模式)

    PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输,

http://static.oschina.net/uploads/space/2011/0528/204218_G2gD_97118.jpg

 

 

Xlight tfp工具有断点续传功能,这个功能很强大,有的防火墙就因为断点续传问题,过滤不成功,可以关闭断点续传功能,或者防火墙阻断rest命令(断点续传!)

=============================================================================================

 

ftp模式分为主动模式(active mode)和被动模式(passive mode),ftp是tcp连接,所以要进行三次握手

1. active和passive模式的配置:

在命令行输入vim /etc/vsftpd/vsftpd.conf:

1> active mode:

pasv_enable=NO     (passive模式关闭)
pasv_min_port=3000
pasv_max_port=4000
port_enable=YES    (active模式开启)
connect_from_port_20=YES  (即默认情况下,FTP PORT主动模式进行数据传输时使用20端口(ftp-data)。YES使用,NO不使用。)

2>passive mode:

pasv_enable=YES
pasv_min_port=3000  
pasv_max_port=4000

设定在PASV模式下,建立数据传输所可以使用port范围的下界和上界,0 表示任意(1024 – 65535端口)。默认值为0。把端口范围设在比较高的一段范围内,比如3000-4000。

在linux上,如果不配置pasv_enable=NO,默认是passive模式。

2.  service vsftpd restart 重启ftp服务;

3.  通过命令行连接ftp server:

1> active mode:   ftp -A 3.3.3.3   

active模式连接ftp server时一定要加-A

2> passive mode: 可以直接使用  ftp 3.3.3.3   也可以使用 ftp -p 3.3.3.3

4.   ftp client: 192.168.168.169   ftp server: 3.3.3.3

1> active 模式:

     在active模式下,如下图抓的包中,在命令连接部分(ftp类型的包),client端使用的端口是36439,这个端口是大于1024的任意端口,ftp server端用的端口是21:

如下图,在active模式下,要传输数据时,ftp client通过第23个包通过21号端口告诉server数据传输联系端口43187(大于1024的任意端口),并进行listen,server端用端口20主动和client端43187建立数据传输通道,并传输数据(第30,32,34个包)。这里是server知道了client端的数据通道监听端口后,主动建立了数据传输通道,所以是主动模式。

 

在active模式下,数据传输部分(FTP-DATA类型的包),ftp-server端用的端口是20,默认情况下,FTP PORT主动模式进行数据传输时使用20端口,ftp-client端用的是43187端口,是上一步client发给server的数据传输监听端口。

总结:active 模式

2> passive 模式:

     在passive 模式下,如下图所抓的包中,在命令部分(ftp类型的包),client端使用的端口是36434,这个端口是大于1024的任意端口,ftp server用的端口是21.

在passive模式下,如下图的第28个包,是由client端发起PASV(passive mode)的数据传输通道连接请求,所以为被动模式。

 

而在passive模式的数据传输部分(FTP-DATA类型的包),ftp-server端用的端口是3542,这个端口是在/etc/vsftpd/vsftpd.conf文件中passive模式下设置的端口范围(3000-4000,可以自己设置)中任意选的一个端口,ftp-client端用的是53001端口,是大于1024的任意一个端口。

总结:

passive模式

 

 

================================================================================================

FTP协议抓包分析


1-3号包是tcp三次握手,建立连接,可见ftp是基于tcp的

4号包,服务器向客户端发送自己的相关信息,后面的状态码220表示服务准备就绪

5号包应该是编码相关内容,具体不知
6-13号包,登录,8号包发送输入的用户名:ftp,11号包向服务端发送输入的密码:111111(明文传输->不安全),12号包提示,登录成功(状态码230表示登录成功)
14-16号包,期间去百度ftp相关知识,没有操作,可以看到大约两分钟后(13-14时间差),服务器提示超时,主动关闭了连接(状态码421表示服务关闭)
17-18号包,因为当时不知道ftp服务器会超时关闭连接,继续操作时提示连接已经关闭,看了数据包才知道(14-16),服务器已经关闭了连接,17-18是我刚才尝试继续操作的时候,被服务器拒绝(客户端没有自动提示连接超时关闭,当超时后再操作才提示连接已关闭,具体提示内容没有截图)


FTP响应码 响应代码 解释说明 
110 新文件指示器上的重启标记              120 服务器准备就绪的时间(分钟数)          125 打开数据连接,开始传输 
150 打开连接                                         200 成功 202 命令没有执行                                   211 系统状态回复
 212 目录状态回复                                            213 文件状态回复                                                    214 帮助信息回复 
215 系统类型回复                                             220 服务就绪                                                             221 退出网络 
225 打开数据连接                                             226 结束数据连接                                                    227 进入被动模式(IP 地址、ID 端口) 
230 登录因特网                                                  250 文件行为完成                                                   257 路径名建立 
331 要求密码                                         332 要求帐号                                               350 文件行为暂停 
421 服务关闭                                         425 无法打开数据连接                                           426 结束连接
 450 文件不可用                                                451 遇到本地错误                                        452 磁盘空间不足
 500 无效命令                                        501 错误参数                                               502 命令没有执行
 503 错误指令序列                                            504 无效命令参数                                                   530 未登录网络 
532 存储文件需要帐号                                    550 文件不可用                                                        551 不知道的页类型 
552 超过存储分配                                             553 文件名不允许

ftp协议分析2 (本次操作是登录后下载了IcY.asp文件,执行命令get IcY.ASP,顺便测试一下windows是不区分大小写的)

 

1-13号包是登录过程,上面已经解释过了
下面主要解释ftp文件下载过程:get IcY.ASP(服务器上文件名是IcY.asp)
14号包:我想从Ip = 169.254.69.245(就是客户端自己的地址) 端口:59*256+77=15181连接你的数据端口(256是约定好的常数) 使用PORT 主动模式(对服务器来说 :意思就是让服务器主动来连接客户端,从下面分析可以看到)
15号包,服务器同意
16号包:我想下载IcY.ASP文件(服务器上该文件的命名是IcY.asp)
17号包:给你传了(这里过滤包时不要直接追踪1-17号包的TCP流,因为ftp的控制连接和数据连接是两个不同的TCP连接,如果直接追踪,看不到数据连接,也就是看不到数据传输的过程)

18-20号包:TCP连接三次握手,可以看到ftp为数据传输又开辟了一个TCP连接(数据连接),服务器端口是20,常说的ftp21端口是ftp的控制连接(1-17号包)

21-161是传输IcY.asp文件的过程
可见,服务器每发两个包,客户端ack一次
162-165:数据连接关闭,文件传输完成(注意只是关闭了数据连接)
166-168:服务器通过控制连接告诉客户端,我传完了
169-170:此时我输入了quit命令,退出ftp客户端
171-174:四次挥手,断开控制 连接,至此,ftp连接完全关闭(控制连接+数据连接)


文件下载后的名是IcY.ASP (是按照我请求的文件名,而不是服务器中的文件名IcY.asp)


FTP协议有两种工作方式:PORT方式和PASV方式,中文意思为主动式和被动式。
PORT(主动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,客户端在命令链路上用PORT命令告诉服务器:“我打开了XXXX端口,你过来连接我”。于是服务器从20端口向客户端的XXXX端口发送连接请求,建立一条数据链路来传送数据。
PASV(被动)方式的连接过程是:客户端向服务器的FTP端口(默认是21)发送连接请求,服务器接受连接,建立一条命令链路。当需要传送数据时,服务器在命令链路上用PASV命令告诉客户端:“我打开了XXXX端口,你过来连接我”。于是客户端向服务器的XXXX端口发送连接请求,建立一条数据链路来传送数据。


ftp服务器搭建:
具体百度,补充,在ftp的目录下放上文件后直接客户端get 下载提示access denied (状态码好像是5**,忘了)
解决方法,在服务器中把文件的权限配置:右击文件属性-安全-添加用户everyone-完全控制


ftp客户端:
cmd命令行下
输入 ftp 服务器IP
输入用户名和密码即可
————————————————

================================================================================================

ftp基础的几个命令进行抓包分析

1、操作记录

在windows的cmd里面,一般默认就是有ftp命令的。

操作步骤很简单,只是匿名用户登录,查看目录下文件,然后退出登录。

 

2、抓包分析

2.1建立连接

前面几个抓包为建立连接。

 

然后是服务端发回的响应:(请求的包没看到,不知道是不是对应我上面的ftp 10.10.20.2操作)

 

2.2登录操作:

 

然后是登录成功的响应:

 

2.3 ls命令请求包

接下来是ls命令触发的一个包:

该包主要是客户端向服务端发起的一个请求。

当 PORT 命令被提交时,它指定了客户端(10.15.4.46)上的一个端口而不是服务器的。

该端口号的计算规则就是:211*256 + 220 = 54236,211与220也就是下面红框标识出来的数字的最后两位.

 

下面是服务器端的响应,表示连接已建立。再下面一条是客户端发送的ls命令,查看目录下的文档。

 

2.4 服务端建立单独连接来发送ls的返回数据

 再下来是服务端要返回数据了,于是主动向客户端的54236端口请求建立tcp连接。(就是上面计算出来的那个)

 

 

见下图,这期间,夹杂了原有的21端口与客户端的连接的响应消息。

 

2.5 ls的数据传输及连接断开

连接断开分了两部分,一部分是ftp层面的。一部分是tcp层面的连接断开。

其中tcp连接断开由服务器端发起。

 

回到顶部

五、个人一点感悟

以前面试腾讯时,被问过tcp粘包相关的问题。问到说ftp是怎么解决粘包的。

当时没答上来。后来才知,ftp的每个包都在包的结尾用了\r\n进行标识。

如下:

其中的0d、0a在asicc中就是回车、换行的意思。

================================================================================================

FTP协议File Transfer Protocol,网络中实现文件传输的一种标准协议。

实现的方式:客户端、服务器

传输的方式:ASCII、二进制

支持的模式:主动(PORT)、被动(PASV)

主要命令如下:

如果想更深入的了解和学习FTP协议及应用方面的知识,请参阅相关资料。

这里是用Wireshark网络协议分析软件抓包,来分析FTP协议在传输文件的过程中是如何工作的,有什么特征。

FTP数据报文的形态

用Wireshark捕获到的数据包是什么样的!

从数据包中可以看到FTP的帐号和密码都一目了然,是不是很不安全。

FTP响应代码

FTP传输文件的过程

可以称之为数据传递过程中的重组。

1、 登录到FTP服务器,输入用户名和密码,完成登录;

2、 用ls命令显示服务器目录中的文件列表;

3、 用get命令下载文件test_file.txt

这样我们就完成了一次FTP文件的传输过程,如下图:

下面我们来分析用Wireshark捕获到的文件传输过程中的FTP协议数据包。

先过滤需要的数据包,在filter中输入过滤表达式(ip.src == 192.168.17.113) && (ip.dst == 192.168.17.234)获取我们想要分析的数据包。

FTP传输的数据部分,即文件的内容。

可以把捕获的FTP Data数据包,以原始数据的形式保存,如果传送的是文本文件,还可以通过编码转换工具进行转换。

================================================================================================

ftp协议(文件传输协议)就需要建立两个通道:一个控制通道21,一个数据通道20.那么在现实中,如果我们先建立控制通道,再建立数据通道会引起什么问题呢?
答:如果我们先建立控制通道再建立数据通道,控制通道随着时间的推移,控制通道会断开,如果断开,数据通道也无法传递数据,如果想保证正常通信,数据通道在保证数据传输的过程中,控制通道不能够关闭。
_
如果真出现了这样的问题,该怎么解决呢,这时我们就需要用到协议长连接解决。既然有了协议长连接,我们就应该了解一下,长连接在防火墙上的配置,并且我们需要注意的是,长连接在防火墙USG 6000V和在防火墙USG5500V上的配置有一定的差别。

1.USG 6000配置方式:
security-policy
rule name 1
source-zone trust
destinat-zone untrust
long-link enable
long-link aging-time 5hour

2.USG 5500配置方式:
firewall interzone untrust trust inbound
policy 1
action permit
long-link aging-time 2hour

 

 

当FTP客户端需要登陆到FTP服务器上的时候,服务器与客户端需要进行一系列的身份验证过程,这个过程就叫做命令连接。如在客户端向服务器发起连接请求的时候,客户端会随即的选择某个TCP端口来跟FTP服务器的21号端口进行连接,这主要是通过TCP三次握手来实现的。当三次握手完成之后,客户端与服务器之间便建立了命令连接通道。不过这个通道的用途是非常有限的,其主要用来传输FTP的相关指令。如查看文件列表、删除文件等等,而不能够用来在客户端与服务端进行文件传输。为此这个通道就被称之为命令通道。而跟数据传输相关的为数据通道。

到客户端与服务器建立了连接之后,可能客户端暂时不需要进行数据传输。如只是需要查看目录下的文件或则其他相关的动作。此时之需要命令连接通道就可以完成了。如果此时客户端需要往FTP服务器上上传或者下载文件的话,就需要在客户端与服务器端再建立一条额外的数据传输连接。

FTP是仅基于TCP的服务,不支持UDP。默认情况下FTP协议使用TCP端口中的 20和21这两个端口,一个数据端口和一个命令端口(也可叫做控制端口),也就是20号端口用于传输数据,21号端口用于传输控制信息。但是,是否使用20作为传输数据的端口与FTP使用的传输模式有关,如果采用主动模式,那么数据传输端口就是20;如果采用被动模式,则具体最终使用哪个端口要服务器端和客户端协商决定。这就是主动与被动FTP的最大不同之处。

FTP支持两种模式,一种方式叫做Standard(也就是 PORT方式,主动方式),一种是 Passive (也就是PASV,被动方式)。 Standard模式 FTP的客户端发送 PORT 命令到FTP服务器。Passive模式FTP的客户端发送 PASV命令到 FTP Server。

2.主动传输模式(PORT)

FTP客户端从任意的非特殊的端口(N >1024)连入到FTP服务器的命令端口——21端口。然后客户端在N+1端口监听,并且通过该N+1端口发送PORT命令给FTP服务器,接着服务器会从它自己的数据端口(20)连接到客户端指定的数据端口(N+1)。在主动传输模式下,FTP的数据连接和控制连接的方向是相反的,也就是说:是客户端向服务器建立控制连接,服务器向客户端建立数据连接,其中,客户端的控制连接和数据连接的端口号是大于1024的两个端口号(临时端口),而FTP服务器的数据端口为20,控制端口为21。

主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接,它只是简单地告诉服务器自己监听的端口号,服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说,这是从外部系统建立到内部客户端的连接,这是通常会被阻塞的。

对于服务器端的防火墙来说,必须允许下面的通讯才能支持被动方式的FTP:

①从任何大于1024的端口到服务器的21端口(客户端的初始化连接)

②服务器的21端口到任何大于1024的端口(服务器响应到客户端的控制端口的连接)

③从任何大于1024端口到服务器的大于1024端口(客户端初始化数据连接到服务器指定的任意端口)

④服务器的大于1024端口到远程的大于1024的端口(服务器发送ACK响应和数据到客户端的数据端口)

3.被动传输模式(PASV)

为了解决服务器发起到客户的连接的问题,人们开发了一种不同的FTP连接方式。这就是所谓的被动方式,或者叫做PASV,当客户端通知服务器它处于被动模式时才启用。在被动方式FTP中,命令连接和数据连接都由客户端发起,只要求服务器端产生一个监听相应端口的进程,这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。

当开启一个FTP连接时,客户端随机打开一个大于1024的本地端口N向服务器的21号端口发起连接,同时会开启N+1号端口。然后向服务器提交 PASV命令,通知服务器自己处于被动模式。那么服务器收到命令后就会开启一个任意的非特权端口(P > 1024)监听,并发送PORT P命令给客户端通知自己的数据端口是P。然后客户端通过本地端口N+1连接到服务器的端口P的连接用来传送数据。在被动模式下,FTP的数据连接和控制连接的方向都是一致的,也就是说:是客户端向服务器发起一个用于数据传输的连接,客户端的连接端口是发起这个数据连接请求时使用的端口。客户端的控制连接和数据连接的端口号是大于1024的两个端口号(临时端口),而服务器端的数据端口是临时端口,而不一定是常规的20。

 

从上面可以看出,两种方式的命令链路连接方法是一样的,而数据链路的建立方法就完全不同。而FTP的复杂性就在于此。

 

有个总结很方便记忆:

--------------------------------------------------------------------------------

主动模式:服务器向客户端敲门,然后客户端开门

被动模式:客户端向服务器敲门,然后服务器开门

所以,如果你是如果通过代理上网的话,就不能用主动模式,因为服务器敲的是上网代理服务器的门,而不是敲客户端的门。而且有时候,客户端也不是轻易就开门的,因为有防火墙阻挡,除非客户端开放大于1024的高端端口。

--------------------------------------------------------------------------------

4.主动与被动FTP优缺点

主动FTP对FTP服务器的管理有利,但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接,而这个端口很有可能被客户端的防火墙阻塞掉。还有一点在于,主动模式是由客户端指定端口,服务器主动去连接,其对于服务器的要求较高,若客户端一方在防火墙后,从外向内的主动连接通常易被阻挡。如进行内外机器映射,则须同时映射控制端口和数据传输端口,但由于数据端口是由客户端随机指定的并不固定,这也加大建立连接的难度。

被动模式则一定程度上减轻了服务端的压力,由服务器指定端口,并等待客户端发起连接。但被动FTP对FTP客户端的管理有利,但对服务器端的管理不利。因为客户端要与服务器端建立两个连接,其中一个连到一个高位随机端口,而这个端口很有可能被服务器端的防火墙阻塞掉。

幸运的是,有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接,那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样,不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险,但它大大减少了危险。

5.两种方式该如何选择

当企业的网络环境不同,两个操作模式的应用效果是不同的。这主要是主动操作模式与被动操作模式在数据的传输通道建立上有一定的差异。从以上的分析中我们可以看出,在主动操作模式下,FTP服务器的20号端口是主动同客户端联系,建立数据传输通道的。而在被动操作模式下,则FTP服务器是被动的等待,等待客户端与其20号端口建立连接。不要小看这个细小的差异,这个差异却决定了两者应用环境的不同。一般来说,如果这个FTP服务器只对企业的内部局域网客户提供文件传输的服务,那么基本上两者的应用效果没有很大的差异。但是如果企业网络外部的用户也需要通过互联网与FTP服务器进行文件传输的话,就会有很大的不同。这主要是因为,在数据通道建立的过程中,客户端会在另一个端口上监听等待连接,并利用命令连接通道告诉服务器其监听的端口号。然后企业的边界路由器会将FTP的IP地址转换为合法的公网IP地址(假设企业由于公网IP地址有限,在边界路由器上通过NAT服务向外部用户提供FTP连接)。如果此时采用的是自动操作模式的话,则在连接这个数据通道的过程中FTP服务器会主动跟边界路由器的端口进行通信(因为FTP服务器认为这台边界路由器,其实就是NAT服务器,就是FTP客户段)。但是实际上不是,而且也有可能没有启用这个端口。为此客户端与FTP服务器之间的连接最终没有建立起来。所以说,如果采用主动操作模式的话,当FTP服务器部署在NAT等服务器后面的时候,则FTP服务器与客户端之间只能够建立命令连接通道,而无法建立起数据传输通道。如果FTP服务器与客户端之间还有防火墙的话,在连接的过程中也会出现以上类似的情况。

而如果是采用被动操作模式的话,是客户端主动跟服务器的20号端口进行连接的。为此在数据传输通道建立的过程中,即使中间有NAT服务器或者防火墙,也会准确无误的连接到FTP服务器的数据传输接口。所以说,如果在客户端与FTP服务器之间存在防火墙或者NAT服务器等类似设备的话,那么在FTP服务器部署的时候,最好采用被动操作模式。否则的话,很可能只能够建立命令连接通道,而无法进行数据传输。在FTP服务器部署的时候,其默认采用的是主动操作模式。如果企业FTP服务器的用户都是在内部网络中的,即不用像外部网络的用户提供FTP连接的需求,那么采用这个默认操作方式就可以了。但是如果一些出差在外的员工或者员工在家庭办公时也需要访问企业内部的FTP服务器,而此时出于安全的考虑或者公网IP地址数量的限制,企业往往会把FTP服务器部署在防火墙或者NAT服务器的后面,此时这个主动操作模式就不行了。如果企业中通过互联网来访问企业内部FTP服务器的员工比较多的时候,那么最好能够一劳永逸的解决这个问题,即在FTP服务器上进行设置,强制客户端在连接的时候采用被动操作模式。相反如果用户比较少的话,而且用户又具有一定的计算机知识,那么可以不在服务器上进行设置。而是在连接的过程中,通过FTP客户端来设置。如在某些FTP客户端上,会有一个Passive Transfers等类似的选项。选中这个选项就表示以被动操作方式进行传输。而没有选中这个选项的客户端则仍然采用主动操作模式来进行连接。

总之,在FTP服务器部署的时候考虑是要采用主动操作模式还是被动操作模式,只需要记住一个原则,即如果把FTP服务器部署在防火墙或者NAT服务器的背后,则采用主动操作模式的客户端只能够建立命令连接而无法进行文件传输。如果部署完FTP服务器后,系统管理员发现用户可以连接上FTP服务器,可以查看目录下的文件,但是却无法下载或者上传文件,如果排除权限方面的限制外,那么很有可能就是这个操作模式选择错误。系统管理员告诉用户选择合适的操作模式,基本上就可以解决文件传输的问题了
————————————————
 

 

 

 

 

 

 

=============================================================================

ftp工作原理 及部署

 

控制连接 21端口  用于发送ftp命令

数据连接 20端口  用于上传下载数据

数据连接的建立类型:

  1主动模式: 服务器主动发起的数据连接

首先由客户端的21 端口建立ftp控制连接 当需要传输数据时 客户端以port命令告知服务器 我打开了某端口 你过来链接我 预算服务器从20端口向该客户端该端口发送请求并建立数据连接

  2被动连接模式:服务器等待数据连接

如果客户端所在的网络的防火墙禁止主动模式连接 通常会使用被动模式

首先由客户端的额21端口建立ftp控制连接 当需要传输数据时 服务器以pasv命令告知客户端 我打开了某端口 你过来连接我 于是客户端向服务端的该端口(非20) 发送请求并建立数据连接

传输模式 

  在传输文件时 根据是否进行字符转换 分为文本和二进制模式

  1文本模式 又称ASCLL 美国信息交换标准码模式 这种模式一般只适用于传输纯文本的文件

  2二进制模式 又称Binary模式 这种模式不会转换文件中的字符序列 更适合传输程序 图片等非文本字符的文件 

  使用二进制模式比文本模式更有效率所以大多数的ftp客户端工具 可以根据文件类型自动选择我文件传输模式

  ftp用户类型

  1匿名用户:用户名为ftp 提供任意的密码(包括空密码)都可以通过服务器的验证 一般用于公共文件的下载

  2本地用户:直接是哟个本地的系统账号进行验证登陆 

  3虚拟用户:通过一份独立的用户数据库文件进行登陆验证 将ftp账户与linux账户的关联性降至最低 为系统提供更高的安全性

FTP服务器的软件的种类:

  windows系统 FileZilla Server Ser-u

  linux系统 vsftpd  

Ftp linux客户端软件:ftp

搭建匿名ftp服务端

首先挂载光盘 然后 yum -y install vsftpd 

然后准备一个共享目录 这个共享目录就相当于网站指定的根目录一样用户连接以后直接就会访问它

yum 安装的ftp直接就有ci共享目录 cd  /var/ftp 里边有一个子目录叫pub 这就是共享目录 但是我们需要查看一下此目录的属主权限

ftp程序用户默认就有 所以我们要将此目录的属主改为ftp   chown ftp pub/

接下来我们进入他的配置文件 开放匿名用户 并启动vsftpd服务

cd /etc/vsftpd

安全起见 先将其备份一份   cp vsftpd.conf{,.bak}

然后 vim vsftpd.conf

anonymous_enable=YES #这个是匿名用户 默认他就是开的

local_enable=YES #本地用户默认也是开的

write_enable=YES #这时看这些用户有没有写权限 默认也是有的

local_umask=022 # 用户在共享目录放目录的时候默认是755

anon_upload_enable=YES #开匿名用户的上传权限

anon_umask=022 # 手动添加匿名用户的权限掩码

anon_mkdir_write_enable=YES #开启匿名用户新建目录的权限

anon_other_write_enable=YES #手动添加匿名用户的其他写入权限

 

 然后我们就可以启动服务了

然后我们检查是否真正开启 netstat -antup | grep vsftpd

 客户端配置 :

挂载光盘 然后安装ftp

yum -y install ftp # 这就是他的连接工具

然后就可以进行连接了

连接命令就i是ftp     ftp+服务端的IP地址

匿名用户的nam是ftp 然后回车 密码为空 直接回车就行

然后就登陆了

当然这个我事先在共享目录pub里创建了一个laing目录

然后 我们可以输入help 查看ftp的命令帮助

这就下载下来了

接下来我们可以上传东西 但是只能上传当前目录的文件

 

 但是一定要关闭防火墙及selinux 还有只能上传登陆ftp时的所在目录下的文件 不能递归

至此 匿名用户搭建完毕  (企业用的最多)

接下来我们看虚拟账号ftp搭建 

虚拟账号就是ftp自己承认的虚拟账号

ftp自身本来就是程序用户ftp 当用户连接ftp时 他用虚拟账号做验证 ftp 监听进程验证成功以后它会做一个映射 将登陆过来的用户权限映射本地登陆的账号 这样的话 用户就不需要知道ftp的真是账号 当验证成功以后将它映射成了ftp的程序用户来进行操作 比较安全

接下进行部署:

首先我们还是将配置文件进行备份
然后我们先创建一个虚拟账号文件
创建虚拟账号需要db_load 先which一下看有没有
然后我们在ftp服务端ftp配置文件目录下创建一个
vim vusers.list 虚拟账号文件
在文件里写
比如
zhangsan
123
lisi
456
然后用db_load -T -t hash -f vusers.list vusers.db将此文件转换成数据文件并进行加密加密后的文件名叫做vusers.db
然后将vusers.db权限修改为600
chmod 600 vusers.db
然后创建一个虚拟账户 映射账户
useradd -d /var/ftproot/ -s /sbin/nologin virtual
创建一个账户-d指定他的家目录为 /var/ftproot -s不能登陆
创建家目录所在目录 然后符权限755
然后再/etc下创建pam认证文件 vim /etc/pam.d/vsftpd.vu
auth    required        pam_userdb.so db=/etc/vsftpd/vusers
account    required        pam_userdb.so db=/etc/vsftpd/vusers
将这两句话复制进文件
然后保存
然后修改配置文件
anonymous_enable=NO 还是将其关掉
然后再文件的结尾处将117行pam_service_name=vsftpd改为pam_service_name=vsftpd.vu
然后在他的下边在加两行
guest_enable=YES
guest_username=virtual

然后重启服务
往家目录里创建几个文件/var/ftproot下创建几个文件
然后到客户端测试输入文件里的那几个虚拟用户 比如zhangsan 及密码123
进去了就可一了 虚拟账号共享的是同一个目录
如果想要实现不同的账户单独目录
我们cd到ftp的配置文件的目录下
mkdir vusers.dir然后进入到目录下
创建几个文件
就是各个用户的配置文件 touch zhangsan lisi
然后手动修改配置文件
vim zhangsan
anon_upload_enable=YES
anon_mkdir_write_enable=YES
anon_other_write_enable=YES
anon_max_rate=1
local_root=/var/zhangsan                                             然后创建/var/zhangsan目录 将此目录属主修改为chown virtual /var/zhangsan                    
然后进入到ftp的配置文件vsftpd。conf
在111行加入anon_umask=022
然后再最后一行加入user_config_dir=/etc/vsftpd/vusers.dir
然后重启
然后到客户端测试 输入zhangsan以及密码  成功

接下来是本地用户搭建ftp  so easy

我们先将vsftpd.conf配置文件做一个备份
然后将配置文件里的匿名用户权限关掉
anonymous_enable=NO
然后将96行打开 把前边的#去掉 chroot_local_user=YES 开启本地用户的家目录锁定

然后创建一个普通用户 然后输入 普通用户名及密码登陆ftp 每个上传的文件都是在自己的家目录下的
在ftp的配置文件里有两个配置文件可以拉黑用户 ftpuser user_list

 

HCIP | 华为防火墙配置
朔方鸟的博客
12-26 4118
近日准备某场比赛,涉及到了有关防火墙的知识点,由于之前没有学习过,所以整理如下,主要作笔记用,各位可以作为参考;因为主要用于比赛应急,没有对原理进行深究。
华为防火墙(usg5500)区域间实验
weixin_54223979的博客
05-07 3111
以下通过防火墙的不同区域间的策略来了解防火墙的工作原理, 路由器和防火墙之间最大的不同之处就是防火墙接口下是有区域的,而路由器接口之间是平价的,防火墙根据不同的区域分配不同的安全等级实现隔离控制。 实验拓扑图 由于防火墙下的PC为直连,所以这里不做路由。 需求: 1.内网(trust)可以访问外网(untrust) 2.内网(trust)可以访问服务器(dmz) 3.外网(untrust)可以访问服务器(dmz) 开机之后我们查看以下华为防火墙USG5500的缺省区域 分.
用来传输文件的协议-FTP
最新发布
lxplxplike的博客
04-28 1177
1.FTP协议采用的是TCP作为传输协议,21号端口用来传输FTP控制命令的,20号端口用来传输文件数据的2.了解FTP的传输模式:主动模式和被动模式3.知道黑白名单的设置,黑名单,是名单上的用户被拒绝访问。白名单是只有名单上的用户才可以进行访问。
华为USG5500USG6000的一些配置命令
不光要学,知识要能说出口
08-20 4万+
一、默认配置 管理接口:g0/0/0,而且默认开启了dhcp sever ip地址:192.168.0.1/24 用户名:admin 密码:Admin@123(注意大小写) 二、端口和区域配置 进入端口视图 interface GigabitEthernet 0/0/1 配置ip地址 ip address 192.168.1.1 255.255.255.0 开启端口
ENSP防火墙USG5500 NAT/FTP配置
sxjk1987的专栏
01-16 7767
常见的企业的NAT场景的配置过程。这个企业在对外FTP服务的同时,还有部分员工需要通过NAT访问Internet。由于该企业只有一个公网IP资源,已经作为设备连接外网的接口的IP地址,所以使用easy-ip方式借用这个接口的IP地址来提供NAT服务。 企业内网网段:10.3.0.0/24 --->防火墙GE0/0/0 安全区域trust 企业内IP地址自动分配,通过NA...
华为5500&6000v防火墙配置命令简介
Red_guest的博客
03-19 5524
华为5500&6000v防火墙配置命令简介
FTP协议分析
01-11
主要是FTP协议分析实验,通过模拟实验进行交换机配置,FenixFTP协议工作原理。
FTP 协议规范
12-20
ftp协议 也是自己网上下载的 可以参考下,最近在研究linux的usb驱动这块……以作备份;
Java语言实现简单FTP软件 FTP协议分析(1)
08-30
FTP协议提供了一套命令集,允许客户端向服务器发送命令,执行诸如上传、下载、文件管理等操作。 FTP协议模型由用户接口、用户进程(USERPI)、FTP控制进程(UPTP)、服务器进程接口(SPI)、服务器数据传输进程...
中文FTP协议
08-06
中文FTP协议文档。标准文档。适合用来做FTP客户端等开发。
FTP 协议的实现
06-05
【设计题目】:FTP 协议的实现 【设计目的】: 1) 加深对 TCP/IP 协议的理解。 2) 了解 FTP 协议的工作原理。 3) 掌握用 MFC 编写 FTP 协议的实现程序(也可自选工具)。 【设计任务】: 在 Visual C++6. 0 的...
华为eNSP防火墙USG5500基本配置
compression的专栏
11-03 1万+
华为防火墙USG5500基本配置。
华为防火墙USG6000V使用总结
weixin_30414155的博客
01-13 1772
问题1、ge 1/0/0 的ip地址 20.0.0.2 ,从直连的对端20.0.0.1 无法ping. 但是从防火墙ping对端却是可以ping通? 原因: 华为新一代的防火墙,默认情况下,只有0口是可以允许所有服务的,那么如果你想其它端口也需要的话,需要在端口下面输入如下命令interface GigabitEthernet0/0/1 service-manage http...
华为USG6000V防火墙简单配置案例
热门推荐
谢公子的博客
08-18 12万+
  如图,PC1是企业内网用户,要通过防火墙NAT方式( 1.1.1.105-1.1.1.106 )访问Internet,Server是企业的FTP服务器,通过静态NAT方式供外网用户访问,对外的地址是1.1.1.100。FW1是企业边界防火墙,充当路由和保护企业安全的责任。AR1、AR2是外网路由器。 PC1是Trust区域、Server是DMZ区域,AR1、AR2是Untrust区域。...
华为USG6000v防火墙双机热备综合实验
qq_43205578的博客
03-02 1万+
实验背景: 笔者最近在工作中接触到华为的防火墙,第一感触就是华为防火墙与其它厂商的防火墙在双机热备切换方面有点不同,华为引入了私有协议。 Vgmp(VRRP Group Management Protocol),VRRP组管理协议。由于双机热备导致设备出问题时可能会来回路径不一致,因为主备切换了配置VGMP保证一个组内的VRRP全为Active,如果有一个不是,则全部切换至Standby HRP ...
华为防火墙USG6000v总结
cangyu51462的博客
11-06 1355
防火墙
eNSP V390 USG6000v WEB配置(史上最详细)
Kilven
09-09 8万+
看一下本帅帅的硬件环境 win7 64 位企业版 查看下我的VirtualBox版本 看下 我下载的文件和解压出来的文件 拉出一个防火墙,启动它 找出文件vfw_usg.vdi 的地址,然后导入 找到文件夹下的***\eNSP\res 目录下面的items.xml 文件,编辑它 找到这个文件中的这段代码,修改heartBeat中
(ensp)华为USG6000v防火墙简单配置
RongChun的博客
11-05 1万+
网络拓扑图: 设置pc1地址: 设置pc2地址: 设置防火墙接口地址和开启服务 interface GigabitEthernet1/0/0 ip address 192.168.10.254 255.255.255.0 service-manage ping permit # 开放ping服务 quit interface GigabitEthernet1/0/2 ip address ...
eNSP连接外网Clound和防火墙USG6000v简单配置、USG6000v安装包下载
!不将就的博客
04-30 1万+
USG6000v简单介绍 一、概述 1. 组网 2. 分析 通过Clound连接外网,并且连接防火墙USG6000v,从而和虚拟环境下PC1相连,使PC可以正常的和外部网络进行通信 二、配置 1. Clound配置 绑定UDP 绑定虚拟网卡 此时Clound绑定的网卡的ip地址为192.168.81.1 2. USG6000v配置 点击此处进行下载。提取码为:fne7 导入配置包 启...
labview使用ftp协议
11-29
LabVIEW可以支持FTP协议,通过FTP协议可以实现在不同计算机之间进行文件传输。 在LabVIEW中,通过使用用户自定义的VI(Virtual Instrument,虚拟仪器)可以轻松地实现FTP文件传输功能。首先,需要使用LabVIEW中的...

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Qos概述 15255
  • http 分析 12678
  • Linux环境变量配置的三个方法--/etc/profile,~/.bashrc,shell 11270
  • shell if -z -f 10139
  • 原子操作__atomic_store and __atomic_load 9912

分类专栏

  • 通信 1篇
  • 网络安全 13篇
  • 内核 1篇
  • 算法 3篇
  • udp 2篇
  • shell 5篇
  • go 12篇
  • python 1篇
  • 字符串处理
  • 内存 3篇
  • 正则and脚本 1篇
  • dns 1篇
  • 邮件email协议 1篇
  • http 1篇
  • linux unix 18篇
  • C 9篇
  • 工程管理cmake makefile 2篇
  • TCP 12篇

最新评论

  • 原语,原子,线程安全

    CSDN-Ada助手: Java 技能树或许可以帮到你:https://edu.csdn.net/skill/java?utm_source=AI_act_java

  • Go编译 报错 link: running gcc failed: exit status 1

    Jum_Summer: 点赞,同样遇到/usr/bin/ld: /tmp/go-link-997139771/000014.o: unrecognized relocation (0x2a) in section `.text' /usr/bin/ld: final link failed: Bad value collect2: error: ld returned 1 exit status

  • slab分配器

    melon_eater: slab是给内核用的

  • Go编译 报错 link: running gcc failed: exit status 1

    qq_53557859: 有用,我是GO编译报的错误 GOOS=linux go build -tags release -a -ldflags "-linkmode external -extldflags -static" -o supervisord kg/tool/linux_amd64/link: running gcc failed: exit status 1 /usr/bin/ld: 找不到 -lpthread /usr/bin/ld: 找不到 -lc collect2: 错误:ld 返回 1

  • Go编译 报错 link: running gcc failed: exit status 1

    woshizhicainiaoluguo: 给力啊。点赞!!

最新文章

  • 原语,原子,线程安全
  • DPDK初始化
  • libnuma 及底层实现
2024年1篇
2023年22篇
2022年13篇
2021年35篇
2020年6篇
2019年9篇
2018年2篇
2014年3篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司沙井外贸网站建设报价保山网站优化排名推荐贵阳推广网站公司海口关键词按天扣费公司金华网站优化按天扣费多少钱无锡网站关键词优化哪家好鞍山关键词排名包年推广百色企业网站建设价格济南品牌网站设计价格台州百姓网标王推广黄山建站报价许昌百度网站优化公司铁岭百度网站优化报价济南关键词按天计费公司揭阳seo报价吉祥关键词按天计费哪家好张家界seo排名价格锦州外贸网站建设报价漯河网站改版龙岗网站优化按天收费价格黄石百度seo多少钱滁州百姓网标王价格阿坝SEO按天计费价格河池seo排名湛江营销型网站建设吉祥至尊标王价格长沙网站优化推广报价保山网站优化按天收费多少钱衢州seo网站优化公司龙岗seo网站优化价格歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化