简介:
squid服务提供了强大的访问控制功能,通过定义各种ACL(Access Control List,访问控制列表),这些列表中包含了一定的过滤和控制条件,然后只要对这些列表设置时allow(允许)或deny(拒绝)就可以实现访问控制了。

在squid.conf配置文件中,HTTP的访问控制主要由acl和http_access配置项共同实现,两个配置项分别用来定义控制的条件(列表)和实施控制。

  1. 定义ACL列表
    acl配置项用于设置访问控制列表的内容,可以为每组特定的控制目标制定一个名称。
    格式:
    acl 列表名称 列表类型 列表内容 ...
    列表名称:用户自定义名称即可
    列表类型:必须使用squid预定义的值
    列表内容:即控制的对象
    常见的squid预定义列表类型:
    类型1:src
    列表内容示范:
    192.168.1.1/32
    192.168.1.0/255.255.255.0
    192.168.1.0-192.168.3.0/24
    用途:
    客户端IP地址或网络段、地址范围
    类型2:dst
    列表内容示范:
    www.XXX.COM

    216.163.137.3/32
    用途:
    用户访问的目标主机名或者IP地址
    类型3:port
    列表内容示范:
    80 8080 21
    用途:
    用户访问的端口
    类型4:srcdomain
    列表内容示范:
    .linuxfan.cn
    .llfa.cn
    用途:
    客户端来源域名(根据ip地址作反向解析)
    类型5:dstdomain
    列表内容示范:
    .qq.com .msn.com .verycd.com
    用途:
    用户访问的目标域,匹配域内所有站点
    类型6:time
    列表内容示范:
    MTWHF 8:30-17:30
    12:30-13:30
    AS
    用途:
    用户上网的时间段
    字母表示一星期各天的英文缩写
    M-monday
    T-tuesday
    W-wednesday
    H-thursday
    F-friday
    A-saturday
    S-sunday
    列表类型7:Maxcon
    列表内容示范:
    15
    用途:
    客户端的并发HTTP连接数
    列表类型8:url_regex
    列表内容示范:
    url_regex -i ^rtsp:// ^mms://
    url_regex -i ^emule://
    用途:
    用户访问的整个URL网址,
    可以使用正则表达式,
    加-i表示忽略大小写
    列表类型9:urlpath_regex
    列表内容示范:
    urlpath_regex -i sex adult nude
    urlpath_regex -i \.mp3$ \.rar$
    用途:
    匹配用户访问的URL路径(部分),
    可以使用正则表达式
    2.设置acl访问权限
    针对定义的各种acl列表,使用http_access配置项控制其访问权限,允许(allow)或者拒绝(deny)。
    http_access配置行必须在对应的acl列表定义之后。
    每一行http_access配置确定一条权限控制规则。
    在每一条http_access规则中,可以同时包含多个acl列表名,各个列表之间使用“与”的关系,只有满足所有acl列表对应的条件才会进行限制,
    可以使用“!”符号设置相反条件
    格式:
    http_access allow或deny 列表名.....
    生效的顺序:
    在squid.conf中http_access各条规则按顺序进行匹配,匹配即停止;
    没有任何规则是:squid访问将拒绝客户端的请求。
    有规则但找不到匹配项是:
    采用与最后一条相反的权限,
    即如果最后一条是allow,则拒绝,否则允许。
    通常情况下把最常用的控制规则放在最前面,以减小squid的负载。
    在访问控制的总体策略上采用:先拒绝后允许或先允许后拒绝,在最后添加一条“http_access allow all”或者“http_access deny all”

  2.  

3.实现步骤:
定义列表
acl all src 0.0.0.0/0.0.0.0
acl localhost src 127.0.0.1/255.255.255.255
acl LAN1 src 192.168.1.0/24
acl LAN2 src 192.168.2.0/24
acl PC1 src 192.168.1.66/32
acl lan_Domain .linuxfan.cn .benet.com
acl to_localhost dst 127.0.0.0/8
acl Black_IP dst 61.143.79.86/32 217.23.45.77/32
acl Black_host dst www.xxxx.comwww.adult.com  ##squid启动时会尝试解析
acl Black_Domain dstdomain .qq.com .msn.com j.gamezone.net
acl Max10_Conn maxconn 10
acl Max20_Conn maxconn 20
acl Black_URL url_regex -i ^rtsp:// ^mms:// ^emule://
acl Illegal_words urlpath_regex -i sex adult fake
acl MediaFile urlpath_regex -i \.mp3$ \.mp4$ \.rmvb$ \.rm$ \.mov$ \.mpg$
acl Lunch_Hours time MTWHF 12:30-13:30
acl Work_Hours time MTWHF 08:30-17:30
实现权限控制
http_access deny LAN1 Black_IP
http_access deny LAN1 Black_Host
http_access deny LAN1 Black_Domain
http_access deny LAN2 Black_URL
http_access deny LAN2 Illegal_words
http_access deny LAN2 MediaFile
http_access deny PC1 Max10_conn
http_access deny LAN1 Max20_conn
http_access allow LAN_Domain Work_Hours
http_access allow LAN1 Work_Hours 
http_access allow LNA2 Work_Hours
http_access deny all