Squid是一个缓存Internet数据的软件,其接收用户的下载申请,并自动处理所下载的数据。当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。Squid可以代理HTTP、FTP、GOPHER、SSL和WAIS等协议并且,Squid可以自动地进行处理,可以根据自己的需要设置Squid,使之过滤掉不想要的东西。

Squid可以工作在很多的操作系统中,如AIX、Digital、UNIX、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。

在使用过程中,合理使用访问控制是非常重要的工作。使用访问控制特性,可以控制其在访问时根据特定的时间间隔进行缓存、访问特定站点或一组站点等等。Squid访问控制有两个要素:ACL元素和访问列表。访问列表可以允许或拒绝某些用户对此服务的访问。下面分别介绍ACL元素以及访问列表的使用方法。

1.ACL元素

该元素定义的语法如下:

acl aclname acltype string1…
acl aclname acltype "file"…

当使用文件时,该文件的格式为每行包含一个条目。

其中,acltype可以是src、dst、srcdomain、dstdomain、url_regex、urlpath_regex、time、port、proto、method中的一任意一种。

src:指明源地址。可以用以下的方法指定:

acl aclname src ip-address/netmask ... 客户ip地址
acl aclname src addr1-addr2/netmask ... 地址范围

dst:指明目标地址,即客户请求的服务器的IP地址。语法为:

acl aclname dst ip-address/netmask ... 

srcdomain:指明客户所属的域,Squid将根据客户IP反向查询DNS。语法为:

acl aclname srcdomain foo.com ... 

dstdomain:指明请求服务器所属的域,由客户请求的URL决定。语法为:

acl aclname dstdomain foo.com ...。此处需要注意的是:如果用户使用服务器IP而非完整的域名时,Squid将进行反向的DNS解析来确定其完整域名,如果失败,就记录为“none”。

time:指明访问时间。语法如下:

acl aclname time [day-abbrevs] [h1:m1-h2:m2][hh:mm-hh:mm]

日期的缩写指代关系如下:

  1. S:指代Sunday
  2. M:指代Monday
  3. T:指代Tuesday
  4. W:指代Wednesday
  5. H:指代Thursday
  6. F:指代Friday
  7. A:指代Saturday

另外,h1:m1必须小于h2:m2,表达式为[hh:mm-hh:mm]。

port:指定访问端口。可以指定多个端口,比如:

acl aclname port 80 70 21 ...
acl aclname port 0-1024 ... 指定一个端口范围

proto:指定使用协议。可以指定多个协议:

acl aclname proto HTTP FTP ...

method:指定请求方法。比如:

acl aclname method GET POST ...

url_regex:URL规则表达式匹配,语法为:

acl aclname url_regex[-i] pattern

urlpath_regex:URL-path规则表达式匹配,略去协议和主机名。其语法为:

acl aclname urlpath_regex[-i] pattern

在使用上述ACL元素的过程中,要注意如下几点:

  1. acltype可以是任一个在ACL中定义的名称。
  2. 任何两个ACL元素不能用相同的名字。
  3. 每个ACL由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换句话说,任一ACL元素的值被匹配,则这个ACL元素即被匹配。
  4. 并不是所有的ACL元素都能使用访问列表中的全部类型。
  5. 不同的ACL元素写在不同行中,Squid将这些元素组合在一个列表中。

2.http_access访问控制列表

根据访问控制列表允许或禁止某一类用户访问。如果某个访问没有相符合的项目,则默认为应用最后一条项目的“非”。比如最后一条为允许,则默认就是禁止。通常应该把最后的条目设为“deny all”或“allow all”来避免安全性隐患。

使用该访问控制列表要注意如下问题:

  1. 这些规则按照它们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。
  2. 访问列表可以由多条规则组成。
  3. 如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。
  4. 一个访问条目中的所有元素将用逻辑与运算连接(如下所示):
    http_access Action声明1 AND 声明2 AND
  5. 多个http_access声明间用或运算连接,但每个访问条目的元素间用与运算连接。
  6. 列表中的规则总是遵循由上而下的顺序。

3.使用访问控制

上面详细讲述了ACL元素以及http_access访问控制列表的语法以及使用过程中需要注意的问题,下面给出使用这些访问控制方法的实例:

(1)允许网段10.0.0.124/24以及192.168.10.15/24内的所有客户机访问代理服务器,并且允许在文件/etc/squid/guest列出的客户机访问代理服务器,除此之外的客户机将拒绝访问本地代理服务器:

acl clients src 10.0.0.124/24 192.168.10.15/24
acl guests src “/etc/squid/guest”
acl all src 0.0.0.0/0.0.0.0
http_access allow clients
http_access allow guests
http_access deny all

其中,文件“/etc/squid/guest”中的内容为:

172.168.10.3/24
210.113.24.8/16
10.0.1.24/25

(2)允许域名为job.net、gdfq.edu.cn的两个域访问本地代理服务器,其他的域都将拒绝访问本地代理服务器:

acl permitted_domain src job.net gdfq.edu.cn
acl all src 0.0.0.0/0.0.0.0
http_access allow permitted_domain
http_access deny all

(3)使用正则表达式,拒绝客户机通过代理服务器访问包含有诸如“sexy”等关键字的网站:

acl deny_url url_regex -i sexy
http_access deny deny_url

(4)拒绝客户机通过代理服务器访问文件中指定IP或者域名的网站,其中文件/etc/squid/ deny_ip中存放有拒绝访问的IP地址,文件/etc/squid/deny_dns中存放有拒绝访问的域名:

acl deny_ip dst “etc/squid/deny_ip”
acl deny_dns dst “etc/squid/deny_dns”
http_access deny deny_ip
http_access deny deny_dns

