穿過防火牆的多種方法



 




 



名詞解釋:
  協議(Protocol)就是一組在網絡上發送信息的規則和約定。這些規則控制在網絡設備間交換消息的內容、格式、定時、順序和錯誤,通俗說就是不同網絡程序的交流語言。我們常見的QQ使用UDP協議、ICQ使用TCP協議、E-mail程序使用POP3和SMTP協議,而在常見的協議中SOCKS是一種比較複雜的協議。

 端口

  端口(Port)可以認為是計算機與外界通訊交流的出口。其中硬件領域的端口又稱接口,如:USB端口、串行端口等;軟件領域的端口一般指網絡中面向連接服務和無連接服務的通信協議端口,是一種抽像的軟件結構,包括一些數據結構和I/O(基本輸入輸出)緩衝區。端口號實際上有點和文件描述符相似,也是系統的一種資源,只不過其分配方式有固定的模式。有幾種基本分配方式:第一種是全局分配,這是一種集中分配方式,由一個公認權威的中央機構根據用戶需要進行統一分配,並將結果公佈於眾,而且按照協議不同分配不同的端口號,這樣導致很多服務被固定在某個協議的端口上,如TCP的21端口就被FTP服務佔用;第二種是本地分配,又稱動態連接,即進程需要訪問傳輸層服務時,向本地xx作系統提出申請,xx作系統返回本地唯一的端口號,進程再通過合適的系統調用,將自己和該端口連接起來。

端口按端口號可分為三大類:

  1.公認端口(WellsKnownsPorts):從0到1023,它們緊密綁定(Binding)於一些服務。通常這些端口的通訊明確表明了某種服務的協議,例如80端口實際上就是HTTP通訊。

  2.註冊端口(RegisteredaPorts):從1024到49151,它們鬆散綁定於一些服務。也就是說有許多服務綁定於這些端口,這些端口同樣用於許多其他目的,例如許多系統處理動態端口從1024左右開始。

  3.動態和"/"或私有端口(Dynamic3and/or3Private3Ports):從49152到65535。理論上不應為服務分配這些端口,實際上機器通常從1024起分配動態端口,但也有例外:SUN的RPC端口從32768開始。
  
 代理服務器

  代理服務器(Proxy)是網絡信息的中轉站,比方說HTTP代理服務器。我們使用網絡瀏覽器直接鏈接其他Internet站點並取得網絡信息時,需送出Request信號來得到回答,然後對方再把信息傳送回來。代理服務器是介於瀏覽器和Web服務器之間的一台服務器,有了它之後,瀏覽器不是直接到Web服務器去取回網頁而是向代理服務器發出請求,Request信號會先送到代理服務器,由代理服務器來取回瀏覽器所需要的信息並傳送給你。而且大部分代理服務器都具有緩衝功能,就好像一個大Cache,它不斷將新取得的數據包存到它本機的存儲器上,如果瀏覽器所請求的數據在它本機的存儲器上已經存在而且是最新的,那麼它就不重新從Web服務器取數據,而直接將存儲器上的數據傳送給用戶的瀏覽器,這樣就能顯著提高瀏覽速度和效率。除此之外還有SOCKS代理服務器,其原理大同小異。
  
 防火牆

  防火牆(Firewall)是一個系統(或一組系統),它能增強機構內部網絡的安全xx。防火牆系統決定了哪些內部服務可以被外界訪問、外界的哪些人可以訪問內部的特定服務,以及哪些外部資源可以被內部人員訪問。要使一個防火牆有效,所有進入和外出的信息都必須經過防火牆,接受其檢查。防火牆必須做到只允許經過授權的數據通過,並且防火牆本身也必須能夠免於滲透。但不幸的是,防火牆系統一旦被攻擊者突破或迂迴,就不能提供任何保護了。

  防火牆的實現方式包括"包過濾路由器"和"應用層網關"。包過濾路由器可以過濾協議(ICMP、UDP、TCP等),只允許特定的協議通過;應用層網關就是我們常說的代理服務器,它可以提供比路由器更嚴格的安全策略,我們平時的各種限制就是在應用層實現的。
  
  
