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