Squid訪問(wèn)控制:ACL元素以及訪問(wèn)列表
代理服務(wù)器是介于瀏覽器和Web服務(wù)器之間的另一臺(tái)服務(wù)器。有了該服務(wù)器之后,瀏覽器不是直接到Web服務(wù)器去取回網(wǎng)頁(yè)而是向代理服務(wù)器發(fā)出請(qǐng)求,信息會(huì)先送到代理服務(wù)器,由代理服務(wù)器來(lái)取回瀏覽器所需要的信息并傳送給客戶的瀏覽器。
現(xiàn)代企業(yè)應(yīng)用代理服務(wù)器,除了提高訪問(wèn)速度外,同時(shí),它在實(shí)際的應(yīng)用過(guò)程中又通常被企業(yè)作為“安全網(wǎng)關(guān)”,可以根據(jù)企業(yè)設(shè)定的代理規(guī)則來(lái)過(guò)濾和屏蔽一些用戶的非法請(qǐng)求和信息,從而達(dá)到保護(hù)企業(yè)網(wǎng)的目的。在企業(yè)開(kāi)源系統(tǒng)的代理服務(wù)中,可以通過(guò)設(shè)置安全訪問(wèn)控制規(guī)則、配置帶認(rèn)證的代理服務(wù)以及反向代理服務(wù)來(lái)確保企業(yè)網(wǎng)絡(luò)安全,本文將詳細(xì)對(duì)這些防護(hù)手段進(jìn)行介紹。
開(kāi)源代理服務(wù)器Squid簡(jiǎn)介
Squid可以工作在很多的操作系統(tǒng)中,如AIX、Digital、UNIX、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。對(duì)于Web用戶來(lái)說(shuō),Squid是一個(gè)高性能的代理緩存服務(wù)器,和一般的代理緩存軟件不同、Squid用一個(gè)單獨(dú)的、非模塊化的、I/O驅(qū)動(dòng)的進(jìn)程來(lái)處理所有的客戶端請(qǐng)求。Squid由一個(gè)主要的服務(wù)程序Squid,一個(gè)DNS查詢程序DNS server,幾個(gè)重寫請(qǐng)求和執(zhí)行認(rèn)證的程序,以及幾個(gè)管理工具組成。當(dāng)Squid啟動(dòng)以后,它可以派生出預(yù)先指定數(shù)目的DNS server進(jìn)程,而每一個(gè)DNS server進(jìn)程都可以執(zhí)行單獨(dú)的DNS查詢,這樣就大大減少了服務(wù)器等待DNS查詢的時(shí)間。
用戶可以從Red Hat Enterprise Linux發(fā)行套件中獲取該軟件的RPM包進(jìn)行安裝并使用#/etc/rc.d/init.d/squid start或者使用#service squid start命令進(jìn)行服務(wù)開(kāi)啟。
使用安全訪問(wèn)控制限制企業(yè)用戶上網(wǎng)行為
使用訪問(wèn)控制特性,可以控制在訪問(wèn)時(shí)根據(jù)特定的時(shí)間間隔進(jìn)行緩存、訪問(wèn)特定站點(diǎn)或一組站點(diǎn)等等。Squid訪問(wèn)控制有兩個(gè)要素:ACL元素和訪問(wèn)列表。訪問(wèn)列表可以允許或拒絕某些用戶對(duì)此服務(wù)的訪問(wèn)。下面分別介紹ACL元素以及訪問(wèn)列表的使用方法。
ACL元素
該元素定義的語(yǔ)法如下:
acl aclname acltype string1…
acl aclname acltype “file”…
當(dāng)使用文件時(shí),該文件的格式為每行包含一個(gè)條目。
其中,acltype可以是src、dst、srcdomain、dstdomain、url_regex、urlpath_regex、time、port、proto、method中的一任意一種。
src:指明源地址。可以用以下的方法指定:
acl aclname src ip-address/netmask ... 客戶ip地址
acl aclname src addr1-addr2/netmask ... 地址范圍
dst:指明目標(biāo)地址,即客戶請(qǐng)求的服務(wù)器的IP地址。語(yǔ)法為:
acl aclname dst ip-address/netmask ...
srcdomain:指明客戶所屬的域,Squid將根據(jù)客戶IP反向查詢DNS。語(yǔ)法為:
acl aclname srcdomain foo.com ...
dstdomain:指明請(qǐng)求服務(wù)器所屬的域,由客戶請(qǐng)求的URL決定。語(yǔ)法為:
acl aclname dstdomain foo.com ...
time:指明訪問(wèn)時(shí)間。語(yǔ)法如下:
acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm]
日期的縮寫指代關(guān)系如下:
S:指代Sunday
M:指代Monday
T:指代Tuesday
W:指代Wednesday
H:指代Thursday
F:指代Friday
A:指代Saturday
另外,h1:m1必須小于h2:m2,表達(dá)式為[hh:mm-hh:mm]。
port:指定訪問(wèn)端口。可以指定多個(gè)端口,比如:
acl aclname port 80 70 21 ...
acl aclname port 0-1024 ... 指定一個(gè)端口范圍
proto:指定使用協(xié)議。可以指定多個(gè)協(xié)議:
acl aclname proto HTTP FTP ...
method:指定請(qǐng)求方法。比如:
acl aclname method GET POST ...
url_regex:URL規(guī)則表達(dá)式匹配,語(yǔ)法為:
acl aclname url_regex[-i] pattern
urlpath_regex:URL-path規(guī)則表達(dá)式匹配,略去協(xié)議和主機(jī)名。其語(yǔ)法為:
acl aclname urlpath_regex[-i] pattern
在使用上述ACL元素的過(guò)程中,要注意如下幾點(diǎn):
acltype可以是任一個(gè)在ACL中定義的名稱。
任何兩個(gè)ACL元素不能用相同的名字。
每個(gè)ACL由列表值組成。當(dāng)進(jìn)行匹配檢測(cè)的時(shí)候,多個(gè)值由邏輯或運(yùn)算連接;換句話說(shuō),任一ACL元素的值被匹配,則這個(gè)ACL元素即被匹配。
并不是所有的ACL元素都能使用訪問(wèn)列表中的全部類型。
不同的ACL元素寫在不同行中,Squid將這些元素組合在一個(gè)列表中。
http_access訪問(wèn)控制列表
根據(jù)訪問(wèn)控制列表允許或禁止某一類用戶訪問(wèn)。如果某個(gè)訪問(wèn)沒(méi)有相符合的項(xiàng)目,則默認(rèn)為應(yīng)用***一條項(xiàng)目的“非”。比如***一條為允許,則默認(rèn)就是禁止。通常應(yīng)該把***的條目設(shè)為“deny all”或“allow all”來(lái)避免安全性隱患。
使用該訪問(wèn)控制列表要注意如下問(wèn)題:
這些規(guī)則按照它們的排列順序進(jìn)行匹配檢測(cè),一旦檢測(cè)到匹配的規(guī)則,匹配檢測(cè)就立即結(jié)束。
訪問(wèn)列表可以由多條規(guī)則組成。
如果沒(méi)有任何規(guī)則與訪問(wèn)請(qǐng)求匹配,默認(rèn)動(dòng)作將與列表中***一條規(guī)則對(duì)應(yīng)。
一個(gè)訪問(wèn)條目中的所有元素將用邏輯與運(yùn)算連接(如下所示):
http_access Action聲明1 AND 聲明2 AND
多個(gè)http_access聲明間用或運(yùn)算連接,但每個(gè)訪問(wèn)條目的元素間用與運(yùn)算連接。
列表中的規(guī)則總是遵循由上而下的順序。