ftp介紹(主動、被動傳輸模式)

 

什麼是FTP?

FTP就是文件傳輸協議 File Transfer Protocol 的縮寫.

FTP端口號是多少?

21

FTP的端口號能改嗎?

ftp的端口號20、21有何區別?

一個是數據端口,一個是控制端口,控制端口一般爲21,而數據端口不一定是20,這和FTP的應用模式有關,如果是主動模式,應該爲20,如果爲被動模式,由服務器端和客戶端協商而定

FTP Port模式和FTP Passive模式

  當你對一個FTP問題進行排錯時候,你首先要問的一個問題是使用的是port模式的還是passive 模式。因爲這兩種行爲迥異,所以這兩種模式引起的問題也不同;在過去,客戶端缺省爲active(port)模式;近來,由於Port模式的安全問題,許多客戶端的FTP應用缺省爲Passive模式。

  >>2.1 FTP Port模式

  Port模式的FTP步驟如下:

1、 客戶端發送一個TCP SYN(TCP同步)包給服務器段衆所周知的FTP控制端口21,客戶端使用暫時的端口作爲它的源端口;

2、 服務器端發送SYN ACK(同步確認)包給客戶端,源端口爲21,目的端口爲客戶端上使用的暫時端口;

3、 客戶端發送一個ACK(確認)包;客戶端使用這個連接來發送FTP命令,服務器端使用這個連接來發送FTP應答;

4、 當用戶請求一個列表(List)請求或者發起一個要求發送或者接受文件的請求,客戶端軟件使用PORT命令,這個命令包含了一個暫時的端口,客戶端希望服務器在打開一個數據連接時候使用這個暫時端口;PORT命令也包含了一個IP地址,這個IP地址通常是客戶自己的IP地址,而且FTP也支持第三方(third-party)模式,第三方模式是客戶端告訴服務器端打開與另臺主機的連接;

5、 服務器端發送一個SYN包給客戶端的暫時端口,源端口爲20,暫時端口爲客戶端在PORT命令中發送給服務器端的暫時端口號;

6、 客戶端以源端口爲暫時端口,目的端口爲20發送一個SYN ACK包;

7、 服務器端發送一個ACK包;

8、 發送數據的主機以這個連接來發送數據,數據以TCP段(注:segment,第4層的PDU)形式發送(一些命令,如STOR表示客戶端要發送數據,RETR表示服務器段發送數據),這些TCP段都需要對方進行ACK確認(注:因爲TCP協議是一個面向連接的協議)

9、 當數據傳輸完成以後,發送數據的主機以一個FIN命令來結束數據連接,這個FIN命令需要另一臺主機以ACK確認,另一臺主機也發送一個FIN命令,這個FIN命令同樣需要發送數據的主機以ACK確認;

10、 客戶端能在控制連接上發送更多的命令,這可以打開和關閉另外的數據連接;有時候客戶端結束後,客戶端以FIN命令來關閉一個控制連接,服務器端以ACK包來確認客戶端的FIN,服務器同樣也發送它的FIN,客戶端用ACK來確認。

下圖圖示了FTP PORT模式前幾步步驟:
/====================================================================/
| |
| [ ftp Client ] [ ftp Server ] |
| |
| (TCP:21 連接初始化,控制端口) |
| SYN |
| Port xxxx ----------------------> Port 21 [TCP] |
| SYN+ACK |
| Port xxxx <---------------------- Port 21 |
| ACK |
| Port xxxx ----------------------> Port 21 |
| |
| (控制操作: 用戶列目錄或傳輸文件) |
| |
| Port, IP, Port yyyy |
| Port xxxx <---------------------- Port 21 |
| Port Seccussful |
| Port xxxx <---------------------- Port 21 |
| List, Retr or Stor |
| Port xxxx ----------------------> Port 21 |
| |
| |
| (TCP:20 連接初始化,數據端口) |
| SYN |
| Port yyyy <---------------------- Port 20 |
| SYN+ACK |
| Port yyyy ----------------------> Port 20 |
| ACK |
| Port yyyy <---------------------- Port 20 |
| |
| |
| (數據操作: 數據傳輸) |
| Data + ACK |
| Port yyyy <---------------------> Port 20 |
| . |
| . |
| . |
| |
/====================================================================/

  FTP Port模式會給網絡管理人員在許多方面帶來很多問題,首先,在PORT命令消息中的IP地址和端口號的編碼不是直白地顯示。另外,應用層的協議命令理論上不應該包含網絡地址信息(注:IP地址),因爲這打破了協議層的原則並且可能導致協同性和安全性方面的問題。

  下圖是WildPackets EtherPeek協議分析儀解碼了PORT命令的地址參數,地址參數後是端口號,見PORT192,168,10,232,6,127;6,127部分的第一個阿拉伯數字乘以256,然後加上第2個阿拉伯數字就得到端口號,所以客戶端指定了端口號爲6*256+127=1663;
