輕輕鬆鬆穿透防火牆(轉)

post0發表於2007-08-11
輕輕鬆鬆穿透防火牆(轉)[@more@]

如今採用區域網方式接入Internet已經是各個公司、高校和政府機關的主要上網方式,這種方式既節省IP地址,又方便管理和控制。通常網管會在區域網的出口處設定各種防火牆,這樣一方面保證了區域網內部的安全xx,另一方面又可以控制區域網內部人員的訪問許可權。可這樣也限制了使用者的使用許可權,與外界的聯絡也很不方便。比方說對於在公司裡上班的上班一族和區域網裡的窮學生來說,最痛恨的事情莫過於可恨的Boss為了防止大家偷懶而關閉了大多數埠,只允許使用有限的服務,如WWW、POP3、SMTP等。這樣就用不成很多工具,如QQ、Cterm、FTP等,你和外界的聯絡會很不方便,有MM而不能聊、有BBS而不能灌、有精彩的歌曲而不能Down,人世間最大的痛苦莫過於此……怎麼辦?別急別急,本文教你幾招,輕輕鬆鬆穿透防火牆,盡情使用各種工具!好,下面我們一起來看這幾招的原理解說和實戰說明。

  

名次解釋:

 協議

  協議(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代理地址和埠號(如圖1),還可以點測試看看這個SOCKS5代理可用否。確定後,你的QQ就是透過61.136.132.138:1080這個SOCKS5代理上線的,你所有的資料包現在都是發給這個代理伺服器,然後再轉發出去,這樣就可以繞過UDP4000的埠,穿過了防火牆的牢籠。我們還可以用另外一個可以看IP的QQ看看現在你 QQ所在的IP(如圖2),顯示的IP是61.136.132.138。這樣還有一個附加功能,就是隱藏了你的真實IP,與陌生人聊天時不用隱身了,他看到的IP也是SOCKS代理伺服器的IP地址。

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

  在AbsoluteFTP的選項設定中選中全域性配置中的防火牆(圖4),然後就可以選擇是採用SOCKS4還是SOCKS5代理、是否需要身份認證等,然後填入SOCKS代理伺服器和埠以及身份認證所需要的使用者名稱和口令,這樣就能穿過防火牆使用FTP了。

  

第二招:Socks2HTTP配合SocksCap32

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

 1.防火牆關閉了SOCKS埠,但你要用的軟體支援SOCKS代理

  這種情形下可以直接用Socks2HTTP來搞定。Socks2HTTP()是一個代理...我們用 “netstatJ–aJ–n”命令來看看本機開放的埠(如圖7),就會發現本機多出個1080埠,這個埠就是HTTP2socks模擬出來的在本機上執行的SOCKS代理伺服器偵聽埠,現在你就擁有一個本地的SOCKS5代理伺服器了。

  接下來我們看看在QQ等支援SOCKS介面的軟體中該如何設定代理伺服器。看下面圖8,直接將SOCKS5伺服器地址添為127.0.0.1,埠為1080,趕快測試一下吧。

  

 2.防火牆關閉了SOCKS埠,並且你想用的軟體不支援SOCKS代理

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

  現在網上已經有了SocksCap的漢化版本(的控制檯。

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

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

  第二步:執行SocksCap,如果是第一次執行,系統會自動提示你是否進入設定介面,如果不是第一次執行,可以選擇SocksCap中的檔案→設定進入設定介面,如圖10。

  第三步:在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問題,網上找到的代理肯定不是很穩定,很多時候容易產生?G包、服務中斷的情況。其實我們並不是非要透過代理中轉,比方說你哥們在宿舍開了 FTP,然後他把精彩的電影放上去,你要看,可是你所在的區域網網管關閉了21的FTP埠,這樣你就沒法Down了,怎麼辦?用HTTPTunnel, Tunnel這個英文單詞的意思是隧道,通常HTTPTunnel被稱之為HTTP暗道,它的原理就是將資料偽裝成HTTP的資料形式來穿過防火牆,實際上是在HTTP請求中建立了一個雙向的虛擬資料連線來穿透防火牆。說得簡單點,就是說在防火牆兩邊都設立一個轉換程式,將原來需要傳送或接受的資料包封裝成HTTP請求的格式騙過防火牆,所以它不需要別的代理伺服器而直接穿透防火牆。HTTPTunnel剛開始時只有Unix版本,現在已經有人把它移植到 Window平臺上了,它包括兩個程式,htc和hts,其中htc是客戶端,而hts是伺服器端,我們現在來看看我是如何用它們的。比如開了FTP的機器的IP是192.168.1.231,我本地的機器的IP是192.168.1.226,現在我本地因為防火牆的原因無法連線到FTP上,現在用 HTTPTunnel的過程如下:

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

  然後我們用Netstat看一下本機現在開放的埠,發現8888埠已在偵聽(如圖14)。

  第二步:在對方機器上啟動HTTPTunnel的伺服器端,並執行命令“htsJ-fJlocalhost:21J80”,這個命令的意思是說把本機 21埠發出去的資料全部透過80埠中轉一下,並且開放80埠作為偵聽埠,再用Neststat看一下他的機器,就會發現80埠現在也在偵聽狀態(如圖15)。

  

  第三步:在我的機器上用FTP連線本機的8888埠(圖16),現在已經連上對方的機器了,看到Movie沒有(圖17),嘿嘿,快點去下載吧!

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

  需要說明的是,這一招的使用需要其他機器的配合,就是說要在他的機器上啟動一個hts,把他所提供的服務,如FTP等重定向到防火牆所允許的80埠上,這樣才可以成功繞過防火牆!肯定有人會問,如果對方的機器上本身就有WWW服務,也就是說他的80埠在偵聽,這麼做會不會衝突?HTTPTunnel的優點就在於,即使他的機器以前80埠開著,現在這麼用也不會出現什麼問題,正常的Web訪問仍然走老路子,重定向的隧道服務也暢通無阻!而且這種方法有人用鼎鼎大名的入侵檢測系統Snort來檢測,居然沒有發現,隱蔽xx很強。

  

  不過還有最後一點需要提醒,那就是所有這些招數實際上是利用防火牆配置和系統安全管理上的漏洞,如果碰到一個死心眼的網管,一天到晚在閘道器那裡蹲著,看看有那些漏洞沒有添好,或者更牛的用TCPDump來抓包分析,一個資料包一個資料包分析,那隻能歇菜了

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

文章型別:轉載 提交:沙加II 核查:NetDemon


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-945603/,如需轉載,請註明出處,否則將追究法律責任。

相關文章