转载自---51CTO博客作者wzlinux

Squid访问控制实例

wzlinux关注0人评论3356人阅读2015-09-01 15:26:22

一、Squid及ACL简介 

代理服务器是介于浏览器和Web服务器之间的另一台服务器。有了该服务器之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,信息会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给客户的浏览器。

现代企业应用代理服务器,除了提高访问速度外,同时,它在实际的应用过程中又通常被企业作为“安全网关”,可以根据企业设定的代理规则来过滤和屏蔽一些用户的非法请求和信息,从而达到保护企业网的目的。在企业开源系统的代理服务中,可以通过设置安全访问控制规则、配置带认证的代理服务以及反向代理服务来确保企业网络安全,本文将详细对这些防护手段进行介绍。

    开源代理服务器Squid简介

Squid可以工作在很多的操作系统中,如AIX、Digital、UNIX、FreeBSD、HP-UX、Irix、Linux、NetBSD、Nextstep、SCO、Solaris、OS/2等。对于Web用户来说,Squid是一个高性能的代理缓存服务器,和一般的代理缓存软件不同、Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。Squid由一个主要的服务程序Squid,一个DNS查询程序DNS server,几个重写请求和执行认证的程序,以及几个管理工具组成。当Squid启动以后,它可以派生出预先指定数目的DNS server进程,而每一个DNS server进程都可以执行单独的DNS查询,这样就大大减少了服务器等待DNS查询的时间。

用户可以从Red Hat Enterprise Linux发行套件中获取该软件的RPM包进行安装并使用#/etc/rc.d/init.d/squid start或者使用#service squid start命令进行服务开启。

    使用安全访问控制限制企业用户上网行为

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

ACL元素

该元素定义的语法如下:

<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-php">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<span style="color:#9a6e3a">-</span>address<span style="color:#9a6e3a">/</span>netmask <span style="color:#999999">.</span><span style="color:#999999">.</span><span style="color:#999999">.</span> 客户ip地址
acl aclname src addr1<span style="color:#9a6e3a">-</span>addr2<span style="color:#9a6e3a">/</span>netmask <span style="color:#999999">.</span><span style="color:#999999">.</span><span style="color:#999999">.</span> 地址范围
dst:指明目标地址,即客户请求的服务器的<span style="color:#990055">IP</span>地址。语法为:
acl aclname dst ip<span style="color:#9a6e3a">-</span>address<span style="color:#9a6e3a">/</span>netmask <span style="color:#999999">.</span><span style="color:#999999">.</span><span style="color:#999999">.</span>
srcdomain:指明客户所属的域,Squid将根据客户<span style="color:#990055">IP</span>反向查询<span style="color:#990055">DNS</span>。语法为:
acl aclname srcdomain foo<span style="color:#999999">.</span>com <span style="color:#999999">.</span><span style="color:#999999">.</span><span style="color:#999999">.</span>
dstdomain:指明请求服务器所属的域,由客户请求的<span style="color:#990055">URL</span>决定。语法为:
acl aclname dstdomain foo<span style="color:#999999">.</span>com <span style="color:#999999">.</span><span style="color:#999999">.</span><span style="color:#999999">.</span>
time:指明访问时间。语法如下:
acl aclname time <span style="color:#999999">[</span>day<span style="color:#9a6e3a">-</span>abbrevs<span style="color:#999999">]</span> <span style="color:#999999">[</span>h1<span style="color:#999999">:</span>m1<span style="color:#9a6e3a">-</span>h2<span style="color:#999999">:</span>m2<span style="color:#999999">]</span><span style="color:#999999">[</span>hh<span style="color:#999999">:</span>mm<span style="color:#9a6e3a">-</span>hh<span style="color:#999999">:</span>mm<span style="color:#999999">]</span>
日期的缩写指代关系如下:
S:指代Sunday
M:指代Monday
T:指代Tuesday
W:指代Wednesday
H:指代Thursday
F:指代Friday
A:指代Saturday
另外,h1:m1必须小于h2:m2,表达式为<span style="color:#999999">[</span>hh:mm<span style="color:#9a6e3a">-</span>hh:mm<span style="color:#999999">]</span>。
port:指定访问端口。可以指定多个端口,比如:
acl aclname port <span style="color:#990055">80</span> <span style="color:#990055">70</span> <span style="color:#990055">21</span> <span style="color:#999999">.</span><span style="color:#999999">.</span><span style="color:#999999">.</span>
acl aclname port <span style="color:#990055">0</span><span style="color:#9a6e3a">-</span><span style="color:#990055">1024</span> <span style="color:#999999">.</span><span style="color:#999999">.</span><span style="color:#999999">.</span> 指定一个端口范围
proto:指定使用协议。可以指定多个协议:
acl aclname proto <span style="color:#990055">HTTP</span> <span style="color:#990055">FTP</span> <span style="color:#999999">.</span><span style="color:#999999">.</span><span style="color:#999999">.</span>
method:指定请求方法。比如:
acl aclname method <span style="color:#990055">GET</span> <span style="color:#990055">POST</span> <span style="color:#999999">.</span><span style="color:#999999">.</span><span style="color:#999999">.</span>
url_regex:<span style="color:#990055">URL</span>规则表达式匹配,语法为:
acl aclname url_regex<span style="color:#999999">[</span><span style="color:#9a6e3a">-</span>i<span style="color:#999999">]</span> pattern
urlpath_regex:<span style="color:#990055">URL</span><span style="color:#9a6e3a">-</span>path规则表达式匹配,略去协议和主机名。其语法为:
acl aclname urlpath_regex<span style="color:#999999">[</span><span style="color:#9a6e3a">-</span>i<span style="color:#999999">]</span> pattern</code></span></span></span>

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

