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