/====================================================================/
| IP Header - Internet Protocol Datagram |
| Version: 4 |
| Header Length: 5 (20 bytes) |
| |
| ............... |
| |
| Time To Live: 128 |
| Protocol: 6 TCP - Transmission Control Protocol |
| Header Checksum: 0xAA36 |
| Source IP Address: 192.168.0.1 DEMO |
| Dest. IP Address: 192.168.0.3 VI |
| No IP Options |
| |
| TCP - Transport Control Protocol |
| Source Port: 2342 manage-exec |
| Destination Port: 21 ftp |
| Sequence Number: 2435440100 |
| Ack Number: 9822605 |
| 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: 65150 |
| Checksum: 0x832A |
| Urgent Pointer: 0 |
| No TCP Options |
| |
| FTP Control - File Transfer Protocol |
| Line 1: PORT 192,168,0,1,9,39<CR><LF> |
| |
| FCS - Frame Check Sequence |
| FCS (Calculated): 0xF4C04A4F |
/====================================================================/

下圖驗證了服務器端的確從端口20打開到端口1663的TCP連接:
/====================================================================/
| TCP - Transport Control Protocol |
| Source Port: 20 ftp-data |
| Destination Port: 1663 |
| Sequence Number: 2578824336 |
| Ack Number: 0 |
| Offset: 6 (24 bytes) |
| Reserved: %000000 |
| Flag

 

s: %000010 |
| 0. .... (No Urgent pointer) |
| .0 .... (No Ack) |
| .. 0... (No Push) |
| .. .0.. (No Reset) |
| .. ..1. SYN |
| .. ...0 (No FIN) |
| |
| Window: 3731 |
| Checksum: 0x8A4C |
| 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 |
/====================================================================/

  當使用FTP時候,網絡中的防火牆必須要聲明相應的端口,防火牆必須要跟蹤FTP對話然後檢查PORT命令,防火牆必須要參與從服務器端到客戶端在PORT命令中指定的端口連接的建立過程。

  如果網絡中使用了NAT(注:網絡地址翻譯),那麼NAT的網關同樣也需要聲明相應的端口,網關需要把在PORT命令中指定的IP地址翻譯成分配給客戶的地址,然後重新計算TCP的Checksum ;如果網關沒有正確地執行這個操作,FTP就失敗了。

  黑客可能會利用FTP支持第三方特性這一特點,在PORT命令中設置IP地址和端口號參數來指定一臺目標主機的地址和端口號(有時候稱這種攻擊爲FTP反彈攻擊),例如黑客可以讓一臺FTP服務器不斷地從它的源端口20發送TCP SYN包給一系列目的端口,讓FTP服務器看起來正在進行端口掃描,目的主機不知道攻擊來自黑客的主機,看起來攻擊象是來自FTP服務器。一些常用的FTP應用在PORT命令中設置地址爲0.0.0.0,這樣做的意圖是讓FTP服務器只需要與打開控制連接
的相同客戶進行數據連接,設置地址爲0.0.0.0可能會讓防火牆不知所措。例如,CISCO PIX IOS6.0以上版本的PIX(注:CISCO硬件防火牆設備,6.0以上版本爲其修正了相關的FTP協議)要求數據連接的IP地址與已經存在的控制連接的IP地址必須相同。這樣做的原因是防止黑客用PORT命令來攻擊別的機器,雖然一些FTP應用設置IP地址爲0.0.0.0不是有意圖的攻擊,但在PIX修正協議環境下的確引起了一些問題,同時對其他不允許第三方模式和避免FTP反彈攻擊的防火牆來說,這也會引起相同的問題。

>>2.2 FTP Passive模式

  下面的列表描述了Passive模式的FTP的步驟,步驟1到3和Port模式FTP相同,步驟9到11同樣與Port模式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命令同樣需要發送數據的主機以ACK確認;

11、客戶端能在控制連接上發送更多的命令,這可以打開和關閉另外的數據連接;有時候客戶端結束後,客戶端以FIN命令來關閉一個控制連接,服務器端以ACK包來確認客戶端的FIN,服務器同樣也發送它的FIN,客戶端用ACK來確認。

...

...

 >>5.0<< 參考

ftp協議簇
http://www.ietf.org/rfc/rfc959.txt
http://www.ietf.org/rfc/rfc1579.txt

ftp安全擴展
http://www.ietf.org/rfc/rfc2228.txt
http://www.ietf.org/rfc/rfc2246.txt

ftp安全擴展,SSL接口草案:
http://www.ietf.org/internet-drafts/draft-murray-auth-ftp-ssl-13.txt

ssl/tls協議規範:
http://www.ietf.org/rfc/rfc2246.txt

OpenSSL,一個廣爲應用的SSL實現:
http://www.openssl.org

支持ssl ftp的ftp client:
http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext_col.html#client

支持ssl ftp的ftp server:
http://www.ford-hutchinson.com/~fh-1-pfh/ftps-ext_col.html#server

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章