acltype可以是任一个在ACL中定义的名称。

任何两个ACL元素不能用相同的名字。

每个ACL由列表值组成。当进行匹配检测的时候,多个值由逻辑或运算连接;换句话说,任一ACL元素的值被匹配,则这个ACL元素即被匹配。

并不是所有的ACL元素都能使用访问列表中的全部类型。

不同的ACL元素写在不同行中,Squid将这些元素组合在一个列表中。

    http_access访问控制列表

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

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

这些规则按照它们的排列顺序进行匹配检测,一旦检测到匹配的规则,匹配检测就立即结束。

访问列表可以由多条规则组成。

如果没有任何规则与访问请求匹配,默认动作将与列表中最后一条规则对应。

一个访问条目中的所有元素将用逻辑与运算连接(如下所示):

http_access Action声明1 AND 声明2 AND

多个http_access声明间用或运算连接,但每个访问条目的元素间用与运算连接。

列表中的规则总是遵循由上而下的顺序。

二、ACL实战案例

声明:以下所有的访问控制配置必须添加在acl all src 0.0.0.0/0.0.0.0和http_acess deny all或http_access allow all 的前面。因为进程squid是按顺序读取配置文件的。

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

<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash">acl clients src 61.0.3.188/24 172.190.96.33/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</code></span></span></span>

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

<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash">172.168.10.3/24
210.113.24.8/16
10.0.1.24/25</code></span></span></span>

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

<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash">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</code></span></span></span>

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

<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash">acl deny_url url_regex –i sexy
http_access deny deny_url</code></span></span></span>

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

<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash">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</code></span></span></span>

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

<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash">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</code></span></span></span>

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

<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash">acl allclient src 0.0.0.0/0.0.0.0
acl administrator 192.168.10.0/24
acl common_time <span style="color:#dd4a68">time</span> MTWH 8:30-20:30
acl manage_time <span style="color:#dd4a68">time</span> F 13:00-18:00
http_access allow allclient common_time
http_access allow administrator manage_time
http_access deny manage_time</code></span></span></span>

(7)/etc/squid.conf,系统软件包提供、推荐的最小化配置如下,用户可以根据实际情况来进行定制

