好学IT学院:IT信息技术分享交流平台
标签:Linux  来源:ChinaItLab  作者:佚名  发布时间:2008-10-20  ★★★加入收藏〗〖手机版
Linux代理服务全攻略——Squid篇
摘要:代理提供两个方面的服务:一是让不能直接访问Internet的用户访问Internet,因为允许一台权限较大的计算机直接连接网络更安全也更易于管理;二是让那些已经能够访问Internet的用户可以更快或更广泛地访问,因为代理服务器可以将访问较为频繁的网页缓存到本…

所有设置完成后,关键且重要的任务是访问控制。Squid支持的管理方式很多,使用起来也非常简单(这也是有人宁愿使用不做任何缓存的Squid,也不愿意单独使用iptables的原因)。Squid可以通过IP地址、主机名、MAC地址、用户/密码认证等识别用户,也可以通过域名、域后缀、文件类型、IP地址、端口、URL匹配等控制用户的访问,还可以使用时间区间对用户进行管理,所以访问控制是Squid配置中的重点。Squid用ACL(Access

Control
  List,访问控制列表)对访问类型进行划分,用http_access
  deny

或allow进行控制。根据需求首先定义两组用户advance和normal,还有代表所有未指明的用户组all及不允许上网的baduser,配置代码如下:

acl
  advance
  192.168.0.2-192.168.0.10/32
  acl
  normal
  src
  192.168.0.11-192.168.0.200/32
  acl
  baduser
  src
  192.168.0.100/32
  acl
  baddst
  dst
  www.somebadsite.com
  acl
  all
  src
  0.0.0.0/0
  http_access
  deny
  baduser
  http_access
  allow
  advance
  http_access
  allow
  normal

可以看出,ACL的基本格式如下:

acl
  列表名称
  控制方式
  控制目标
  比如acl
  all
  src

0.0.0.0/0,其名称是all,控制方式是src源IP地址,控制目标是0.0.0.0/0的IP地址,即所有未定义的用户。出于安全考虑,总是在最后禁止这个列表。

下面这个列表代表高级用户,包括IP地址从192.168.0.2到192.168.0.10的所有计算机:

acl
  advance
  192.168.0.2-192.168.0.20/32

下面这个baduser列表只包含一台计算机,其IP地址是192.168.0.100:

acl
  baduser
  192.168.0.100/32

ACL写完后,接下来要对它们分别进行管理,代码如下:

http_access
  deny
  baduser
  http_access
  allow
  advance
  http_access
  allow
  normal

上面几行代码告诉Squid不允许baduser组访问Internet,但advance、normal组允许(此时还没有指定详细的权限)。由于Squid是按照顺序读取规则,会首先禁止baduser,然后允许normal。如果将两条规则顺序颠倒,由于baduser在normal范围中,Squid先允许了所有的normal,那么再禁止baduser就不会起作用。

特别要注意的是,Squid将使用allow-deny-allow-deny……这样的顺序套用规则。例如,当一个用户访问代理服务器时,Squid会顺序测试Squid中定义的所有规则列表,当所有规则都不匹配时,Squid会使用与最后一条相反的规则。就像上面这个例子,假设有一个用户的IP地址是192.168.0.201