Server:
IP 192.168.88.39,DNSSERVER 218.106.182.69
操作系统 rh9 内核 2.4.20-8
测试时,运行其自带的apache web server
访问控制其实只是squid的功能之一,别的用不上的功能可以在编译的时候屏蔽掉。在本次测试中屏蔽了其缓存功能。
在squid中,用access control list(acl)来管理规则,主要包括ACL elements 和Access List。
其中ACL element 包括src, dst, myip, srcdomain, dstdoman, method等等,参照附件1,是squid规定的acl类别(acltype),主要用来设置aclname,设置格式如下:
acl aclname acltype string1 ...
acl aclname acltype "file"
其中aclname是该list的名称,可由用户自由定义,acltype也就是ACL element 定义string 为用户的设置,也可以通过file从外部调用。Squid不允许一个aclname对应不同的acltype。
Access List是squid规定的规则列表,如http_access等等,参照附件1,设置规则时,每个access list后面跟一个关键字allow或者是deny,然后再是一串 aclname。如果一条规则中含有多个aclname,那么它们之间是逻辑与的关系,也就是说,只有当该规则中的所有aclname都匹配的时候,该规则才匹配。可以用以下描述来表示同一条规则中各个acl之间的关系以及每条规则之间的关系。
http_access allow|deny acl AND acl AND ...
OR
http_access allow|deny acl AND acl AND ...
OR
当请求不满足任何一条用户定义的规则时,最后一条规则(缺省规则)将被执行。所以建议将缺省规则设置为:
acl all src 0.0.0.0/0.0.0.0
http_access deny all
1、 下载squid http://www.squid-cache.org/Versions/v2/2.5/, configure(指定安装路径和其他参数), make, make install
2、 安装成功后,在安装目录下应该有以下目录:bin, etc, libexec, man, sbin, share, var
其中sbin下有squid执行程序,share 路径下是文挡等辅助资料,var目录下是运行日志,etc下是配置文件,以下所有的测试用例都是通过修改etc下的squid.conf中的相关规则来实现的。
3、 基本的规则设置:(squid.conf)
#defaults
acl all src 0.0.0.0/0.0.0.0
http_access deny all
以上的两条规则保证,当请求未能匹配任何一条用户定义的规则时,http access deny all 规则将被应用,于是该http请求被拒绝。
4、 以root登陆,运行./squid –z
在本测试中,由于未用到其缓存功能,在配置中将: cache_dir null /tmp,
且编译时带参数 --enable-storeio=ufs,null
5、web过滤测试
测试用例a:
规则描述:
1)允许http和FTP协议
2)允许对80端口和21端口的连接
3)允许192.168.88.0/24网段的IP
4)屏蔽192.168.89.0/24网段的IP
则在squid.conf文件中添加规则如下,然后重新启动squid.
#acl manager proto HTTP FTP
acl allowedIP src 192.168.88.0.24
acl safeports port 80 21 443
acl connect method CONNECT
http_access deny !safeports
http_access allow allowedIP
此时将客户端IP设置为192.168.88.30
在IE中输入http://192.168.88.31,能正常弹出apache默认页面。FTP能正常连接。
若将客户端IP改为192.168.89.30,则http和FTP请求都失败。
结论:
http_access allow allowedIP和http_access deny all 规则生效
可以利用squid对客户端IP地址(段)进行过滤。
测试用例b:
将测试用例a中 acl safeports port 80 21 443 规则改为 acl safeports port 80 443
此时将可户端IP设置为192.168.88.30,http请求成功,ftp请求失败
结论:可以利用squid进行端口访问控制。
测试用例c:
在squid.conf中加入以下规则:
acl badip dst "/usr/local/squid/etc/somebadip"
http_access deny badip
则文件/usr/local/squid/etc/somebadip中列出的目标地址被屏蔽。
NOTE: 在此例中,文件中保存的是一些站点的IP地址,如果要用域名代替,则应用dstdomain代替规则中的dst。
结论: 可以用squid进行目标地址过滤
以上只是简单地测试了squid的源地址过滤,目标地址过滤,端口过滤等功能。
在实际的应用中,可以实现更加复杂的功能,比如在将测试用例a中增加
acl allowedusers proxy_auth REQUIRED
http_access allow allowedusers
即变88网段的IP可以直接通过,而其余的用户则需要认证才能通过。
结论:通过不同的逻辑组合,以及access list不同的顺序对其进行灵活的设置,可以利用squid满足web过滤的需求。
1、 squid在启动时会检查DNS,所以要保证DNS的设置是正确的。
2、 第一次运行squid前,要先运行squid –z ,用来创建缓存,即使象本例中将其路径设成NULL,也要保证cache路径存在。(squid在运行后将chdir到该路径,好象当coredump_dir被打开的话,cachedir路径可以不存在。未尝试。)
3、 若不能启动squid,通常是因为权限不对(特别是以非root用户运行时),请重点检查 …/squid/var/logs
…/squid/var/cache等路径的权限。查看syslog,cache.log。
4、 要保证规则设置的书写和逻辑都是合法的。
5、 前台运行:squid -NCd1