访问控制

要想查看目前代理服务器正在连接什么东西需要查看access.log,由于是个文件,如果想实时监控的话可以使用tail的-f命令来follow这个文件。

开始扫描《squid中午权威指南》里头提到了splay tree,一定要研习一番

访问控制ACL(要求彼此之间没有交集)

acl name type value1 value2 …

6.1.1 type大约有25个

6.1.1.1 ip地址:src,dst,myip,以下三种表达方式是相同的,最好不要使用域名,直接使用ip

acl Xyz src 172.16.55.32/255.255.255.248

acl Xyz src 172.16.55.32/28                #我觉得还是这种最帅气

acl Xyz src 172.16.55.32                    #这种不知道对不对(对的,已验证)

另外,支持这种写法:

acl Bar src 172.16.10.0-172.16.19.0/24

6.1.1.2 域名:srcdomain, dstdomain,和cache_host_domain指令

URL hostname 

Matches ACL lrrr.org? 

Matches ACL .lrrr.org? 

lrrr.org

Yes 

Yes 

i.am.lrrr.org

No 

Yes 

iamlrrr.org

No 

No 

6.1.1.3 用户名:ident, proxy_auth

6.1.1.4 正则表达式:scrdom_regex, dstdom_regex, url_regex, urlpath_regex, browser, referer_regex, ident_regex, proxy_auth_regex, reg_mime_type, rep_mime_type

6.1.1.5 TCP端口号:port, myport

acl Foo port 123

acl Foo port 1-1024

6.1.1.6 自主系统号:src_as, dst_as ***用不上吧

6.1.2.1 src

使用ip地址控制客户对Squid的访问,如果是url也会被dns到ip,可以使用dstdomain来解决

6.1.2.3 myip

指Squid的IP地址

6.1.2.4 dstdomain

基于名字的访问控制,对url的主机名部分使用字符串比较功能

6.1.2.5 srcdomain

客户反向DNS查询

6.1.2.6 port

访问目标的端口

6.1.2.7 myport

squid的监听端口,可以不止一个

6.1.2.8 method

HTTP请求方法:GET, POST, PUT等

6.1.2.9 proto

指URL访问协议:http, https ftp, gopher, urn, whois, cache_object

6.1.2.10 time

控制基于时间的访问

acl Working_hours MTWHF 08:00-17:00

6.1.2.11 ident***用不上

6.1.2.12 proxy_auth

6.1.2.16 maxconn 最大连接数

acl OverConnLimit maxconn 4

http_access deny OverConnLimit

6.1.2.17 arp

在同一子网基于物理地址的控制

acl WinBoxes arp 00:00:21:55:ed:22

acl WinBoxes arp 00:00:21:ff:55:38

6.1.2.18 srcdom_regex:使用正则表达式匹配客户域名,依然需要

6.1.2.19 dstdom_regex:与dstdomain类似,只是使用了正则

6.1.2.20 url_regex:用于匹配URL请求的任何部分,包括传输协议和原始服务器主机名

acl FTPMP3 url_regex -i ^ftp://.*\.mp3$

6.1.2.21 urlpath_regex:前者排除传输协议和主机名后就是他

6.1.2.22 browser 对客户HTTP请求里user-agent头执行正则表达式匹配

acl AuidoFileUploads req_mime_type -i ^audio/

6.1.2.23 req_mime_type 对原始服务器HTTP响应里content-type头部正则匹配

acl JavaDownload rep_mime_type application/x-java

http_reply_access deny JavaDownload

6.1.2.26 proxy_auth_regex对代理认证用户名使用正则

acl Admins proxy_auth_regex -i ^admin

 

 

6.2 访问控制规则

前面是访问控制(acl)元素的建立。接着通过前面的元素建立访问控制规则,用来拒绝或允许某些动作,语法:access_list allow|deny [!]ACLname ...

6.2.2 如何匹配访问规则

逐条处理,acl是"或"逻辑,访问规则使用"与"逻辑

access_list allow ACL1 ACL2 ACL3请求必须匹配任何一个,因此要将最少匹配放在首位

对某个ACL值的匹配算法是,squid在访问列表里找到匹配规则时,搜索终止。假如没有访问规则导致匹配,默认动作是列表里最后一条规则的取反。例如,考虑如下简单访问配置:

acl Bob ident bob

http_access allow Bob

假如用户Mary发起请求,她会被拒绝。列表里最后的(后面没有访问列表了)规则是allow规则,它不匹配用户名mary。这样,默认的动作是allow的取反,故请求被拒绝。类似的,假如最后的规则是deny规则,默认动作是允许请求。在访问列表的最后加上一条,明确允许或拒绝所有请求,是好的实际做法。为清楚起见,以前的示例应该如此写:(这样,所有的src都会卡在下面最后一条上,因为都会匹配ALL)

acl All src 0/0

acl Bob ident bob

http_access allow Bob

http_access deny All

src 0/0 ACL表示匹配每一个和任意类型的请求。

posted on 2011-11-03 18:30  Observer  阅读(869)  评论(0编辑  收藏  举报

导航