## 17.1 什么是代理服務器 (Proxy)
代理服務器 (Proxy) 的原理其實很簡單啦!就是以類似代理人的身份去取得用戶所需要的數據就是了! 但是由于它的『代理』能力,使得我們可以透過代理服務器來達成防火墻功能與用戶瀏覽數據的分析! 此外,也可以藉由代理服務器來達成節省帶寬的目的,以及加快內部網絡對因特網的 WWW 訪問速度!總之, 代理服務器對于企業來說,實在是一個很不錯的東西啊!
* * *
### 17.1.1 什么是代理服務器
在真實世界中,我們或許會幫忙家人去辦理一些雜務吧!舉個例子來說,例如繳費或者是申辦提款卡等等的, 由于你并不是『申請者本人』而是『代理人』的角色,因此有時候會需要秀出一些證件就是了。 那么在網絡上面的代理服務器 (Proxy Server) 是怎么回事呢?它最主要的功能就如同我們上面提的真實世界一樣, 當客戶端有因特網的數據要求時,Proxy 會幫用戶去向目的地取得用戶所需要的數據。 所以,當客戶端指定 WWW 的代理服務器之后,用戶的所有 WWW 相關要求就會通過代理服務器去捉取啰! 整個代理服務器與客戶端的相關性可以由下圖約略看出一個端倪:

圖 17.1-1、代理服務器、客戶端與因特網的相關性示意圖
一般來說,代理服務器會架設在整個區網的單點對外防火墻上頭,而在區網內部的計算機就都是透過 Proxy 來向因特網要求數據的,這就是所謂的『代理服務器』啦!當然,上面的架構僅只是一個案例,但是這個架構比較多人用的原因, 是因為這樣的 Proxy server 還可以兼做高階防火墻之用啦!
在 Proxy 與客戶端的相關性當中,你必需要了解的是:客戶端向外部要求的資料事實上都是 Proxy 幫用戶取得的,因此因特網上面看到要求數據者,將會是 Proxy 服務器的 IP 而不是客戶端的 IP。 舉個例子來說,假如鳥哥在我的瀏覽器設定了我們學校的代理服務器主機 proxy.ksu.edu.tw 做為我的 Proxy 好了,再假設我的 IP 是 120.114.141.51 ,那么當我想要取得 Yahoo 的新聞信息時,事實上,都是 proxy.ksu.edu.tw 幫我去取得的,所以在 Yahoo 的網站上面看到要求數據的人是誰呢?呵呵!當然就是 proxy.ksu.edu.tw 而不是 120.114.141.51 啰!這樣可以了解 Proxy 的功能了嗎?
除了這個功能之外,Proxy 還有一個很棒的額外功能,那就是防火墻的功能! 看一下上面的圖示,你可以發現一件事情,那就是客戶端的個人計算機要連上因特網一定要經過 Proxy 服務器。并且,如果有人想要入侵你的系統時,由于你的 proxy 在最外部啊,所以攻擊者就會攻擊錯方向,如此一來,不就比較安全! 此外,由于整個因特網對外都是經過 proxy ,也就是『單點對外』的情況,這種狀態底下要來管理防火墻也是比較簡單的喔!^_^
* * *
### 17.1.2 代理服務器的運作流程
了解了 Proxy 的功能之后,我們來談一談那么 Proxy 到底是怎樣運作的呢?為何它會有『加快網絡存取效率』的好處? 這就必需要以底下的圖示來說明了!

