测试web过滤的功能

类别:编程语言 点击:0 评论:0 推荐:
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

 

本文地址:http://com.8s8s.com/it/it25587.htm