<span style="color:#333333"><span style="color:#333333"><span style="color:black"><code class="language-bash">acl all src 0.0.0.0/0.0.0.0
acl manager proto cache_object
acl localhost src 192.168.10.3/255.255.255.255
acl SSL_ports port 443 563
acl Safe_ports port 80          <span style="color:slategray"># http</span>
acl Safe_ports port 21          <span style="color:slategray"># ftp</span>
acl Safe_ports port 443 563    <span style="color:slategray"># https, snews</span>
acl Safe_ports port 70          <span style="color:slategray"># gopher</span>
acl Safe_ports port 210         <span style="color:slategray"># wais</span>
acl Safe_ports port 1025-65535 <span style="color:slategray"># unregistered ports</span>
acl Safe_ports port 280         <span style="color:slategray"># http-mgmt</span>
acl Safe_ports port 488         <span style="color:slategray"># gss-http</span>
acl Safe_ports port 591         <span style="color:slategray"># filemaker</span>
acl Safe_ports port 777         <span style="color:slategray"># multiling http</span>
acl Safe_ports port 901         <span style="color:slategray"># SWAT</span>
acl purge method PURGE
acl CONNECT method CONNECT
(<span style="color:#999999">..</span>.)
<span style="color:slategray"># Only allow cachemgr access from localhost</span>
http_access allow manager localhost
http_access deny manager
<span style="color:slategray"># Only allow purge requests from localhost</span>
http_access allow purge localhost
http_access deny purge
<span style="color:slategray"># Deny requests to unknown ports</span>
http_access deny <span style="color:#9a6e3a">!</span>Safe_ports
<span style="color:slategray"># Deny CONNECT to other than SSL ports</span>
http_access deny CONNECT <span style="color:#9a6e3a">!</span>SSL_ports
<span style="color:slategray">#</span>
<span style="color:slategray"># INSERT YOUR OWN RULE(S)HERE TO ALLOW ACCESS FROM YOUR CLIENTS</span>
<span style="color:slategray">#</span>
http_access allow localhost
<span style="color:slategray"># And finally deny all other access to this proxy</span>
http_access deny all
<span style="color:slategray">#Default:</span>
<span style="color:slategray"># icp_access deny all</span>
<span style="color:slategray">#</span>
<span style="color:slategray">#Allow ICP queries from eveyone</span>
icp_access allow all</code></span></span></span>

下面是对一些简单的访问控制,其中acl后面的名字可以自己随意定义

1:禁止局域网内ip 192.168.1.101访问Internet

acl client_101 src 192.168.1.101

http_access deny client_101

2:禁止局域网ip网段 192.168.1.0/24访问internet

acl client_0/24 src 192.168.1.0/24

http_access deny client_0/24

3:只允许访问baidu.com域名

acl goodsite domain –i .baidu.com

http_access allow goodsite

4:允许访问.com .net .org .cn 域名

acl goodsite domain –i .com .cn .net .org

http_access allow goodsite

5:禁止客户端下载包含.exe .mp3 .avi的文件类型。

acl badfiletype urlpath_regex  .mp3 .exe .avi

http_access deny badfiletype

6:只允许客户端192.168.1.101最大并发连接数位3个

acl client_101 src 192.168.1.101

acl maxconnect maxconn 3

http_access deny client_101 maxconnect

配置带认证的代理服务抑制非法用户使用代理服务

默认时,Squid本身不带任何认证程序,但是可以通过外部认证程序来实现用户认证。一般有以下的认证程序:LDAP认证、SMB认证、基于mysql的认证、基于sock5的密码认证和基于Radius的认证。

下面介绍常用的ncsa实现的认证,ncsa是Squid源代码包自带的认证程序之一,从squid 2.5开始都包含了ncsa的模块。在Red Hat Enterprise Linux 发行套件的/usr/lib/squid目录下可以找到ncsa_auth文件。

要使用该认证服务,首先需要创建认证用户和密码:

#htpasswd -c /usr/local/squid/etc/ps_file guest

如果是以后添加用户的话就把-c的参数去掉。

然后,再更改/etc/squid/squid.conf主配置文件,添加如下:

//配置认证文件和用户文件

auth_param basic program /usr/lib/squid/ncsa_auth /usr/local/squid/etc/ ps_file

//指定认证程序的进程数

auth_param basic children 5

//代理服务器的名称

auth_param basic realm Squid proxy-caching web server

//认证有效时间为2小时

auth_param basic credentialsttl 2 hours

//只有认证用户才能访问

acl normal proxy_auth REQUIRED

http_Access allow normal

最后,重启squid服务即可。在浏览器里配上这个代理,打开任意网站,如果弹出了输入用户名和密码的对话框,就证明配置成功了。

©著作权归作者所有:来自51CTO博客作者wzlinux的原创作品,如需转载,请注明出处,否则将追究法律责任