(5)允许和拒绝指定的用户访问指定的网站,其中,允许客户1访问网站http://www.sina.com.cn,而拒绝客户2访问网站http://www.163.com:

acl client1 src 192.168.0.118
acl client1_url url_regex ^http://www.sina.com.cn
acl client2 src 192.168.0.119
acl client2_url url_regex ^http://www.163.com
http_access allow client1 client1_url
http_access deny client2 client2_url

(6)允许所有的用户在规定的时间内(周一至周四的8:30到20:30)访问代理服务器,只允许特定的用户(系统管理员,其网段为:192.168.10.0/24)在周五下午访问代理服务器,其他的在周五下午一点至六点一律拒绝访问代理服务器:

acl allclient src 0.0.0.0/0.0.0.0
acl administrator 192.168.10.0/24
acl common_time time MTWH 8:30-20:30
acl manage_time time F 13:00-18:00
http_access allow allclient common_time
http_access allow administrator manage_time
http_access deny manage_time

更多Linux管理相关的详细内容请关注我的Linux系统全方位管理专题:http://os.51cto.com/art/201009/228849.htm

本文转自samsunglinuxl51CTO博客,原文链接:http://blog.51cto.com/patterson/394338 ,如需转载请自行联系原作者

巧用Squid的ACL和访问列表实现高效访问控制相关推荐

  1. ACL控制访问列表原理+实验

    ACL控制访问列表原理+实验 1.原理:ACL使用包过滤技术,在路由器上读取ISO七层模型的第三层及第四层包头中的信息,如源地址,目的地址,源端口,目的端口等,根据预先定义好的规则,对包头进行过滤. ...

  2. 控制访问列表_为什么访问控制列表这么难

    控制访问列表 We've all been there. There's a critical delivery, application teams are in a panic requestin ...

  3. 实验七 访问列表配置

    实验七 访问列表配置 预备知识: ACL指令的放置顺序是很重要的. 当路由器在决定是否转发或者阻止数据报的时候,Cisco的IOS软件,按照ACL中指令的顺序依次检查数据报是否满足某一个指令条件. 当 ...

  4. 清默网络——动态访问列表

    动态访问列表 动态ACL,也被称为lock-and-key ACL,在1996年作为选项引入思科 IOS.动态ACL仅支持IP流量.动态ACL依赖于telnet连接,用户telnet路由器,并验证通过 ...

  5. 华为traffic访问列表及Qos基本配置

    文章目录 1 Qos概念 1.1 如何区分数据 1.2 Qos的三种模式 1.3 Qos配置流程 1.4 QoS的三种服务模型 2 访问列表traffic实验配置 2.1 实验环境及拓扑图 2.2 R ...

  6. 新手必看的ACL基本访问控制列表及高级访问控制列表

    [温馨提示]需要资料或者需要进群交流划到最底部 ACL原理 ACL是什么 为了过滤数据包,需要配置一些规则,规定什么样的数据包可以通过,什么样的数据包不能通过.这些规则就是通过访问控制列表(Acces ...

  7. python编程试题定位列表元素的函数是_笨办法学Python 习题 34: 访问列表的元素

    列表的用处很大,但只有你能访问里边的内容时它才能发挥出作用来.你已经学会了按顺序读出列表的内容,但如果你要得到第 5 个元素该怎么办呢?你需要知道如何访问列表中的元素.访问第一个元素的方法是这样的:a ...

  8. DottedDict-提供一种使用点路径符号访问列表和字典方法的python库

    DottedDict是一个Python库,提供一种使用点路径符号访问列表和字典的方法.访问由列表和字典组成的复杂对象内部的深层路径很有用. 入门 from dotted.collection impo ...

  9. 利用 IP 扩展访问列表实现应用服务的访问限制

    [实训目的] 掌握在交换机上编号的扩展IP访问列表规则及配置. [背景描述] 你是学校的网络管理员,在3560-24交换机上连着学校提供 Telnet的服务器,另外还连接着学生宿舍楼和教工宿舍楼,学校 ...

最新文章

  1. 模拟人脑项目彻底宣告失败:耗资10亿欧,10年前轰动全球,如今死得悄无声息...
  2. Java多线程面试准备:聊聊Executor框架
  3. vue路由匹配实现包容性_包容性设计:面向老年用户的数字平等
  4. Altium AD20分屏显示,交叉选择模式使用,原理图和PCB器件的同步选择
  5. 跨库事务处理 spring+hibernate+struts2+jta
  6. php中echo和print的区别
  7. 【MODIS】MODIS数据的常用下载源
  8. 安装CUDA和CUDNN
  9. 职业玩家手速测试软件,游戏界手速最快的人,APM近千,Faker都自愧不如
  10. PMP之项目质量管理
  11. Spark亚太研究院王家林:从技术的…
  12. 国家职业资格:计算机网络管理员
  13. # IE浏览器打不开网页,google浏览器能打开
  14. 这个网站做数据科学家的FB 但除了社交还做实事
  15. Android之微信开放平台创建应用
  16. 蓝桥杯-基础练习-特殊回文数
  17. 蓝桥杯:三羊献瑞(答案不唯一)
  18. 浅谈AI算力优化技术
  19. php session 超时设置,php如何使用session 超时设置?
  20. 如何在Jupyter中运行R语言

热门文章

  1. 1203. 项目管理
  2. poj2586 Y2K Accounting Bug
  3. 团队任务2:冲刺前的准备
  4. python实现汉诺塔程序
  5. fun(int **p)的使用
  6. 优雅的避免空指针的示例
  7. (Python编程)Pickle对象
  8. const变量初始化问题
  9. 抖音封杀小猪佩奇,一年赚100亿的“社会人”得罪了谁?
  10. extjs曲线数据如何从后端获取_B端产品经理应了解的技术知识(上)