巧用Squid的ACL和訪問列表實現高效訪問控制(2)
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列出的客戶機訪問代理服務器,除此之外的客戶機將拒絕訪問本地代理服務器:
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”中的內容爲:
172.168.10.3/24 210.113.24.8/16 10.0.1.24/25
(2)允許域名爲job.net、gdfq.edu.cn的兩個域訪問本地代理服務器,其他的域都將拒絕訪問本地代理服務器:
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
(3)使用正則表達式,拒絕客戶機通過代理服務器訪問包含有諸如“sexy”等關鍵字的網站:
acl deny_url url_regex -i sexy http_access deny deny_url
(4)拒絕客戶機通過代理服務器訪問文件中指定IP或者域名的網站,其中文件/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
(5)允許和拒絕指定的用戶訪問指定的網站,其中,允許客戶1訪問網站http://www.sina.com.cn,而拒絕客戶2訪問網站http://www.163.com:
acl client1 src 192.168.0.118 acl client1_url url_regex ^http://www.sina.com.cn acl client2 src 192.168.0.119 acl client2_url url_regex ^http://www.163.com http_access allow client1 client1_url http_access deny client2 client2_url
(6)允許所有的用戶在規定的時間內(週一至週四的8:30到20:30)訪問代理服務器,只允許特定的用戶(系統管理員,其網段爲:192.168.10.0/24)在週五下午訪問代理服務器,其他的在週五下午一點至六點一律拒絕訪問代理服務器:
acl allclient src 0.0.0.0/0.0.0.0 acl administrator 192.168.10.0/24 acl common_time time MTWH 8:30-20:30 acl manage_time time F 13:00-18:00 http_access allow allclient common_time http_access allow administrator manage_time http_access deny manage_time