圖 17.1-2、代理服務器的運作流程圖:快取數據與客戶端
當客戶端指定了代理服務器之后,在客戶端想要取得因特網上面的信息時,它是這樣取得數據的 (注:那個 Cache 表示為 Proxy 服務器的硬盤的意思):
* 當 Proxy 的快取擁有用戶所想要的數據時 (Step a ~ d):
1. Client 端向 Server 端發送一個數據需求封包;
2. Server 端接收之后,先比對這個封包的『來源』與預計要前往的『目標』網站是否為可接受? 如果來源與目標都是合法的,或者說,來源與目標網站我們的 Proxy 都能幫忙取得資料時,那么 Server 端會開始替 Client 取得資料。這個步驟中比較重要的就是『比對政策』啦,有點像是認證的感覺啦;
3. Server 首先會檢查自己快取 (新的數據可能在內存中,較舊的數據則放置在硬盤上) 數據, 如果有 Client 所需的數據,那就將數據準備取出,而不經過向 Internet 要求數據的程序;
4. 最后當然就是將數據回傳給 Client 端啰!
* 當 Proxy 的快取沒有用戶所想要的數據時 (Step 1 ~ 5):
1. Client 端向 Server 端發送一個數據需求封包;
2. Server 端接收之后,開始進行政策比對;
3. Server 發現快取并沒有 Client 所需要的資料,準備前往因特網抓取數據;
4. Server 開始向 Internet 發送要求與取得相關資料;
5. 最后當然就是將數據回傳給 Client 端啰!
* * *
上面的流程分析里面,我們可以清楚的知道,當 Proxy 曾經幫某位用戶取得過 A 數據后,當后來的用戶想要重復取得 A 數據時,那么 Proxy 就會從自己的快取里面將 A 數據取出傳送給用戶,而不用跑到因特網去取得同樣的這份資料喔。因為沒有去因特網找數據,當步驟 4 的流程很花時間時,那么透過 Proxy 忽略步驟 4 ,感覺上就好像網絡速度變快了!但其實只是直接從 Proxy 的快取里面抓而已 (所以才會有人說『假象網絡加速』的功能)!這就是兩個流程最大的差異了。
在目前的因特網社會里,由于寬帶技術已經很成熟,所以在不亂用的情況下,網絡帶寬理論上是足夠的 (除非要連到國外去)。 那么用了 Proxy 之后效能會不會更提升呢?答案是,『應該不會』!啥?怎么會這樣呢?從上面的流程分析中, 我們發現 Proxy 會常常去讀取硬盤內的數據,而硬盤內的快取數據又是透過某些特殊方式在管理, 因此要找到該份數據就要花一些時間,再加上如果硬件效能 (硬盤或主板芯片組) 不佳時,那么加了 Proxy 反而會讓你感覺網絡傳輸怎么『卡卡的』呦!這點得要特別注意才行!
**Tips:** Proxy 對于 cache 的速度是很要求的,而這個 cache 就是硬盤啦!當然,硬盤容量必需要足夠大,而且還要『足夠快』才行! 因為由上面的流程當中,我們不難發現,cache 是一直被重復存取的一個地方喔!所以硬盤的好壞就差別很大啦!可以說他是影響一個 Proxy 效能好壞的關鍵點呢!

* * *
### 17.1.3 上層代理服務器
想一想,既然 Proxy 是幫忙客戶端進行網頁代理的工作,那么我們的 Proxy 能不能也指定另外一臺 Proxy 當成我的 Proxy 的 Proxy 呢?很繞口吧!其實流程像底下這樣啦:

圖 17.1-3、上層代理服務器示意圖
就是我們的 Local proxy 并不會主動的去捉數據,而是再透過『上層代理服務器』向 Internet 要求資料!這樣有什么好處呢?由于可做為我們的上層代理服務器的主機通常是具有較高帶寬的, 因此我們透過它去要求數據當然『理論上』速度會更快喔!而上層代理服務器最大的好處其實是在于『分流』喔! 例如下圖所示:

