代理服務(wù)器的功能是代理網(wǎng)絡(luò)用戶取得網(wǎng)絡(luò)信息,它是網(wǎng)絡(luò)信息的中轉(zhuǎn)站。隨著代理服務(wù)器的廣泛使用,隨之而來的是一系列的安全問題。由于沒有對代理服務(wù)器的訪問控制策略作全面細(xì)致的配置,導(dǎo)致用戶可以隨意地通過代理服務(wù)器訪問許多色情、反動的非法站點(diǎn),而這些行為往往又很難追蹤,給管理工作帶來極大的不便。
Squid是Linux下一個緩存Internet數(shù)據(jù)的代理服務(wù)器軟件,其接收用戶的下載申請,并自動處理所下載的數(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可以工作在很多操作系統(tǒng)中,如AIX、Digital、Unix、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。
安裝和配置Squid Server
通常說來,安裝Squid有兩種方法:一是從Red Hat Linux 9中獲取該軟件的RPM包進(jìn)行;二是安裝從Squid的官方站點(diǎn)http://www.squid-cache.org/ 下載該軟件的源碼進(jìn)行編譯后安裝。目前網(wǎng)上最新的穩(wěn)定版本為squid-2.5.STABLE10,下面以此版本為例對兩種安裝方法進(jìn)行介紹。
Squid服務(wù)器工作原理示意圖
1. RPM包的安裝
首先,查看是否已經(jīng)安裝了squid:
#rpm -qa | grep squid
Red Hat Linux9自帶了Squid安裝軟件包,將第一張安裝光盤放入光驅(qū)后掛裝光盤分區(qū):
#mount /mnt/cdrom
然后,進(jìn)入/mnt/cdrom/Red Hat/RPMS目錄:
#cd /mnt/cdrom/Red Hat/RPMS
最后,執(zhí)行安裝:
#rpm -ivh squid-2.5.STABLE1-2.i386.rpm
當(dāng)然,我們也可以在開始安裝系統(tǒng)的過程中安裝該軟件。
2. 源代碼包的安裝
從http://www.squid-cache.org/下載squid軟件的最新源代碼包squid-2.5.STABLE10.tar.gz,然后,按照如下步驟進(jìn)行安裝。
首先,將該文件拷貝到/tmp目錄:
#cp squid-2.5.STABLE10.tar.gz /tmp
然后,解開該文件:
#tar xzvf squid-2.5.STABLE10.tar.gz
解開后,在/tmp生成一個新的目錄squid-2.5.STABLE10,為了方便使用mv命令,將該目錄重命名為squid:
#mv squid-2.5.STABLE10 squid
切換進(jìn)入squid目錄:
#cd squid
接著,執(zhí)行/configure,可以用./configure --prefix=/directory/you/want指定安裝目錄,系統(tǒng)默認(rèn)安裝目錄為/tmp/squid:
#./configure
最后,分別執(zhí)行make all、make install:
#make all
#make install
安裝結(jié)束后,Squid的可執(zhí)行文件在安裝目錄的bin子目錄下,配置文件在etc子目錄下。
Squid軟件向用戶提供了許多與配置、應(yīng)用程序和庫、日志等相關(guān)的文檔進(jìn)行配置和管理,Squid有一個主要的配置文件squid.conf。同時,在Red Hat環(huán)境下所有Squid的配置文件都位于/etc/squid子目錄下。在該目錄當(dāng)中,系統(tǒng)同時提供了一個默認(rèn)的配置文件,其名稱為squid.conf.default,然而,在實際的應(yīng)用當(dāng)中,該默認(rèn)的配置文件存在某些問題,所以在使用Squid之前,必須首先對該配置文件的有關(guān)內(nèi)容進(jìn)行修改。
下面介紹squid.conf文件的結(jié)構(gòu)以及一些常用的選項。squid.conf配置文件可以分為13個部分。雖然Squid的配置文件很龐大,該配置文件的規(guī)模達(dá)到了3000多行。然而,如果只是為一個中小型網(wǎng)絡(luò)提供代理服務(wù),并且只準(zhǔn)備使用一臺服務(wù)器,那么,配置問題將會變得相對簡單,只需要修改配置文件中的幾個選項即可滿足應(yīng)用需求。這些幾個常用選項分別是:
1. http_port
該選項定義Squid監(jiān)聽HTTPD客戶連接請求的端口。默認(rèn)是3128,如果使用HTTPD加速模式,則為80。可以指定多個端口,但是所有指定的端口都必須在一條命令行上出現(xiàn),程序才能正確地識別。
2. cache_mem(bytes)
該選項用于指定Squid可以使用的內(nèi)存的理想值。這部分內(nèi)存被用來存儲以下對象:In-Transit objects(傳入的對象)、Hot Objects(熱對象,即用戶常訪問的對象)、Negative-Cached objects(消極存儲的對象)。
3. cache_dir Directory-Name Mbytes Level1 Level2
該選項指定Squid用來存儲對象的交換空間的大小及其目錄結(jié)構(gòu)。可以用多個cache_dir命令來定義多個交換空間,并且這些交換空間可以分布在不同的磁盤分區(qū)。“directory”指明了該交換空間的頂級目錄。如果想用整個磁盤作為交換空間,那么可以將該目錄作為裝載點(diǎn)將整個磁盤掛裝上去。默認(rèn)值為/var/spool/squid。Mbytes定義了可用的空間總量。
配置訪問控制
使用訪問控制特性,可以控制在訪問時根據(jù)特定的時間間隔進(jìn)行緩存、訪問特定站點(diǎn)或一組站點(diǎn)等。Squid訪問控制有兩個要素:ACL元素和訪問列表。通過使用這些方法,系統(tǒng)管理員可以嚴(yán)格、清晰地定義代理服務(wù)器的訪問控制策略。
1. ACL元素
該元素定義的語法如下:
acl aclname acltype string1…
acl aclname acltype “file”…
當(dāng)使用文件時,該文件的格式為每行包含一個條目。其中,acltype可以是任一個在ACL中定義的名稱;任何兩個ACL元素不能用相同的名字;每個ACL由列表值組成,當(dāng)進(jìn)行匹配檢測的時候,多個值由邏輯或運(yùn)算連接,換句話說,任一ACL元素的值被匹配,則這個ACL元素即被匹配; 并不是所有的ACL元素都能使用訪問列表中的全部類型;不同的ACL元素寫在不同行中,Squid將這些元素組合在一個列表中。
2. http_access訪問控制列表
根據(jù)訪問控制列表允許或禁止某一類用戶訪問。如果某個訪問沒有相符合的項目,則默認(rèn)為應(yīng)用最后一條項目的“非”。比如最后一條為允許,則默認(rèn)就是禁止。通常應(yīng)該把最后的條目設(shè)為“deny all”或“allow all”來避免安全性隱患。使用該訪問控制列表需要注意如下問題:
● 這些規(guī)則按照它們的排列順序進(jìn)行匹配檢測,一旦檢測到匹配的規(guī)則,匹配檢測就立即結(jié)束;
● 訪問列表可以由多條規(guī)則組成;
● 如果沒有任何規(guī)則與訪問請求匹配,默認(rèn)動作將與列表中最后一條規(guī)則對應(yīng);
● 一個訪問條目中的所有元素將用邏輯與運(yùn)算連接,如下所示:
http_access Action 聲明1 AND 聲明2 AND 聲明 OR
http_access Action 聲明3
● 多個http_access聲明間用或運(yùn)算連接,但每個訪問條目的元素間用與運(yùn)算連接;
● 列表中的規(guī)則總是遵循由上而下的順序。
3. 使用訪問控制
上面詳細(xì)講述了ACL元素以及http_access訪問控制列表的語法以及使用過程中需要注意的問題,下面給出使用這些訪問控制方法的實例。
如果,允許網(wǎng)段10.0.0.124/24以及192.168.10.15/24內(nèi)的所有客戶機(jī)訪問代理服務(wù)器,并且允許在文件/etc/squid/guest列出的客戶機(jī)訪問代理服務(wù)器,除此之外的客戶機(jī)將拒絕訪問本地代理服務(wù)器。那么具體操作如下:
acl clients src 10.0.0.124/24 192.168.10.15/24
acl guests src “/etc/squid/guest”
acl all src 0.0.0.0/0.0.0.0
http_access allow clients
http_access allow guests
http_access deny all
其中,文件“/etc/squid/guest”中的內(nèi)容為:
172.168.10.3/24
210.113.24.8/16
10.0.1.24/25
……
如果,允許域名為job.net、gdfq.edu.cn的兩個域訪問本地代理服務(wù)器,其他的域都將拒絕訪問本地代理服務(wù)器。那么具體操作如下:
acl permitted_domain src job.net gdfq.edu.cn
acl all src 0.0.0.0/0.0.0.0
http_access allow permitted_domain
http_access deny all
如果,使用正則表達(dá)式,拒絕客戶機(jī)通過代理服務(wù)器訪問包含有諸如“sexy”等關(guān)鍵字的網(wǎng)站。那么具體操作如下:
acl deny_url url_regex - sexy
http_access deny deny_url
如果,拒絕客戶機(jī)通過代理服務(wù)器訪問文件中指定IP或者域名的網(wǎng)站,其中文件/etc/squid/deny_ip中存放有拒絕訪問的IP地址,文件/etc/squid/deny_dns中存放有拒絕訪問的域名。那么具體操作如下:
acl deny_ip dst “etc/squid/deny_ip”
acl deny_dns dst “etc/squid/deny_dns”
http_access deny deny_ip
http_access deny deny_dns
如果,允許和拒絕指定的用戶訪問指定的網(wǎng)站,其中,允許客戶1訪問網(wǎng)站http://www.sina.com.cn,而拒絕客戶2訪問網(wǎng)站http://www.163.com。那么具體操作如下:
acl client1 src