Squid是一個緩存Internet數據的一個軟件,其接收用戶的下載申請,并自動處理所下載的數據。當一個用戶想要下載一個主頁時,可以向Squid發出一個申請,要Squid代替其進行下載,然后Squid連接所申請網站并請求該主頁,接著把該主頁傳給用戶同時保留一個備份,當別的用戶申請同樣的頁面時,Squid把保存的備份立即傳給用戶,使用戶覺得速度相當快。目前,Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS協議,暫不能代理POP3、NNTP等協議。并且,Squid可以自動地進行處理,可以根據自己的需要設置Squid,使之過濾掉不想要的東西。Squid可以工作在很多的操作系統中,如AIX、Digital、UNIX、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。
Squid安裝的例子很多了,本文不講述,本文著重介紹2個Linux下Squid代理服務高級應用的例子。
1、配置帶認證的代理服務
默認時,Squid本身不帶任何認證程序,但是可以通過外部認證程序來實現用戶認證。一般有以下的認證程序:LDAP認證、SMB認證、基于mysql的認證、基于sock5的密碼認證和基于Radius的認證。下面介紹常用的ncsa實現的認證,ncsa是Squid源代碼包自帶的認證程序之一,從squid 2.5開始都包含了ncsa的模塊。在Red Hat Enterprise Linux 5的/usr/lib/squid目錄下可以找到ncsa_auth文件。
要使用該認證服務,首先需要創建認證用戶和密碼:
#htpasswd -c /usr/local/squid/etc/ps_file guest
如果是以后添加用戶的話就把-c的參數去掉。
然后,再更改/etc/squid/squid.conf主配置文件,添加如下:
//配置認證文件和用戶文件 auth_param basic program /usr/lib/squid/ncsa_auth /usr/local/squid/etc/ ps_file //指定認證程序的進程數 auth_param basic children 5 //代理服務器的名稱 auth_param basic realm Squid proxy-caching web server //認證有效時間為2小時 auth_param basic credentialsttl 2 hours //只有認證用戶才能訪問 acl normal proxy_auth REQUIRED http_Access allow normal
最后,重啟squid服務即可。在瀏覽器里配上這個代理,打開任意網站,如果彈出了輸入用戶名和密碼的對話框,就證明配置成功了。
2、配置反向代理服務器
反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的連接請求,然后將請求轉發給內部網絡上的服務器,并將從服務器上得到的結果返回給internet上請求連接的客戶端,此時代理服務器對外就表現為一個服務器。
通常的代理服務器,只用于代理內部網絡對Internet的連接請求,客戶機必須指定代理服務器,并將本來要直接發送到Web服務器上的http請求發送到代理服務器中。由于外部網絡上的主機并不會配置并使用這個代理服務器,普通代理服務器也被設計為在Internet上搜尋多個不確定的服務器,而不是針對Internet上多個客戶機的請求訪問某一個固定的服務器,因此普通的Web代理服務器不支持外部對內部網絡的訪問請求。當一個代理服務器能夠代理外部網絡上的主機,訪問內部網絡時,這種代理服務的方式稱為反向代理服務。此時代理服務器對外就表現為一個Web服務器,外部網絡就可以簡單把它當作一個標準的Web服務器而不需要特定的配置。不同之處在于,這個服務器沒有保存任何網頁的真實數據,所有的靜態網頁或者CGI程序,都保存在內部的Web服務器上。因此對反向代理服務器的攻擊并不會使得網頁信息遭到破壞,這樣就增強了Web服務器的安全性。
反向代理方式和包過濾方式或普通代理方式并無沖突,因此可以在防火墻設備中同時使用這兩種方式,其中反向代理用于外部網絡訪問內部網絡時使用,正向代理或包過濾方式用于拒絕其他外部訪問方式并提供內部網絡對外部網絡的訪問能力。因此可以結合這些方式提供最佳的安全訪問方式。
目前有許多反向代理軟件,比較有名的有 Nginx 和 Squid 。其他還包括Socks、Apache、Jigsaw、Delegate等。Nginx 是由 Igor Sysoev 為俄羅斯訪問量第二的 Rambler.ru 站點開發的,是一個高性能的 HTTP 和反向代理服務器,也是一個 IMAP/POP3/SMTP 代理服務器。而Squid也可以用來構建反向代理服務器。
圖1 反向代理服務器工作原理示意圖
Squid作為反向代理服務器使用時,其工作原理為:客戶端請求訪問 WEB 服務時,DNS 將訪問的域名解析為 Squid 反向代理服務器的 IP 地址,這樣客戶端的 URL 請求將被發送到反向代理服務器。如果 Squid 反向代理服務器中緩存了該請求的資源,則將該請求的資源直接返回給客戶端,否則反向代理服務器將向后臺的 WEB 服務器請求資源,然后將請求的應答返回給客戶端,同時也將該應答緩存在本地,供下一個請求者使用。
Squid反向代理一般只緩存可緩沖的數據(比如 html 網頁和圖片等),而一些 CGI 腳本程序或者 ASP、JSP 之類的動態程序默認不緩存。它根據從 WEB 服務器返回的 HTTP 頭標記來緩沖靜態頁面。有四個最重要HTTP頭標記:
- Last-Modified:告訴反向代理頁面什么時間被修改
- Expires:告訴反向代理頁面什么時間應該從緩沖區中刪除
- Cache-Control:告訴反向代理頁面是否應該被緩沖
- Pragma:用來包含實現特定的指令,最常用的是Pragma:no-cache
要配置反向代理服務器,需要在squid的主配置文件里面添加如下內容:
http_port 80 accel vhost vport cache_peer 192.172.1.133 parent 80 0 no-query originserver cache_peer_domain www.test.com 192.172.1.133 acl sites dstdomain www.test.com http_access allow sites http_access deny all cache_dir ufs /var/spool/squid3 100 16 256 cache_mgr yourmail@somesite.com cache_mem 64 MB maximum_object_size_in_memory 1028 KB access_log /var/log/squid3/access.log squid
上述配置的詳細解釋如下:
http_port 80 accel vhost vpor:指定Squid所服務的端口為80,vhost和vport指的是所采用的虛擬主機的方式:基于IP地址和基于端口的,詳細請參見本書對Apache Web服務器的介紹;
cache_peer 192.172.1.133 parent 80 0 no-query originserver:指定真實Web Server的IP地址;
cache_peer_domain www.test.com 192.172.1.133:告訴反向代理服務器,當客戶端有對www.test.com的訪問請求時,需要從真實Web Server 192.172.1.133上取得數據;
acl sites dstdomain www.test.com:定義客戶端能夠通過反向代理服務器訪問的主機;
http_access allow sites、http_access deny all:限制客戶端通過反向代理服務器能夠訪問的范圍;
cache_dir ufs /var/spool/squid3 100 16 256、cache_mgr yourmail@somesite.com、cache_mem 64 MB、maximum_object_size_in_memory 1028 KB、access_log /var/log/squid3/access.log squid:代理服務器的常規配置。
作者介紹:李洋,博士畢業于中科院計算所。10多年來一直從事計算機網絡信息安全研發工作,曾主持和參與多項國家重點項目以及信息安全系統和企業信息安全系統的研發工作。具有Linux系統應用、管理、安全及內核的研發經驗,擅長網絡安全技術、協議分析、Linux系統安全技術、Linux系統及網絡管理、Linux內核開發等。
原文鏈接:http://os.51cto.com/art/201102/245290.htm