第一招:SOCKS代理

  一般來講,Boss為防止內部員工偷懶,常常會關閉常見娛樂工具的協議端口,如QQ使用的UDP4000端口,但常常不會關閉SOCKS的1080端口。這樣如果你想用的東西本身支持SOCKS代理,那麼就好辦了,直接使用代理就OK。

  SOCKS是個電路級網關,是DavidKoblas在1990年開發的,此後它就一直作為Internet9RFC中的開放標準。SOCKS在協議棧的TCP層上運行,它的常用端口是1080。與Winsock不同的是,SOCKS不要求應用程序遵循特定的xx作系統平台,比如像Winsock那樣遵循Windows。SOCKS代理與應用層代理、HTTP層代理不同,SOCKS代理只是簡單地傳遞數據包,而不必關心是何種應用協議(比如FTP、HTTP和NNTP請求),所以SOCKS代理服務器比應用層代理服務器要快得多,正因為SOCKS代理服務器有這樣的功能我們才可以通過它來連接Internet。常用到有SOCKS代理有SOCKS4和SOCKS5兩種版本,其中SOCKS4代理只支持TCP協議,SOCKS5代理支持TCP和UDP協議,還支持各種身份驗證機制、服務器端域名解析等。簡單點說,SOCKS4能幹的SOCKS5都可以幹,反過來就不行了,如QQ只能用SOCKS5代理,而FTP可以用SOCKS4和SOCKS5,因為QQ的數據傳輸機制是UDP,而FTP用的數據傳輸機制是TCP。

  SOCKS協議就是一種幾乎萬能的代理協議,它雖然不能理解自己轉發的數據內部結構,但它能夠忠實地轉發數據包,完成協議本來要完成的功能。它與你常見的HTTP代理的不同點在於,HTTP代理通過HTTP協議進行,HTTP代理服務器軟件瞭解通訊包的內部結構,在轉發過程中還要對通訊進行某種修改和轉換。來看看我是怎麼用SOCKS代理來穿透防火牆的吧。

  先來看看QQ中我們怎麼用SOCKS代理吧。首先在QQ的任務欄通知區的圖標處點右鍵,然後選擇系統參數,然後選擇網絡設置,選中使用"SOCKS5代理服務器",填入你所用的SOCKS代理地址和端口號,還可以點測試看看這個SOCKS5代理可用否。確定後,你的QQ就是通過61.136.132.138:1080這個SOCKS5代理上線的,你所有的數據包瓷C


  再來看看如何穿透防火牆來使用FTP工具AbsoluteFTP來從網上下載東西。AbsoluteFTP是一款強大的FTP下載工具,支持SOCKS4和SOCKS5代理,而且全中文界面,如果你所在的局域網被封了21端口導致無法使用FTP下載時,可以用這款軟件加SOCKS代理來繞過防火牆實現FTP功能。FTP既可以用SOCKS4,也可以用SOCKS5代理,而不像QQ只能使用SOCKS5代理。

  在AbsoluteFTP的選項設置中選中全局配置中的防火牆,然後就可以選擇是採用SOCKS4還是SOCKS5代理、是否需要身份認證等,然後填入SOCKS代理服務器和端口以及身份認證所需要的用戶名和口令,這樣就能穿過防火牆使用FTP了。
  