圖 17.1-4、以多部上層代理服務器達到分流的效果示意圖
我總共設定了三部上層代理服務器,由于這三個代理服務器對外的速度都不相同,所以,當我要去美國時,就以 Proxy1 來要求資料,要連歐洲就以 Proxy3 ,至于要連日本,就以 Proxy 2 來要求我所需要的數據,如此一來,呵呵!可以讓我的 Proxy 達到最佳的效能喔!很不錯吧!此外,為了節省上層 proxy 的負擔,如果是其他網絡位置,我們則設定由自己的 local proxy 捉取~ 設定的彈性很高呢!
由于代理服務器需要管控信任的來源端客戶端計算機,因此各 ISP 僅能針對自家的用戶來開放 Proxy 使用權而已。 臺灣常見的幾家 ISP 提供的 Proxy 有:
* Hinet: [http://service.hinet.net/2004/new_adsl04.htm](http://service.hinet.net/2004/new_adsl04.htm)
* SeedNet: [https://service.seed.net.tw/home/setting/server.htm](https://service.seed.net.tw/home/setting/server.htm)
由于當用戶透過 Proxy 連到因特網時,網絡看到的是 Proxy 在抓取數據而不是該客戶端,因此,我們不難發現 Proxy 有可能會被客戶端過度的濫用,同時也有可能會被拿來為非作歹啊!所以,目前絕大部分的 Proxy 已經『停止對外開放』了,僅針對自己的網域內的用戶提供本項服務而已~
因此,如果你要自行設定 Proxy 的時候,請記得去你當初申請網絡的 ISP (如果是學術單位,請到貴單位的計中網頁瞧瞧即可) 搜尋一下,才能比較有效的設定好你的服務器喔!因為設定錯誤的話,呵呵!上層 Proxy 根本不提供服務,或者是上層 Proxy 的效能并不好,那個時候你的 Proxy 也會連帶的受到很大的影響啊!慎選!慎選!
* * *
### 17.1.4 代理服務器與 NAT 服務器的差異
或許你已經發現了一件事,那就是:在內部局域網絡使用私有 IP 的客戶端,不論透過 Proxy 或者 NAT 均可以直接取得 WWW 的服務,那么 NAT 與 Proxy 有沒有什么不同的地方啊?它們不都是可以讓內部的計算機連接出去嗎?其實這兩個玩意兒差異性是『相當大』的喔! 簡單說明如下:
* NAT 服務器的功能:
就如同[第九章](http://linux.vbird.org/linux_server/0250simple_firewall.php)提到的數據,Linux 的 NAT 功能主要透過封包過濾的方式, 并使用 iptables 的 nat 表格進行 IP 偽裝 (SNAT) ,讓客戶端自行前往因特網上的任何地方的一種方式。主要的運作行為是在 OSI 七層協定的二、三、四層。由于是透過封包過濾與偽裝,因此客戶端可以使用的端口號碼 (第四層) 較彈性;
* Proxy 服務器的功能:
主要透過 Proxy 的服務程序 (daemon) 提供網絡代理的任務,因此 Proxy 能不能進行某些工作,與該服務的程序功能有關。 舉例來說,如果你的 Proxy 并沒有提供郵件或 FTP 代理,那么你的客戶端就是無法透過 Proxy 去取得這些網絡資源。 主要運作的行為在 OSI 七層協議的應用層部分 (所謂的比較"高階"之意)。
這樣說有沒有比較有點概念了呢?NAT 服務器是由較底層的網絡去進行分析的工作,至于通過 NAT 的封包是干嘛用的, NAT 不去管他!至于 proxy 則主要是由一個 daemon 的功能達成的,所以必需要符合該 daemon 的需求,才能達到某些功能!
* * *
### 17.1.5 架設代理服務器的用途與優缺點
現在我們約略知道 Proxy 的功能了,那么通常什么情況下會架設 Proxy 呢?一般來說,代理服務器的功能主要有:
* 作為 WWW 的網頁資料取得代理人:這是最主要的功能嘛!
* 作為內部區網的單點對外防火墻系統:如[圖 17.1-1](#fig17.1-1) 所示一般,如果你的 Proxy 是放在內部區網的 Gateway 上頭,那么這部代理服務器就能夠作為內部計算機的防火墻了!而且還不需要設定那復雜的 NAT 功能呢!只是單純的 Proxy 服務器通常僅提供 WWW 的代理,因此內部計算機想要取得 smtp, ftp...就比較麻煩~
由于 Proxy 的這種特性,讓他很常被使用于大型的企業內部,因為可以達到杜絕內部人員上班時使用非 WWW 以外的網絡服務,而且還可以監測用戶的資料要求流向與流量呢!很不錯吧! ^_^!好了,接下來我們來談一談當你架設了 Proxy 后的優缺點吧。先來談談主要可能具有的優點有:
* 節省單點對外的網絡帶寬,降低網絡負載:當你的 Proxy 用戶很多時,那么 Proxy 內部的快取數據將會累積較多。因此客戶端想要取得網絡上的數據時,很多將會從 Proxy 的快取中取得,而不用向因特網要求資料。 所以可以節省帶寬啊!
* 以較短的路徑取得網絡數據,有網絡加速的感覺:例如你可以指定你的 ISP 提供的代理服務器連接到國外,由于 ISP 提供的 Proxy 通常具有較大的對外帶寬,因此在對國外網站的數據取得上, 通常會比你自己的主機聯機到國外要快的多。此外,與上一點的快取數據也有關系啊!從內部硬盤取得的路徑總比對外的因特網要短的多啊!
* 透過上層代理服務器的輔助,達到自動數據分流的效果:例如[圖 17.1-4](#fig17.1-4) 所示,讓客戶端在不知不覺之間,就可以得到數據由不同 Proxy 取得的加速效果!
* 提供防火墻內部的計算機連上 Internet:就是上面提到的單點對外防火墻功能!
由于代理服務器的這些優點,因此這里要強烈的建議,如果你需要連上國外的網頁, 請一定使用 ISP 提供給你的代理服務器來幫忙,因為不但可以節省帶寬,并且速度上會快上很多很多 (例如美國環保署, EPA 網站)。 不過,有利就有弊,當然 Proxy 也不是萬能的天神~他有什么可能潛藏的缺點呢?
* 容易被內部區網的人員濫用:我們知道因特網上看到取得資料的人是 Proxy 那部主機而不是客戶端計算機的 IP,因此可能會讓某些內部網絡使用人員開始利用你的 proxy 干壞事,此時你就會很麻煩~ 所以,為了杜絕這個狀況,強烈的建議多加登錄檔案分析的軟件,在管理上面會輕松很多喔!
* 需要較高超的設定技巧與除錯程序:在鳥哥設定過的服務器當中, Proxy 算是比較不容易設定好『效能』的一個服務器了!由于 Proxy 的 Cache 與他的『上層代理服務器』的關系是很緊密的, 萬一設定錯誤的話,很有可能反而讓你的 Proxy 拖垮客戶端 WWW 的瀏覽速度!最嚴重的是造成無法聯機!
* 可能會取得舊的錯誤數據:這個最容易發生了!由于曾經瀏覽過的網頁會被放置到快取, 并提供后續用戶的直接取得。萬一因特網上面的那個網頁數據更新過呢?那時你會發現,怎么客戶端無法看到更新后的資料? 就是因為快取的問題啊!取得舊數據的頻率可能會很高啊!
總之, Proxy 的優點是很多的,但是缺點卻需要網管人員的操心啊!既然如此,那么我們到底有沒有需要架設代理服務器呢? 簡單的說,我們可以這樣分析!
* 我的 Client 端用戶不少,而且大部分僅需要 WWW 這個網絡服務而已;
* 我的 Proxy 還兼做防火墻的任務;
* 我的 Client 端常常需要聯機到傳輸速度很慢的網站,例如國外的網站;
* 我的 Client 端常常瀏覽的網站是『靜態』網站,而不是動態網站 (例如討論區的 PHP)。
如果你有上述的環境狀況,那么是可以考慮架設 Proxy 的,但是,相反的來說,要是 (1)我的 Client 端很少,所以每次連上 WWW 都是求取新的資料 (并沒有用到快取),有沒有 Proxy 反而看不出效益~此外,(2)Proxy 由于屬于應用層了,對于 Internet 的規劃上彈性較不足!不像 NAT 服務器可以進行很多的功能!(3)我常常上的網站是類似討論區那種一日多變的網站, 在這樣的情況下,實在是沒有必要架設 Proxy 的!
但是,如果對于學校單位那原本帶寬就不足的環境中,架設 Proxy 來讓校內的網絡速度提升,呵呵!就是有那個必要性的啦!所以要不要架設 Proxy 呢?請好好的依據你的環境來考慮喔!但無論如何,我們還是要教大家怎么架設它就是了 ^_^
* * *
- 鳥哥的Linux私房菜:服務器架設篇 第三版
- 第一部份:架站前的進修專區
- 作者序
- 第一章、架設服務器前的準備工作
- 1.1 前言: Linux 有啥功能
- 1.2 基本架設服務器流程
- 1.3 自我評估是否已經具有架站的能力
- 1.4 本章習題
- 第二章、基礎網絡概念
- 2.1 網絡是個什么玩意兒
- 2.2 TCP/IP 的鏈結層相關協議
- 2.3 TCP/IP 的網絡層相關封包與數據
- 2.4 TCP/IP 的傳輸層相關封包與數據
- 2.5 連上 Internet 前的準備事項
- 2.6 重點回顧:
- 2.7 本章習題
- 2.8 參考數據與延伸閱讀
- 第三章、局域網絡架構簡介
- 3.1 局域網絡的聯機
- 3.2 本書使用的內部聯機網絡參數與通訊協議
- 第四章、連上 Internet
- 4.1 Linux 連上 Internet 前的注意事項
- 4.2 連上 Internet 的設定方法
- 4.3 無線網絡--以筆記本電腦為例
- 4.4 常見問題說明
- 4.5 重點回顧
- 4.6 本章習題
- 4.7 參考數據與延伸閱讀
- 第五章、 Linux 常用網絡指令
- 5.1 網絡參數設定使用的指令
- 5.2 網絡偵錯與觀察指令
- 5.3 遠程聯機指令與實時通訊軟件
- 5.4 文字接口網頁瀏覽
- 5.5 封包擷取功能
- 5.6 重點回顧
- 5.7 本章習題
- 5.8 參考數據與延伸閱讀
- 第六章、 Linux 網絡偵錯
- 6.1 無法聯機原因分析
- 6.2 處理流程
- 6.3 本章習題
- 6.4 參考數據與延伸閱讀
- 第二部分:主機的簡易資安防護措施
- 第七章、網絡安全與主機基本防護:限制端口, 網絡升級與 SELinux
- 7.1 網絡封包聯機進入主機的流程
- 7.2 網絡自動升級軟件
- 7.3 限制聯機埠口 (port)
- 7.4 SELinux 管理原則
- 7.5 被攻擊后的主機修復工作
- 7.6 重點回顧
- 7.7 課后練習
- 7.8 參考數據與延伸閱讀
- 第八章、路由觀念與路由器設定
- 8.1 路由
- 8.2 路由器架設
- 8.3 動態路由器架設:quagga (zebra + ripd)
- 8.4 特殊狀況:路由器兩邊界面是同一個 IP 網段: ARP Proxy
- 8.5 重點回顧
- 8.6 本章習題
- 8.7 參考數據與延伸閱讀
- 第九章、防火墻與 NAT 服務器
- 9.1 認識防火墻
- 9.2 TCP Wrappers
- 9.3 Linux 的封包過濾軟件:iptables
- 9.4 單機防火墻的一個實例
- 9.5 NAT 服務器的設定
- 9.6 重點回顧
- 9.7 本章習題
- 9.8 參考數據與延伸閱讀
- 第十章、申請合法的主機名
- 10.1 為何需要主機名
- 10.2 注冊一個合法的主機名
- 10.3 重點回顧
- 10.4 本章習題
- 10.5 參考數據與延伸閱讀
- 第三部分:局域網絡內常見的服務器架設
- 第十一章、遠程聯機服務器SSH / XDMCP / VNC / RDP
- 11.1 遠程聯機服務器
- 11.2 文字接口聯機服務器: SSH 服務器
- 11.3 最原始圖形接口: Xdmcp 服務的啟用
- 11.4 華麗的圖形接口: VNC 服務器
- 11.5 仿真的遠程桌面系統: XRDP 服務器
- 11.6 SSH 服務器的進階應用
- 11.7 重點回顧
- 11.8 本章習題
- 11.9 參考數據與延伸閱讀
- 第十二章、網絡參數控管者: DHCP 服務器
- 12.1 DHCP 運作的原理
- 12.2 DHCP 服務器端的設定
- 12.3 DHCP 客戶端的設定
- 12.4 DHCP 服務器端進階觀察與使用
- 12.5 重點回顧
- 12.6 本章習題
- 12.7 參考數據與延伸閱讀
- 第十三章、文件服務器之一:NFS 服務器
- 13.1 NFS 的由來與其功能
- 13.2 NFS Server 端的設定
- 13.3 NFS 客戶端的設定
- 13.4 案例演練
- 13.5 重點回顧
- 13.6 本章習題
- 13.7 參考數據與延伸閱讀
- 第十四章、賬號控管: NIS 服務器
- 14.1 NIS 的由來與功能
- 14.2 NIS Server 端的設定
- 14.3 NIS Client 端的設定
- 14.4 NIS 搭配 NFS 的設定在叢集計算機上的應用
- 14.5 重點回顧
- 14.6 本章習題
- 14.7 參考數據與延伸閱讀
- 第十五章、時間服務器: NTP 服務器
- 15.1 關于時區與網絡校時的通訊協議
- 15.2 NTP 服務器的安裝與設定
- 15.3 客戶端的時間更新方式
- 15.4 重點回顧
- 15.5 本章習題
- 15.6 參考數據與延伸閱讀
- 第十六章、文件服務器之二: SAMBA 服務器
- 16.1 什么是 SAMBA
- 16.2 SAMBA 服務器的基礎設定
- 16.3 Samba 客戶端軟件功能
- 16.4 以 PDC 服務器提供賬號管理
- 16.5 服務器簡單維護與管理
- 16.6 重點回顧
- 16.7 本章習題
- 16.8 參考數據與延伸閱讀
- 第十七章、區網控制者: Proxy 服務器
- 17.1 什么是代理服務器 (Proxy)
- 17.2 Proxy 服務器的基礎設定
- 17.3 客戶端的使用與測試
- 17.4 服務器的其他應用設定
- 17.5 重點回顧
- 17.6 本章習題
- 17.7 參考數據與延伸閱讀
- 第十八章、網絡驅動器裝置: iSCSI 服務器
- 18.1 網絡文件系統還是網絡驅動器
- 18.2 iSCSI target 的設定
- 18.3 iSCSI initiator 的設定
- 18.4 重點回顧
- 18.5 本章習題
- 18.6 參考數據與延伸閱讀
- 第四部分:常見因特網服務器架設
- 第十九章、主機名控制者: DNS 服務器
- 19.1 什么是 DNS
- 19.2 Client 端的設定
- 19.3 DNS 服務器的軟件、種類與 cache only DNS 服務器設定
- 19.4 DNS 服務器的詳細設定
- 19.5 協同工作的 DNS: Slave DNS 及子域授權設定
- 19.6 DNS 服務器的進階設定
- 19.7 重點回顧
- 19.8 本章習題
- 19.9 參考數據與延伸閱讀
- 第二十章、WWW 伺服器
- 20.1 WWW 的簡史、資源以及伺服器軟體
- 20.2 WWW (LAMP) 伺服器基本設定
- 20.3 Apache 伺服器的進階設定
- 20.4 登錄檔分析以及 PHP 強化模組
- 20.5 建立連線加密網站 (https) 及防砍站腳本
- 20.6 重點回顧
- 20.7 本章習題
- 20.8 參考資料與延伸閱讀
- 第二十一章、文件服務器之三: FTP 服務器
- 21.1 FTP 的數據鏈路原理
- 21.2 vsftpd 服務器基礎設定
- 21.3 客戶端的圖形接口 FTP 聯機軟件
- 21.4 讓 vsftpd 增加 SSL 的加密功能
- 21.5 重點回顧
- 21.6 本章習題
- 21.7 參考數據與延伸閱讀
- 第二十二章、郵件服務器: Postfix
- 22.1 郵件服務器的功能與運作原理
- 22.2 MTA 服務器: Postfix 基礎設定
- 22.3 MRA 服務器: dovecot 設定
- 22.4 MUA 軟件:客戶端的收發信軟件
- 22.5 郵件服務器的進階設定
- 22.6 重點回顧
- 22.7 本章習題
- 22.8 參考數據與延伸閱讀