squid 的配置详解 (转)--SeriesV 收藏
SquidProxy的存取控制
基本存取控制
在SQUID里,Access Control List存取列表简称ACL用来在SQUID.CONF里设置客户端到代理服务器的权限控制。利用ACL可以将不同性质的客户端分类,以方便管理,也能对某个已经定义的ACL群组,限制其与代理服务器的联机。为什么可以轻易限制所定义的ACL群组呢?因为SQUID代理服务器的运行,需要通过HTTP,ICP等通讯协议,所以可以通过,
HTTP_ACESS ALLOW | DENY ACLNAME
ICP_ACCESS ALLOW | DENY ACLNAME等方式,允许或者拒绝HTTP,ICP达到限制控制的目的
在squid里对客户端的联机做存取控制分为两个阶段进行,第一阶段是定义ACL,第二阶段是设置ACL存取权限,第一阶段定义ACL
在proxy上通过ACL做连接控制
acl member src 192.168.1.10/24
http_access allow member
用法:
ACL的定义有以下两种:
1 acl acl名称 ACL类型 字符串1 字符串2...(ACLlist)
2 acl acl名称 ACL类型 “文件的路径”
说明:
acl命令 ,用来说明要做“存取控制列表”
acl名称,读者可以自定义一个acl名称,如:reject
ACL类型,即做限制的类型。ACL的类型有src,dst,srcdomain,dstdomain,url_pattern,urlpath_pattern,url_regex,urlpath_regex,time,port,proto,method,browser,user等相当多的限制类型
在squid里面做客户端的存取控制的定义的时候,最重要的是选择ACL类型,ACL类型会影响过滤存取的速度,一般建议使用src,dst等以IP地址为主的ACL类型,在存取规则上会快很多。
ACLIST:ACL的List大致可以分为字符串和文件两大类,字符串的内容可以是IP地址,FQDN,URL地址,含正则表达式的URL,文件路径(用双引号引起来),在所指定的文件里,再一行一行的写入ACLLIST
以下针对几种常用的ACL类型,说明如何完成控制客户端对SQUID PROXY的联机限制。
1.src限制
这种限制诶行的设置格式如下:
ACL ACL名称 SRC IP-NETWORK/NETMASK IP-NETWORK/NETMASK
用法:
使用src ACL类型的时候,后面必须是受限制的客户端的IP地址以及其掩码,也可以使用CIDR的格式,请注意SRC 是 source(来源)的意思,这种ACL是针对来源客户端的IP地址进行存取管理,使用src ACL类型的时候不能在后面输入FQDN
acl member src 192.168.1.0/24
主要是用来设定可以使用proxy Server的来源范围
其设置方式如下
acl all src 0.0.0.0/0.0.0.0;ACL名称为ALL ,并且限制来源的范围是0.0.0.0/0.0.0.0(所有)
acl local src 127.0.0.1/32 192.168.1.0/255.255.255.0
;这种写法适合单主机ACL名称是LOCAL来源范围是127.0.0.1/32 192.168.1.0/255.255.255.0
acl reject src 210.110.0.0/16 163.21.136.100/32
ACL名称是reject,reject的来源是210.110.0.0/16网域和一个163.21.136.100/32单一主机
acl members src 163.21.0.0/16 203.100.77.0/24
ACL的名称是MEMBER member的来源是163.21.0.0/16 网域 203.100.77.0/24网域
SRC限制类型,在squid存取管理里是运行速度最快的,因此如果需要对下层的客户或者是squid代理服务器做联机管理,建议使用src限制类型定义管制的来源对象,这种方式时如果有相当多的来源对象,需不断将“IP地址/掩码”加入在src语句后面,不要自动换行,但是加在src语句后面的长度会收到字符串总长度不能超过255字符的限制,因此如果使用src限制的来源对象众多的时候,请改用第二中方式即 “acl acl名称 ACL类型 “文件的路径””来做来源限制,如下所示:
acl members src "/etc/squid/myfriends"
接着在/etc/squid/myfriends文件里,将源IP地址/掩码,一行,一行写入,如
163.21.0.0/26
163.21.0.1/32
.................
在此强烈建议使用这种方法,这样可以更加快速的定义受管制的来源对象
2http_access命令
定义完ACL之后,暂时还无法对联机的客户端做存取控制,必须进入第二个阶段,用命令http_access设置ACL的存取权限,其语法如下:
用法:
http_access allow|deny acl名称
说明:
1.http_access申明设置ACL存取权限的命令
2.allow|deny 控制权限的方式。allow是允许,deny是拒绝
3.acl名称:用acl命令定义的acl名称,如前例的reject,member
以前设置的acl,all,local,reject,member为例,说明怎样设置acl的存取权限
http_access allow all
上式表示所有的网域都可以联机到本机的代理服务器,如果要限定特定的联机客户端,就要取消以上定义式,而改用
#http_access allow all
http_access allow mebmers
如果要定义ACL reject所定义的来源范围,拒绝使用本代理服务器,则可以定义如下:
http_access deny reject
在定义ACL存取权限的时候,allow和deny可以一起混用,但是必须注意存取的权限对象的先后顺序,在排列存取对象的先后顺序时,应当吧权限限制最低的项目放在前面,而权限限制最高的项目放在后面,如下列所示:
http_access dney rejector
http_access allow members
http_access allow local
http_access deny all
注意,由于members与local的来源范围有所重复,因此,需将范围交大的ACL放在范围较小的ACL的前面,习惯上做ACL存取权限定义的时候,会在定义权限限制的最末行加上“http_access deny all”,以明确的拒绝其他客户的联机要求。
在用http_access allow(deny)对acl对象做如上例的members做设置的时候,可以使用“!”符号做反向存取控制,如:members的定义是acl members src 163.21.110.0/24,如果设置如下:
http_access allow !members
表示客户端的来源IP只要不是163.21.110.0/24这个IP网域的用户,都可以使用代理。
当设置好存取控制之后,就先存储,并退出/etc/squid/squid.conf文件,然后让squid重新获得配置文件 squid -k reconfigure
补充:
读者可能已经注意到上面的使用http_access allow |deny设置存取权限的时候,acl名称都只有一个这是因为在,如果在这个命令后面接多个acl名称的话,其作用是对member1和member2的交集做存取控制,也就是说,如果这两个对象如果没有交集(一般情况)那么这条存取控制就实效,导致客户端无法使用代理服务器。如果acl名称定义的是time类型的存取控制类型,则可以与src,dst,srcdomain,dstdomain,url_pattern,urlpath_pattern,url_regex,urlpath_regex等存取控制类型搭配使用
3dst限制类型
用法
acl acl名称 dst ip-network/netmask ip-network/netmask
说明:
dst,就是distance,目的地。使用这种限制类型,可以用来对客户端要存取的“目的地”做权限控制,dst限制类型的对象是目的地的ip地址/掩码对
范例:
acl sex dst “/etc/squid/sex.list"
acl violence dst 210.96.0.0/16 210.128.1.0/24
http_access deny sex
http_access deny violence
上述设置可以用来防止不健康的网站的联机,不过一般而言,搜集不健康的网络的IP比较麻烦,所以通常防止不健康网站联机的时候,使用dstdomain限制类型较为方便
4srcdomain限制类型
用法:
acl acl名称 srcdomain 来源网址1 来源网址2.......
说明:
src限制类型适用于来源范围是IP地址,而srcdomain限制类型则适用于来源范围是域名或FQDN(完整域名)。
范例:
acl friends srcdomain tp.edu.cn tpc.edu.cn tmtc.edu.cn
acl 客户s srcdomain "/etc/squid/客户_list"
http_access allow friends
http_access allow clients
上述定义表示,允许来自tp.edu.cn tpc.edu.cn tmtc.edu.cn三个网域,以及客户_list文件里所列的域名的主机,使用本机的代理服务器。srcdomain之后通常接“域名”,如:tp.edu.cn。当然,也可以使用单一主机的FQDN,如:proxy.dfes.bj.edu.cn
注意:
用srcdomain限制类型,由于代理服务器要用DNSSERVER做域名解析在做来源范围过滤时,速度会很慢。
5.dstdomain限制类型
用法:
acl acl名称 dstdomain 目的网域1 目的网域2.......
说明:
dst限制类型适用于目的范围地址是IP地址,而dstdomain限制类型,则适用于目的范围是域名或FQDN(完整域名)
范例:
acl sex dstdomain "etc/squid/sex.list"
acl violence dstdomain "etc/squid/violence.list"
http_access deny sex;拒绝联机到×××网站
http_access deny violence;拒绝联机到暴力网站
/etc/squid/sex.list文件内容
www.playboy.com
www.sex.com
girl.com
dstdomain限制类型由于可对客户端所要缓冲的目的域做联机控制,因此非常适用于对不健康网站进行保护。以上例来说,建议读者将不见看的网域分为多个ACL,例如SEX,VIOLENCE等,再将不健康的网站一一列在指定的文件里,如sex.list,violence.list如此一来,就可以很轻松的做好限制访问不健康的网站的工作。
6.url_regex限制类型
用法:
acl acl名称 url_regex URL1 URL2
说明:
dstdomain限制类型对限制不健康网站的访问很有用,但却把整个网站都设置为拒绝联机,例如很多的著名的商业网站,在提供各类服务的同时也包含×××,暴力等网站的查询,当进行不见看的网站限制访问时,不能因为这个因素将其纳入黑名单,必须正对URL地址做控制才对,但是通过dstdomain限制无法做到的。此时,可改用URL_REGEX限制类型
范例:
acl sex1 url_regex^http
//dir.kimo.com/recreation/sex/$
acl sex2 url_regex^http://dir.kimo.com/recreation/sex$
acl violence url_regex "etc/squid/violence.list"
http_access deny sex1;拒绝联机到特定的URL地址
.......
URL_REGEX限制类型后面所接的是用正则表达式regular express表示的匹配对象,最简单的形似是"^URL$",也就是说在URL地址的前面加上^,表示匹配的开头,在URL的地址后面加上$标识匹配的结尾,请注意,我们在范例中给出的第一和第二个例子是不同的,请注意区分,如果您熟悉正则表达式,那么可以自己定制相应的URL
正则表达式的相关基础,详细在网络上有很多的介绍,在这里就不再累述了。
7.urlpath_regex限制类型
用法
acl acl名称 urlpath_regex URL1,URL2
说明:URL_REGEX限制类型主要适用于匹配网站的URL 如:“http://dir.kimol.com.cn/$" 如果针对某个网页,文件,图片的URL地址做存取控制,就得改用urlpath_regex限制类型。urlpath_regex限制类型主要用来对"http://bj.edu/works/js/js001.gif"这种完整的网页,文件,图形的URL地址来做存取控制。
范例:
acl dst urlpath_regex
^http://www.bj.edu/works/js001.gif$
http_access deny dst1 ;拒绝联机到特定URL地址
http_access deny dst2 ;拒绝联机到特定URL地址
urlpath_regex限制类型其后所接的也是正则表达式描述的URL地址。最简单的形式也是:”^URL$",也就是说在URL地址前面加上“^”,标识样式匹配的开头,在URL地址的后面加上"$",表示样式匹配的结果,如“
^http://www.bj.edu/works/js001.gif$”
8.time限制类型
用法:
acl acl名称 time [day-abbrevs] [h1:m1-h2:m2]
说明:
squid的ACL的限制类型,除了前面几种常用的类型外,还有一种相当特殊的ACL限制类型,TIME限制类型:time限制类型,time限制类型不能单独使用,必须配合其他限制类型结合使用,使用TIME限制类型的时候,请在 [day-abbrevs]栏填入所控制的“天”(星期几的英文所写),如:SM(表示SUNDAY,MONDAY)在[h1:m1-h2:m2]填入控制的时间,用24小时制计算,如:09:00-22:30。以下列出time限制类型用法:
#acl aclname time [day-abbrevs] [h1:m1-h2:m2]
#day-abbreves:
#S-Sunday
#M-Monday
#T-Tuesday
#W-Wednesday
#H-Thursday
#F-Friday
#A-Saturday
#h1:m1必须小于h2:m2
范例一:
acl members src "/etc/squid/myfriends"
acl Do_work time MTWHF 07:00-20:00
http_access allow Do_work members
http_access deny Do_work
上例是先用SRC限制类型指定来源范围的MEMBERS ACL:第二行用TIME限制类型定义限制联机的时间是:星期一到星期5,每天从早上7点到晚上8点,指定给Do_work ACL:第三行是重点,将Do_work,members放在http_access allow后,表示允许members联机,且限制在Do_works指定的时间里
范例二
acl members src "/etc/squid/myfriends"
acl Do_work time MTWHF 07:00-20:00
acl all src 0.0.0.0/0
acl Don’t_work time s 01:00-02:00
http_access deny Dont_work all
http_access allow Do_work members
http_access deny Do_work
这个范例,增加了一个设定,是设置每个星期天凌晨1点到2点间不允许所有的客户端联机,通常这段时间用来做系统整理LOG文件或者重新启动SQUID_DEAMON
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zinking3/archive/2007/06/20/1659884.aspx