ftp实务

     当你对一个FTP问题进行排错时候,你首先要问的一个问题是使用的是port模式的还是passive模式。因为这两种行为迥异,所以这两种模式引起的问题也不同;近来,由于Port模式的安全问题,许多客户端的FTP应用缺省为Passive模式。


      TCP协议是一个面向连接的协议,中间很多交互传包;当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一 台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以ACK确认;

 

FTP Passive模式
下面的列表描述了Passive模式的FTP的步骤
1、客户端发送一个TCP SYN(TCP同步)包给服务器段众所周知的FTP控制端口21,客户端使
     用暂时的端口作为它的源端口;
2、服务器端发送SYN ACK(同步确认)包给客户端,源端口为21,目的端口为客户端上使用
     的暂时端口;
3、客户端发送一个ACK(确认)包;客户端使用这个连接来发送FTP命令,服务器端使用这个
     连接来发送FTP应答;
4、当用户请求一个列表(List)或者发送或接收文件时候,客户端软件发送PASV命令给服务器端
     表明客户端希望进入Passive模式;

5、服务器端进行应答,应答包括服务器的IP地址和一个暂时的端口,这个暂时的端口是客户端
     在打开数据传输连接时应该使用的端口;
6、客户端发送一个SYN包,源端口为客户端自己选择的一个暂时端口,目的端口为服务器在PASV
     应答命令中指定的暂时端口号;
7、服务器端发送SYN ACK包给客户端,目的端口为客户端自己选择的暂时端口,源端口为PASV
     应答中指定的暂时端口号;
8、客户端发送一个ACK包;
9、发送数据的主机以这个连接来发送数据,数据以TCP段(注:segment,第4层的PDU)形式发送(
     一些命令,如STOR表示客户端要发送数据,RETR表示服务器段发送数据),这些TCP段都需要
     对方进行ACK确认;
10、当数据传输完成以后,发送数据的主机以一个FIN命令来结束数据连接,这个FIN命令需要另一
     台主机以ACK确认,另一台主机也发送一个FIN命令,这个FIN命令同样需要发送数据的主机以A
     CK确认;

11、客户端能在控制连接上发送更多的命令,这可以打开和关闭另外的数据连接;有时候客户端结
     束后,客户端以FIN命令来关闭一个控制连接,服务器端以ACK包来确认客户端的FIN,服务器
     同样也发送它的FIN,客户端用ACK来确认

下图图示了Passive模式FTP的开始几个步骤:
/====================================================================\
|                                                                    |
|       [ ftp Client ]                       [ ftp Server ]          |
|                                                                    |
|       (TCP:21 连接初始化,控制端口)                                    |
|                              SYN                                   |
|        Port xxxx   ---------------------->    Port 21       [TCP]  |
|                             SYN+ACK                                |
|        Port xxxx   <----------------------    Port 21              |
|                              ACK                                   |
|        Port xxxx   ---------------------->    Port 21              |
|                                                                    |
|       (PASV操作: 被动连接数据端口初始化)                               |
|                                                                    |
|                             PASV                                   |
|        Port xxxx   ---------------------->    Port 21              |
|                     PASV OK, IP, Port yyyy                         |
|        Port xxxx   <----------------------    Port 21              |
|                               SYN                                  |
|        Port zzzz   ---------------------->    Port yyyy            |
|                            SYN+ACK                                 |
|        Port zzzz   <----------------------    Port yyyy            |
|                               ACK                                  |
|        Port zzzz   ---------------------->    Port yyyy            |
|                                                                    |
|                                                                    |
|        (数据操作: 数据传输)                                           |
|                       List, Retr or Stor                           |
|        Port xxxx   ---------------------->    Port 21              |
|                           Data + ACK                               |
|        Port zzzz   <--------------------->    Port yyyy            |
|                               .                                    |
|                               .                                    |
|                               .                                    |
|                                                                    |
\====================================================================/
一个PASV请求要求服务器在服务器选择的一个新的端口上接受数据连接,PASV命令没有任何参
数,服务器端的回应只是一行显示服务器IP地址和服务器接受连接的TCP端口号。

下图显示了服务器对PASV命令的回应,服务器告诉客户端它在端口5365(192,168,179,100,20
,245)上进行监听,计算端口的方法是20*256+245=5365;
/====================================================================\
| TCP - Transport Control Protocol                                   |
|   Source Port:          21  ftp                                    |
|   Destination Port:     1249                                       |
|   Sequence Number:      4239887193                                 |
|   Ack Number:           36925357                                   |
|   Offset:               5  (20  bytes)                             |
|   Reserved:             %000000                                    |
|   Flags:                %011000                                    |
|                         0. .... (No Urgent pointer)                |
|                         .1 .... Ack                                |
|                         .. 1... Push                               |
|                         .. .0.. (No Reset)                         |
|                         .. ..0. (No SYN)                           |
|                         .. ...0 (No FIN)                           |
|                                                                    |
|   Window:               8760                                       |
|   Checksum:             0x3EAB                                     |
|   Urgent Pointer:       0                                          |
|   No TCP Options                                                   |
|                                                                    |
| FTP Control - File Transfer Protocol                               |
|   Line  1:              PASV 192,168,0,1,100,20,245<CR><LF>        |
|                                                                    |
| FCS - Frame Check Sequence                                         |
|   FCS (Calculated):     0xBED4346D                                 |
\====================================================================/
当收到PASV命令的回应后,客户端打开一个TCP连接,源端口为一个暂时的端口,目的端口为
服务器提供的暂时端口。

下图显示了客户端的TCP连接建立过程,正如上面所说,目的端口为5365。
/====================================================================\
| TCP - Transport Control Protocol                                   |
|   Source Port:          1250                                       |
|   Destination Port:     5365                                       |
|   Sequence Number:      36931503                                   |
|   Ack Number:           0                                          |
|   Offset:               7  (28  bytes)                             |
|   Reserved:             %000000                                    |
|   Flags:                %000010                                    |
|                         0. .... (No Urgent pointer)                |
|                         .0 .... (No Ack)                           |
|                         .. 0... (No Push)                          |
|                         .. .0.. (No Reset)                         |
|                         .. ..1. SYN                                |
|                         .. ...0 (No FIN)                           |
|                                                                    |
|   Window:               8192                                       |
|   Checksum:             0x1A57                                     |
|   Urgent Pointer:       0                                          |
|   No TCP Options                                                   |
|                                                                    |
| TCP Options                                                        |
|   Options Type:         2   Maxinum Segment Size                   |
|   Length:               4                                          |
|   MSS:                  1460                                       |
|                                                                    |
| FCS - Frame Check Sequence                                         |
|   FCS (Calculated):     0x5A1BD023                                 |
\====================================================================/

大多数人认为在防火墙网络环境中Passive模式比Port模式的问题小,但我们注意到在Passive
模式下,客户端打开一个暂时的目的端口连接,一些防火墙或者CISCO设备的访问列表(ACL)可
能会阻止这种连接,同样服务器的回应也是从一个暂时的端口到一个暂时的端口,防火墙或者
CISCO的访问列表也会阻止这种连接。在CISCO路由器上你可以用访问列表关键字"established
"来避免第二个问题,"established"关键字告诉路由器允许带ACK字端的包通过,服务器端的S
YN ACK包带有ACK字端。在新版本PIX IOS中也可以通过fixit关键字建立针对ftp协议的深层状
态检测过滤,其他大多数状态检测防火墙例如LinuxNetfilters也支持ftp协议的状态检测,进行
准确的PASV动态端口过滤。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值