Skip to content


Squid访问控制-ACL类型

  对于用户而言Squid是一个高性能的代理缓存服务器,有了该服务器之后,浏览器发出的信息会先送到代理服务器,由代理服务器来取回网页内容并传送给客户的浏览器,这也是CDN服务器的基础。对技术人员来说Squid的访问控制是必需用到也是最有趣的地方。

  squid2014


图片来源:互联网

  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

Posted in 技术文章.

Tagged with .


One Response

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

  1. cping12345 says

    偶然经过贵站,盼望回访xrpmoon.com/blog



Some HTML is OK

or, reply to this post via trackback.