对于用户而言Squid是一个高性能的代理缓存服务器,有了该服务器之后,浏览器发出的信息会先送到代理服务器,由代理服务器来取回网页内容并传送给客户的浏览器,这也是CDN服务器的基础。对技术人员来说Squid的访问控制是必需用到也是最有趣的地方。
图片来源:互联网
ACL元素是Squid的访问控制的基础,类型多达数十种,我将常用的类型(自己常用)整理出来分享下也让自己备用查阅。
ACL元素语法:
acl name acltype value1 value2 …
示例:
acl Http_ports port 80 8080 #
acl deny_url url_regex –i sexy
其中,acltype可以是src、dst、srcdomain、dstdomain、url_regex、urlpath_regex、time、port、proto、method中的一任意一种,这也是今天文章的重点。
(1)定义IP地址
定义IP地址主要使用的对象是src,dst,myip
src:指明源地址
acl clients src 192.168.1.0/24 192.168.2.0/24
acl VIP src “/etc/squid/vip.txt”
acl all src 0.0.0.0/0.0.0.0
dst:即客户请求的服务器的IP
acl denywebsite dst 10.58.58.0/32
acl allowwebsite dst www.baidu.com
acl allowip dst 202.202.202.202
myip:指Squid的IP地址,用的比较少,只有当squid服务器多个IP的时候才需要。
acl hostip myip 192.168.6.5
在对象src,dst,myip的配置中要尽量避免使用主机名和域名,如上面示例中的baidu.com,原因应该很好理解,有时候多IP的问题会被你忽略。
(2)定义域名
域名的定义主要使用的对象是srcdomain,dstdomain
srcdomain:客户所属的域,Squid将根据客户IP反向查询DNS
示例:
acl allowdomain srcdomain iewb.net //允许iewb.net域访问
dstdomain:服务器所属域,由客户请求的URL决定
示例:
acl allowdomain dstdomain iewb.net
http_access allow !allowdomain //拒绝用户访问iewb.net域,squid原则是使用allow语句,然后加deny all。
http_access deny all
(3)正则表达式
正则表达式对象有srcdom_regex, dstdom_regex, url_regex, urlpath_regex, browser, referer_regex, ident_regex, proxy_auth_regex, req_mime_type, rep_mime_type
srcdom_regex: ACL允许你使用正则表达式匹配客户域名。限制是:某些客户地址不能反向解析到域名。
dstdom_regex ACL也与dstdomain相似。
示例:
acl WebSite dstdom_regex -i ^www/. //匹配以www开头的主机名
acl WebSite srcdom_regex -i ^www/. //用户匹配以www开头的主机名
url_regex ACL用于匹配请求URL的任何部分,包括传输协议和原始服务器主机名。
urlpath_regex与url_regex非常相似,不过传输协议和主机名不包含在匹配条件里。
示例:
acl FTPMP3 url_regex -i ^ftp://.*/.mp3$ //匹配ftp服务器的中的mp3文件
http_access deyn FTPMP3 //拒绝FTPMP3,也就是拒绝用户访问ftp服务器中url包含mp3的网址。
假设你必须拒绝URL里的"mp3",但仍允许在主机名里含有"sex"的请求
acl FTPMP3 urlpath_regex mp3
browser: 用的不是很多,主要是根据user-agent匹配浏览器
示例:
acl web browser chrome //匹配chrome浏览器
http_access deny web //拒绝chrome浏览器
或者
http_access deny !web //拒绝chrome以外的浏览器
ident_regex与proxy_auth_regex是匹配用户用的,ident_regex允许你使用正则表达式,代替严格的字符串匹配,这些匹配是对ident协议返回的用户名进行,proxy_auth_regex允许对代理认证用户名使用正则表达式。
示例:
acl NumberInName ident_regex [0-9] //
acl Admins proxy_auth_regex -i ^admin //
http_access deny !Admins //拒绝用户名不是admin的用户
time:根据时间的匹配
time ACL允许你控制基于时间的访问,具体使用格式网友可再查下官方文档。
示例:
acl worktime time 09:00-17:00
acl taobao dstdomain taobao.com
http_access allow worktime !taobao //允许用户上班时间访问淘宝以外的网站(禁止上班时间淘宝)
(4)常见用法
仅仅允许本地客户:
acl All src 0/0
acl MyNetwork src 172.16.5.0/24 172.16.6.0/24
http_access allow MyNetwork
http_access deny All
阻止恶意客户
acl All src 0/0
acl MyNetwork src 172.16.5.0/24 172.16.6.0/24
acl ProblemHost src 172.16.5.9
http_access deny ProblemHost
http_access allow MyNetwork
http_access deny All
http_access的顺序至关重要。不要在deny all后面增加任何语句。
在实际配置过程中,无论是高手还是新手都不可避免要查些资料,这篇文档是要作用是为了自己以后查看,如果能帮到你当然更好。毕竟全的squid中文指南:http://zyan.cc/book/squid/chap06.html#a12