第二招:Socks2HTTP配合SocksCap32

  第一招中,如果網管只開放80端口,把SOCKS常用的端口關閉,或者你想用的軟件本身並不支持SOCKS代理,如Foxmail,或者你就找不到可用的SOCKS代理(網上可用的SOCKS代理數量遠遠小於可用的HTTP代理數量),這時第一招就不靈了,怎麼辦?請看第二招:Socks2HTTP配合SocksCap32,二者加起來使用的結果就是只要你有一個可用的HTTP代理,就可使用各種各樣的軟件來直接繞過防火牆而不管它是否支持SOCKS代理,我們分兩種情況來看。

 1.防火牆關閉了SOCKS端口,但你要用的軟件支持SOCKS代理

  這種情形下可以直接用Socks2HTTP來搞定。Socks2HTTP(http://www.totalrc.net/)是一個代理...我們用"netstatJ-aJ-n"命令來看看本機開放的端口(如圖7),就會發現本機多出個1080端口,這個端口就是HTTP2socks模擬出來的在本機上運行的SOCKS代理服務器偵聽端口,現在你就擁有一個本地的SOCKS5代理服務器了。


  接下來我們看看在QQ等支持SOCKS接口的軟件中該如何設置代理服務器。看下面,直接將SOCKS5服務器地址添為127.0.0.1,端口為1080,趕快測試一下吧。
  
 2.防火牆關閉了SOCKS端口,並且你想用的軟件不支持SOCKS代理

  這就稍微麻煩一些,需要另外一個軟件SocksCap32的配合支持來穿透防火牆。SocksCap32是NEC公司(http://www.socks.nec.com)開發的,?..P就解決了。HTTPfProxy網上有的是,只要有了HTTP代理就有了SOCKS代理。因為Socks2HTTP就是把HTTP代理模擬成SOCKS代理,如果再配合剛才提到的Socks2HTTP,就可以穿透防火牆來使用那些本身沒有SOCKS接口的軟件了,下面我們來解釋這個過程!

  現在網上已經有了SocksCap的漢化版本(http://www.ttdown.com/softview.asp?...ksCap的控制台。

  為了更好理解,我把這個過程分成幾步:

  第一步:首先按照第一部分那樣配置好你的Socks2HTTP,填入可用的HTTP代理,啟動,然後你就擁有一個本地的SOCKS代理服務器127.0.0.1,端口是1080,現在就可以用這個SOCKS代理來配置你的SocksCap。

  第二步:運行SocksCap,如果是第一次運行,系統會自動提示你是否進入設置界面,如果不是第一次運行,可以選擇SocksCap中的文件→設置進入設置界面。

  第三步:在SocksCap的設置界面中填入Socks2HTTP模擬出來的本地SOCKS代理127.0.0.1,端口是1080,"協議"處選擇"SOCKS版本5(5)"→"由遠程決定所有名字",其餘部分,例如直接連接的設置是為了有些內部房梢災苯恿傭揮胚OCKS代理,日誌部分可設置是否產生日誌,日誌功能能幫助診斷連接失敗的原因,我們這裡可以對其他部分直接採用默認設置。

  第四步:建立"應用程序標識項"。應用程序標識項是在SocksCap中新建的一個快捷方式,這個快捷方式指向你所要用的工具,在SocksCap中啟動這個工具就相當於"賦予"了這個工具的SOCKS接口能力。有兩種方式來建立這種快捷方式:

   1.用鼠標拖動桌面上的Cterm快捷鍵到SocksCap的空白處,鬆開鼠標即會彈出菜單,選擇"應用程序標識項"系統會自動建立好標識項(見圖11),點確定即可。


   2.也可以點擊"新建",在彈出的對話框裡填入相應內容,點擊確定。

  第五步:運行程序。在SocksCap控制台中雙擊剛才新建的Cterm快捷方式就可以直接使用了,比方說我現在想連接bbs.mit.edu(圖12),以前因為我在教育網裡無法訪問國外網站,而且網管封了Telnet的23端口,我無法連上這個BBS,現在通過Socks2HTTP和SocksCap,不僅可以出國,而且可以使用Telnet服務連上MIT的BBS,穿透了防火牆!其他工具,比方說FTP、Outlook等,也一樣使用。尤其值得一提的是可以用Outlook收Hotmail的信,如果沒有這種辦法,對於我們這些處在教育網裡的窮人(無出國權限)來講,只能乖乖用HTTP代理上Hotmail的網站,用WWW方式收信。現在有這個就好了,相當於給Outlook配備了SOCKS接口,直接就可以在Outlook裡面收信了。

  
第三招:HTTPTunel

  上面兩招也許就夠用了,但用上面兩招的前提是你要有可用的HTTP代理,從你這裡發送出的所有數據包都是經過包裝後通過代理轉一圈然後再到達它的目的地,這樣會帶來兩個問題:

  第一:速度問題,比方說從A發送數據經過代理B到達C,如果沒有防火牆,數據是直接從A發到C;現在因為要繞過防火牆,首先必須要將從A發出的數據封裝,使之能夠繞過防火牆,然後發給代理B,B再將這些數據解封再傳給C,從C回來的數據也要走一樣的過程。這樣一來,且先不考慮把這些數據封裝、解封去需要耗費的時間,單是經過C繞這麼大一個圈子,速度肯定要大打折扣,所以一般來講肯定不如直接連接速度快。

  第二:過度依賴於代理導致的穩定xx問題,網上找到的代理肯定不是很穩定,很多時候容易產生丟包、服務中斷的情況。其實我們並不是非要通過代理中轉,比方說你哥們在宿舍開了FTP,然後他把精彩的電影放上去,你要看,可是你所在的局域網網管關閉了21的FTP端口,這樣你就沒法Down了,怎麼辦?用HTTPTunnel,Tunnel這個英文單詞的意思是隧道,通常HTTPTunnel被稱之為HTTP暗道,它的原理就是將數據偽裝成HTTP的數據形式來穿過防火牆,實際上是在HTTP請求中創建了一個雙向的虛擬數據連接來穿透防火牆。說得簡單點,就是說在防火牆兩邊都設立一個轉換筒l時只有Unix版本,略FFTP的機器的IP是192.168.1.231,我本地的機器的IP是192.168.1.226,現在我本地因為防火牆的原因無法連接到FTP上,現在用HTTPTunnel的過程如下:

  第一步:在我的機器上(192.168.1.226)啟動HTTPTunnel客戶端。啟動MS-DOS的命令行方式,然後執行命令,其中htc是客戶端程序,-f參數表示將來自192.168.1.231:80的數據全部轉發到本機的8888端口,這個端口可以隨便選,只要本機沒有佔用就可以。

  然後我們用Netstat看一下本機痔顒犖搕f,發現8888端口已在偵聽。

  第二步:在對方機器上啟動HTTPTunnel的服務器端,並執行命令"htsJ-fJlocalhost:21J80",這個命令的意思是說把本機21端口發出去的數據全部通過80端口中轉一下,並且開放80端口作為偵聽端口,再用Neststat看一下他的機器,就會發現80端口現在也在偵聽狀態。
  
  第三步:在我的機器上用FTP連接本機的8888端口,現在已經連上對方的機器了,看到Movie沒有,嘿嘿,快點去下載吧!

  可是,人家看到的怎麼是127.0.0.1而不是192.168.1.231的地址?因為我現在是連接本機的8888端口,防火牆肯定不會有反應,因為我沒往外發包,當然局域網的防火牆不知道了。現在連接上本機的8888端口以後,FTP的數據包不管是控制信息還是數據信息,都被htc偽裝成HTTP數據包然後發過去,在防火牆看來,這都是正常數據,相當於欺騙了防火牆。

  需要說明的是,這一招的使用需要其他機器的配合,就是說要在他的機器上啟動一個hts,把他所提供的服務,如FTP等重定向到防火牆所允許的80端口上,這樣才可以成功繞過防火牆!肯定有人會問,如果對方的機器上本身就有WWW服務,也就是說他的80端口在偵聽,這麼做會不會衝突?HTTPTunnel的優點就在於,即使他的機器以前80端口開著,現在這麼用也不會出現什麼問題,正常的Web訪問仍然走老路子,重定向的隧道服務也暢通無阻!而且這種方法有人用鼎鼎大名的入侵檢測系統Snort來檢測,居然沒有發現,隱蔽xx很強。
  
  不過還有最後一點需要提醒,那就是所有這些招數實際上是利用防火牆配置和系統安全管理上的漏洞,如果碰到一個死心眼的網管,一天到晚在網關那裡蹲著,看看有那些漏洞沒有添好,或者更牛的用TCPDump來抓包分析,一個數據包一個數據包分析,那只能歇菜了
HK不是從真正意義上的去黑,而是挑戰自己,挑戰困難,堅毅,執著,智慧......




文章來源:http://www.phate.tw/Tiger/


arrow
arrow
    全站熱搜

    專案開發ㄚ清 發表在 痞客邦 留言(0) 人氣()