網絡訪問攻防戰之代理服務器篇

  在上一篇《網絡訪問攻防戰》中說到,在很多大型企業中和有些國家中,為了限制員工或人民訪問某些網站或使用某些網絡應用程序,通常做了一些訪問限制。限制的方法通常有路由器IP過濾和強制使用代理服務器等幾種方式。那麼,本篇主要講述使用代理服務器進行網絡訪問時的攻防戰。

  通過代理服務器進行網絡訪問的很多情況,和直接訪問網絡的情況十分相似。代理服務器能做到不使用代理服務器的所有過濾方式,這些過濾方式在上一篇中已經有了詳細地說明,唯一的區別是網絡訪問的攻防全部在代理服務器上進行。也就是說,如果你希望應用直接訪問網絡的訪問攻防技術到代理服務器中,那麼首先必須使瀏覽器或網絡應用程序設置了代理服務器。

  然而,尋找訪問外網的代理服務器地址又是一門學問。有些網絡環境是在瀏覽器中直接設置了代理服務器的地址和端口,這樣獲得其地址十分容易;而有些網絡環境使用了“自動代理配置腳本”的功能,以達到訪問不同的網絡使用不同的代理服務器的功能,其中著名的AutoProxy插件也使用了這種技術;甚至有些網絡環境使用了“自動檢測網絡代理設置”的功能,以達到計算機在不同的網絡環境中都能自動配置代理的功能。不過,在後兩種設置的網絡環境中尋找訪問外網的代理服務器地址就需要了解這些技術了,具體可以參考Proxy auto-configWeb Proxy Autodiscovery Protocol。如果不熟悉這些技術,也可以通過netstat工具或者sniffer工具找出訪問外網的代理服務器地址。這些技術和工具不在本篇中展開討論。

  如果你順利找到了代理服務器的地址,那麼接下來我們就可以分析一下代理服務器究竟可以做哪些限制,以及如何突破這些限制的方法了。

  我們略過上一篇中已經詳細說明的直接訪問網絡情況下的攻防,來看看代理服務器還能進一步做哪些過濾。在此列舉一下通常情況下會碰到的過濾方式:

  1、域名過濾。在使用代理服務器訪問網絡時,會遇到某個域名下的所有網頁都是訪問被拒絕的情況,這就是域名過濾。然而,通常情況下代理服務器對於域名的過濾只是通過分析訪問地址中的域名進行的過濾,而不是通過HTTP代理協議中的Host字段進行的過濾。那麼我們可以通過把訪問地址中的域名換成域名對應的IP地址,來解決這個問題。

  2、IP地址過濾。在訪問網絡時,有時候訪問某個IP地址下面的網頁會出現全部拒絕訪問的情況。和域名過濾一樣,這種過濾方式很多情況下也只是對訪問地址中的IP進行過濾,那麼我們可以把IP地址換成對應的域名解決問題。如果這個IP地址沒有域名或者暫時找不到其對應的域名,也可以為這個IP註冊一個免費的二級域名,之後就可以把IP換域名了。

  3、 端口過濾。由於瀏覽網頁使用的是HTTP和HTTPS協議,這兩個協議使用的默認端口分別是80和443,那麼為了防止人們使用其他協議,很多時候代理服務器也會限制訪問的外部端口只能是80和443 。碰到這種過濾方式,只能使用支持代理服務器級聯的軟件訪問其他端口了。但由於HTTP協議是明文傳輸的,所以也有很多代理服務器不對HTTP協議的端口進行過濾,只對HTTPS協議的端口限制為443。如果需要使用其他協議,而其它協議使用的端口正好是443,那麼我們正好可以利用HTTPS的密文傳輸特性,連接到目標服務器的443端口,代理服務器無法知道我們使用的是HTTPS協議還是其它協議。如果不碰巧,其它協議使用的端口不是443,那麼我們仍舊需要使用支持代理服務器級聯的軟件訪問其他端口了。

  4、探測HTTPS協議頭。由於HTTPS協議的初始握手過程仍舊是明文的,那麼代理服務器可以檢測連接到外部443端口的協議頭。如果不是HTTPS協議,那麼就斷開連接。碰到這種過濾方式,我們可以先把正常的HTTPS協議頭sniff下來,加入到通訊雙方,之後再進行其它協議的通訊,就可以解決問題。

  5、NTLM密碼認證。有些代理服務器使用了NTLM密碼認證,那麼IE用戶不會感覺到有什麼問題,使用了其它內核的瀏覽器或者其它應用程序時,就會提時輸入訪問代理服務器的口令。由於很多代理級聯軟件並不支持需要經過密碼認證的代理服務器,會造成一定麻煩。可以使用一款名為NTLM Authorization Proxy Server的軟件解決問題。

  6、URL過濾。有時候代理服務器為了防止用戶訪問某一類特定的應用——比如bbs——會過濾URL中帶bbs的所有訪問請求。碰到這種過濾方式,我們也只能使用代理級聯的軟件了。

  上面大致講述了會經常碰到的代理服務器過濾方式。不過由於代理服務器過濾的方式千奇百怪,本文無法羅列所有的過濾方式。而且除了代理級聯軟件有現成的之外,其它解決問題的方式都需要代理服務器使用者自己編寫網絡程序,所以其它方式也主要是供大家進行研究的。

  最後,我給出使用了HTTP協議進行級聯的軟件源代碼(下載),使用方式為java -Dhttp.proxyHost=代理服務器地址-Dhttp.proxyPort=代理服務器端口net.tools.web.TunnelClient 本地代理服務器端口級聯的代理服務器URL,然後就可以使用本地代理服務器進行網絡訪問了。比如我們必須通過代理服務器192.168.0.200:8080進行外部網絡訪問,我們可以運行命令java -Dhttp.proxyHost=192.168.0.200 -Dhttp.proxyPort=8080 net.tools.web.TunnelClient 7890 級聯的代理服務器URL,之後我們把瀏覽器的代理服務器設置為127.0.0.1:7890即可使用。我再給出一個級聯的代理服務器URL為http://jinshan.isysjs.com.cn/tunnel/。此URL只供測試使用,請勿濫用。如果碰到NTLM密碼認證的情況,請參考上述第5種代理服務器的過濾方式。

  如有興趣繼續和我討論有關代理服務器的網絡訪問攻防戰,可以去我經常訪問的論壇(需要使用國外IP進行訪問)找我,或者直接給我發Email

  作者的Twitter: @davidsky2012 ,作者的Google Reader: https://www.google.com/reader/shared/lehui99

特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,文章转自月光博客

Comments are closed.