巧用Squid的ACL和訪問列表實現高效訪問控制

2021-09-20 16:55:59 字數 4373 閱讀 5476

2010-09-19 22:52:52

squid可以工作在很多的作業系統中,如aix、digital、unix、freebsd、hp-ux、irix、linux、netbsd、nextstep、sco、solaris、os/2等。

在使用過程中,合理使用訪問控制是非常重要的工作。使用訪問控制特性,可以控制其在訪問時根據特定的時間間隔進行快取、訪問特定站點或一組站點等等。squid訪問控制有兩個要素:acl元素和訪問列表。訪問列表可以允許或拒絕某些使用者對此服務的訪問。下面分別介紹acl元素以及訪問列表的使用方法。

1.acl元素

該元素定義的語法如下:

acl aclname acltype string1…

acl aclname acltype "file"…

當使用檔案時,該檔案的格式為每行包含乙個條目。

其中,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:指明目標位址,即客戶請求的伺服器的ip位址。語法為:

acl aclname dst ip-address/netmask ...
srcdomain:指明客戶所屬的域,squid將根據客戶ip反向查詢dns。語法為:

acl aclname srcdomain foo.com ...
dstdomain:指明請求伺服器所屬的域,由客戶請求的url決定。語法為:

acl aclname dstdomain foo.com ...。此處需要注意的是:如果使用者使用伺服器ip而非完整的網域名稱時,squid將進行反向的dns解析來確定其完整網域名稱,如果失敗,就記錄為「none」。

time:指明訪問時間。語法如下:

acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm]
日期的縮寫指代關係如下:

s:指代sunday

m:指代monday

t:指代tuesday

w:指代wednesday

h:指代thursday

f:指代friday

a:指代saturday

另外,h1:m1必須小於h2:m2,表示式為[hh:mm-hh:mm]。

port:指定訪問埠。可以指定多個埠,比如:

acl aclname port 80 70 21 ...

acl aclname port 0-1024 ... 指定乙個埠範圍

proto:指定使用協議。可以指定多個協議:

acl aclname proto http ftp ...
method:指定請求方法。比如:

acl aclname method get post ...
url_regex:url規則表示式匹配,語法為:

acl aclname url_regex[-i] pattern
urlpath_regex:url-path規則表示式匹配,略去協議和主機名。其語法為:

acl aclname urlpath_regex[-i] pattern
在使用上述acl元素的過程中,要注意如下幾點:

acltype可以是任乙個在acl中定義的名稱。

任何兩個acl元素不能用相同的名字。

每個acl由列表值組成。當進行匹配檢測的時候,多個值由邏輯或運算連線;換句話說,任一acl元素的值被匹配,則這個acl元素即被匹配。

並不是所有的acl元素都能使用訪問列表中的全部型別。

不同的acl元素寫在不同行中,squid將這些元素組合在乙個列表中。

2.http_access訪問控制列表

根據訪問控制列表允許或禁止某一類使用者訪問。如果某個訪問沒有相符合的專案,則預設為應用最後一條專案的「非」。比如最後一條為允許,則預設就是禁止。通常應該把最後的條目設為「deny all」或「allow all」來避免安全性隱患。

使用該訪問控制列表要注意如下問題:

這些規則按照它們的排列順序進行匹配檢測,一旦檢測到匹配的規則,匹配檢測就立即結束。

訪問列表可以由多條規則組成。

如果沒有任何規則與訪問請求匹配,預設動作將與列表中最後一條規則對應。

乙個訪問條目中的所有元素將用邏輯與運算連線(如下所示):

http_access action宣告1 and 宣告2 and

多個http_access宣告間用或運算連線,但每個訪問條目的元素間用與運算連線。

列表中的規則總是遵循由上而下的順序。

3.使用訪問控制

上面詳細講述了acl元素以及http_access訪問控制列表的語法以及使用過程中需要注意的問題,下面給出使用這些訪問控制方法的例項:

(1)允許網段10.0.0.124/24以及192.168.10.15/24內的所有客戶機訪問**伺服器,並且允許在檔案/etc/squid/guest列出的客戶機訪問**伺服器,除此之外的客戶機將拒絕訪問本地**伺服器:

http_access deny all其中,檔案「/etc/squid/guest」中的內容為:

172.168.10.3/24

210.113.24.8/16

10.0.1.24/25

(2)允許網域名稱為job.net、gdfq.edu.cn的兩個域訪問本地**伺服器,其他的域都將拒絕訪問本地**伺服器:

http_access deny all(3)使用正規表示式,拒絕客戶機通過**伺服器訪問包含有諸如「***y」等關鍵字的**:

acl deny_url url_regex -i ***y

http_access deny deny_url

(4)拒絕客戶機通過**伺服器訪問檔案中指定ip或者網域名稱的**,其中檔案/etc/squid/ deny_ip中存放有拒絕訪問的ip位址,檔案/etc/squid/deny_dns中存放有拒絕訪問的網域名稱:

http_access deny deny_dns(5)允許和拒絕指定的使用者訪問指定的**,其中,允許客戶1訪問**而拒絕客戶2訪問**

http_access deny client2 client2_url(6)允許所有的使用者在規定的時間內(周一至周四的8:30到20:30)訪問**伺服器,只允許特定的使用者(系統管理員,其網段為:192.168.10.0/24)在周五下午訪問**伺服器,其他的在周五下午一點至六點一律拒絕訪問**伺服器:

本文出自 「卓越始於足下」 部落格,請務必保留此出處

巧用Squid的ACL和訪問列表實現高效訪問控制

squid可以工作在很多的作業系統中,如aix digital unix freebsd hp ux irix linux netbsd nextstep sco solaris os 2等。在使用過程中,合理使用訪問控制是非常重要的工作。使用訪問控制特性,可以控制其在訪問時根據特定的時間間隔進行快...

巧用Squid的ACL和訪問列表實現高效訪問控制

squid可以工作在很多的作業系統中,如aix digital unix freebsd hp ux irix linux netbsd nextstep sco solaris os 2等。在使用過程中,合理使用訪問控制是非常重要的工作。使用訪問控制特性,可以控制其在訪問時根據特定的時間間隔進行快...

許可權和ACL訪問控制 01 許可權

rwxrwrwx 左三位 定義user owner 的許可權,屬主許可權 中三位 定義group的許可權,屬組許可權 有三位 定義other的許可權,其他的許可權 程序對檔案的訪問許可權應用模型 程序的屬主與檔案的屬主是否相同。如果相同,則應用屬主許可權 否則去檢查金證的屬於是否屬於檔案的屬組 如果...