Squid访问控制实例相关推荐

  1. Squid 访问控制配置

    Squid 访问控制配置 主配置文件内加入限制参数 vim /etc/squid/squid.conf # 访问控制 acl http proto HTTP # 限制访问 good_domain添加两 ...

  2. 巧用Squid的ACL和访问列表实现高效访问控制

    Squid是一个缓存Internet数据的软件,其接收用户的下载申请,并自动处理所下载的数据.当一个用户想要下载一个主页时,可以向Squid发出一个申请,要Squid代替其进行下载,然后Squid连接 ...

  3. 搭建Linux安全的Squid代理服务器

    本文介绍Linux下非常著名.常用的Squid代理服务器的使用,并着重讲述如何使用其提供的访问控制策略,来保证代理服务器的合法使用. 代理服务器的功能是代理网络用户取得网络信息,它 是网络信息的中转站 ...

  4. 搭建一个大型网站架构的实验环境(Squid缓存服务器篇)

    Squid是一个高性能的代理缓冲服务器,也许你已经用过Windows平台下的WinGate,MS Proxy Server等功能类似的产品.Squid是一个应用级代理,在保证客户端主机和服务器主机网络 ...

  5. RH5.4下samba共享配置实例(3)

    一.基于用户名的访问控制实例: 王乾大哥写的比较详细了,我是跟着他的教程学习的,按照他的教程走一边: 要求如下: 1.创建一个公共的交换文件夹,所有人都可以写入删除,但不能删除修改其他人的文件 2.创 ...

  6. CentOS-7.2部署Squid服务

    一.安装Squid代理服务器 #yum -y install squid 1.启动Squid服务和设置开机启动 #systemctl start squid #systemctl enable squ ...

  7. squid介绍及其简单配置

    1.Squid是什么? Squid是一种用来缓冲Internet数据的软件.它是这样实现其功能的,接受来自人们需要下载的目标(object)的请求并适当地处理这些请求.也就是说,如果一个人想下载一we ...

  8. squid的简单介绍

    squid的概念 squid是一种用来缓存Internet数据的软件.接受来自人们需要下载的目标(object)的请求并适当的处理这些请求.也就是说,如果一个人想下载一web界面,他请求squid为他 ...

  9. Windows下Squid 3.5安装及配置代理服务器

    本文作者:合肥工业大学 管理学院 钱洋 email:1563178220@qq.com 内容可能有不到之处,欢迎交流. 未经本人允许禁止转载. 文章目录 安装 防火墙设置 常用命令 浏览器设置代理 基 ...

最新文章

  1. 核弹级漏洞!我把log4j扒给你看!
  2. 「内容即服务」市场正在井喷
  3. Module not found: Error: Can't resolve 'less-loader' in 'E:\NodeDemo\vue_assistant_lsp'
  4. 如何获取尚未开票信息(包括交货单、销售订单)
  5. hbase映射为hive表(转载+整理+自己验证)
  6. 如何用面对对象来做一个躁动的小球?
  7. springboot转发http请求_网易后端实习生分享:Springboot异常和错误处理规范
  8. 接口文档生成工具Swagger2的使用
  9. newman执行测试_postman+newman+Jenkins之API全自动化测试(MAC)
  10. python爬取网页版QQ空间,生成词云图、柱状图、折线图(附源码)
  11. js return 闭包为null_那么如何让你的 JS 写得更漂亮?
  12. 2014计算机科学与技术学科国际学术会议ei检索目录,2014年Ei核心期刊源目录(Ei Compendex)...
  13. 基于AM5728 DSP+ARM平台的嵌入式车牌识别
  14. AssertionError: CUDA unavailable, invalid device 0 requested
  15. 考研中国科学院大学计算机分数线,中国科学院大学2017年考研分数线
  16. 猜数字小游戏(有次数限制)
  17. XCTF 攻防世界 web 高手进阶区
  18. 2018年第九届C/C++ B组蓝桥杯省赛真题
  19. 讲一点有技术含量的东西(三)
  20. 查找 —— 基本概念、ASL计算、查找判定树

热门文章

  1. 香港中文大学助理教授周博磊:十年之间的CVPR与我们
  2. C语言文字简单加密程序的实现
  3. 文献—Emergent simplicity in microbial community assembly——中使用的交叉互养模型的代码分析
  4. 一些适合刷算法的网站
  5. x-pack-core-7.12.0破解许可到2050年到期
  6. 牛客2019湘潭大学程序竞赛
  7. 勒索软件攻击创新高,邮件安全需警惕
  8. 『网易实习』周记(二)
  9. 北京公交一卡通刷卡详情查询的网址及查询方法
  10. C#毕业设计——基于C#+asp.net+sqlserver的车辆档案管理系统设计与实现(毕业论文+程序源码)——车辆档案管理系统