Linux代理服务全攻略——Squid篇
所有设置完成后,关键且重要的任务是访问控制。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