首页 > 代码库 > Squid

Squid

Squid 访问控制

我们应该对Squid代理服务从理论上有了一定的认识,接下来通过应用实例的学习,希望能够使大家对Squid代理服务有一个更为深入的理解。在学习实例之前有必要强调一下,Squid访问控制列表是顺序读取的,应将配置文件squid.conf中的以下两个规则始终放置在acl语句的最后,否则这两条规则会覆盖其他的acl语句。

acl all src 0.0.0.0/0.0.0.0
http_access deny all

同样的道理,当配置文件中配置多条访问控制规则时,必须注意其顺序,避免规则相互覆盖或屏蔽。另外,每次修改完配置文件后,若想使修改后的规则生效就必须重新载入配置文件,即运行命令"/etc/rc.d/init.d/squid reload"。

【实例一】禁止IP地址为192.168.1.102的客户机上网。

我们可以定义如下规则实现上述要求:

acl badclientip src 192.168.1.102
http_access deny badclientip

该规则定义了一条名为badclientip的acl,acl类型为src源IP地址方式,列表值为192.168.1.102,然后使用http_access参数禁止badclientip规则。也就是在IP地址为192.168.1.102的客户机通过Squid代理服务上网的模式下,由于Squid服务器增加了如上规则,该终端客户访问Internet资源的请求将会被拦截,终端客户的Web浏览器中会显示拒绝访问的错误提示信息,如图16-31所示。

spacer.gif

(点击查看大图)图16-31 拒绝访问的错误提示信息

【实例二】禁止IP地址属于192.168.1.0这个子网的所有客户机上网。

我们可以定义如下规则实现上述要求:

acl badclientsubnet src 192.168.1.0/24
http_access deny badclientsubnet

该规则定义了一条名为badclientsubnet的acl,acl类型为src源IP地址方式,列表值为192.168.1.0/24,然后使用http_access参数禁止badclientsubnet规则。也就是在IP地址为192.168.1.0子网的客户机通过Squid代理服务上网的模式下,由于Squid服务器增加了如上规则,当前定义子网的终端客户访问Internet资源的请求将会被拦截,终端客户的Web浏览器中会显示拒绝访问的错误提示信息。

【实例三】禁止所有终端用户访问IP地址为64.233.189.99(www.google.com)的网站。

我们可以定义如下规则实现上述要求:

acl badserverip dst 64.233.189.99
http_access deny badserverip

该规则定义了一条名为badserverip的acl,acl类型为dst目标IP地址方式,列表值为64.233.189.99,然后使用http_access参数禁止badserverip规则。也就是在终端用户通过Squid代理服务上网的模式下,由于Squid服务器增加了如上规则,当前所有终端客户访问IP地址为64.233.189.99的服务器资源的请求将会被拦截,终端客户的Web浏览器中会显示拒绝访问的错误提示信息。

【实例四】禁止所有终端用户访问域名为www.google.com的网站。

我们可以定义如下规则实现上述要求:

acl baddomain dstdomain -i www.google.com
http_access deny dstdomain

该规则定义了一条名为baddomain的acl,acl类型为dstdomain目标域名方式,列表值为www.google.com,然后使用http_access参数禁止baddomain规则。也就是在终端用户通过Squid代理服务上网的模式下,由于Squid服务器增加了如上规则,当前所有终端客户访问域名为www.google.com的服务器的Web资源的请求将会被拦截,终端客户的Web浏览器中会显示拒绝访问的错误提示信息。但需要大家注意的是,这个限制规则仅对google.com域的WWW服务进行了限制,而对于Mail服务等并未限制。

16.6 访问控制应用实例(2)

【实例五】禁止所有终端用户访问域名包含为google.com的网站。

我们可以定义如下规则实现上述要求:

acl badurl url_regex -i google.com
http_access deny badurl

该规则定义了一条名为badurl的acl,acl类型为url_regex URL规则表达式匹配方式,列表值为google.com,然后使用http_access参数禁止badurl规则。也就是在终端用户通过Squid代理服务上网的模式下,由于Squid服务器增加了如上规则,当前所有终端客户访问服务器的URL中含有google.com的所有资源的请求将会被拦截,终端客户的Web浏览器中会显示拒绝访问的错误提示信息。例如,www.abc.com/google/test.indexwww.google.com、mail.google.com等URL均被拦截。

【实例六】限制IP地址为192.168.1.102的客户机并发连接的最大连接数为5。

我们可以定义如下规则实现上述要求:

acl clientip src 192.168.1.102
acl clientmaxconn maxconn 5
http_access deny clientip clientmaxconn

上述规则定义了一条名为clientip的acl,该acl类型为src源地址方式,列表值为192.168.1.102;还定义了一条名为clientmaxconn的acl,该acl类型为maxconn单一IP的最大连接数方式,列表值为5,然后使用http_access参数禁止clientip、clientmaxconn规则。也就是在终端用户通过Squid代理服务上网的模式下,由于Squid服务器增加了如上规则,终端用户通过IP地址为192.168.1.102的客户机同时访问Internet资源的线程数不能超过5。这样可以防止特定客户开太多线程而占用服务器资源和带宽。

【实例七】禁止客户机IP地址在192.168.2.0子网的所有终端客户在星期一到星期五的9:00到18:00访问Internet资源。

我们可以定义如下几条规则实现上述要求:

acl clientnet src 192.168.2.0/24
acl worktime time MTWHF 9:00-18:00
http_access deny clientnet worktime

上述规则定义了一条名为clientnet的acl,该acl类型为src源地址方式,列表值为192.168.2.0/24;还定义了一条名为worktime的acl,该acl类型为time时间段方式,列表值为MTWHF 9:00-18:00,然后使用http_access参数禁止clientnet、worktime规则。也就是在终端用户通过Squid代理服务上网的模式下,由于Squid服务器增加了如上规则,终端用户通过IP地址属于192.168.2.0网段的所有客户机不能在星期一到星期五的9:00到18:00期间访问Internet资源。

【实例八】禁止终端用户在任何客户机上下载文件扩展名为mp3、exe、zip和rar类型的文件。

我们可以定义如下规则实现上述要求:

acl badfile urlpath_regex -i \.mp3$ \.exe$ \.zip$ \.rar$
http_access deny badfile

该规则定义了一条名为badfile的acl,该acl类型为urlpath_regex略去协议和主机名的URL规则表达式匹配方式,列表值为\.mp3$ \.exe$ \.zip$ \.rar$;同时使用-i参数是为了忽略列表值大小写的检查,然后使用http_access参数禁止badfile规则。也就是在终端用户通过Squid代理服务上网的模式下,由于Squid服务器增加了如上规则,所有终端客户访问服务器的URL中以mp3、exe、zip和rar结尾的所有资源的请求将会被拦截,终端客户的Web浏览器中会显示拒绝访问的错误提示信息。例如,http://www.abc.com/google/test.mp3http://www.cqit.edu.cn/cs/123.ziphttp://www.cqit.edu.cn/cs/siyanzhidao. rar等URL均被拦截。