一
.
前言
本文主要介绍了在
linux
使用
squid
和
squidGuard
配置代理服务器,以
www
代理服务为例介绍如何过滤有害站点和限制用户对
internet
的访问。
二
.
介绍
Squid
是
Linux
下最为流行的代理服务器软件,它功能强大,支持对
HTTP
,
FTP
,
Gopher
,
SSL
和
WAIS
等协议的代理;设置简单,只需对配置文件中稍稍改动就可使代理服务器运转起来。而且
Squid
具有页面缓存功能,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户象要下载一个主页时,它向
Squid
发出一个申请,要
Squid
替它下载,然后
Squid
连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,
Squid
把保存的备份立即传给用户,使用户觉得速度相当快。
squidGuard
则是作为
squid
的辅助软件,完成过滤、重定向和访问控制的功能。它是一个自由软件,功能强,便于安装、易于配置、而且处理速度快。功能主要包括:根据
web
服务器或
URLs
列表限制一些用户的访问;阻塞某些用户对黑名单上的
web
服务器和
URLs
的访问;阻塞某些用户对正则表达式匹配的
URLs
的访问;在
URL
路径加强了使用域名访问而禁止用
IP
访问;重定向阻塞的
URLs
到一个智能
CGI
的信息页;重定向非授权用户到一个注册页面;具有基于日期、每周、每天具体时间的访问规则;对不同用户组有不同的规则。但是不能过滤、检查文档中的文本以及
HTML
中的
JavaScript
或
Vbscript
脚本语言。
三
.
安装
1.
安装
squid
:
从
[url]www.squid-cache.org[/url]
下载
squid-2.4.STABLE2-src.tar.gz
存在本地
/usr/local/squid/src
下。
在编译
Squid
之前,建立一个专门运行
Squid
的用户和组,这里建立了名为
squid
的组和用户,用户目录设为
/usr/local/squid
#su squid
$cd /usr/local/squid/src
$tar xvzf squid-2.4.STABLE2-src.tar.gz
$ cd squid-2.4.STABLE2
$./configure
$make
$make install
(
默认安装到
/usr/local/squid
目录下
)
2.
安装
Berkeley DB 2.x:
从
[url]http://www.sleepycat.com[/url]
下载
db- 2.7.7 .tar.gz
并存在
/usr/local/squidGuard/src/
目录下
$su
#cd /usr/local/squidGuard/src/
#tar xvzf db-2.7.7.tar.gz
#cd db-2.7.7
#cd build_unix
#../dist/configure
#make
#make install
(
默认安装到
/usr/local/BerkeleyDB
目录下
)
注意:
squid
G
uard
不支持
Berkeley DB 3.x
版本
3.
安装
squidGuard
从
[url]http://ftp.ost.eltele.no/pub/www/proxy/squidGuard/squidGuard-1.1.4.tar.gz[/url]
下载软件包并存于本地
/usr/local/squidGuard/src/
#cd /usr/local/squidGuard/src/
#tar xvzf squidGuard-1.1.4.tar.gz
#cd squidGuard-1.1.4
#./configure --with-sg-config=/usr/local/squidGuard/squidGuard.conf
--with-sg-logdir=/usr/local/squidGuard/logs
--with-sg-dbhome=/usr/local/squidGuard/db
#make
#make test //
测试
ok
,即可进行下一步安装
#make install
四
.
配置
1
、配置
squid
:
修改
squid
的配置文件
/usr/local/squid/etc/squid.conf
:
http_port 8080
#squid
的代理端口,使用
1024
以下的端口,
squid
必须以
root
身份运行
http_access allow all
#
允许所有的用户通过代理进行
http
访问
redirect_program /usr/local/squid/bin/squidGuard -c /usr/local/squidGuard/squidGuard.conf
#squid
启用
squidGuard
进行过滤和转发
其它参数:
cache_mem
:设置代理服务使用的内存大小,一般推荐为物理内存的三分之一
cache_dir
:指定
cache
目录的路径,默认为
/usr/local/squid/cache
。
maximum_object_size
:
指定
Squid
可以接收的最大对象的大小。
Squid
缺省值为
4M
,可以根据自己的需要进行设定。
cache_dir
:设定缓存的位置、大小。一般格式如下:
cache_dir /usr/local/squid/cache 100 16 256
/usr/local/squid/cache
代表缓存的位置;
100
代表缓存最大为
100M
;
16
和
256
代表一级和二级目录数。
cache_effective_user
:设定使用缓存的有效用户。缺省为用户
nobody
,如果系统中没有用户
nobody
,最好建一个或以非
root
用户运行
Squid
。这里是以
squid
身份运行的
cache_effective_group
:设定使用缓存的有效用户组。缺省组为
nogroup
,如果系统中没有组
nogroup
,最好建一个组。这里是
squid
组。
(
其余参数用默认值即可!
)
2
.配置
squidGuard:
修改
squid
G
uard
的配置文件
/usr/local/squidGuard/squidGuard.conf
文件:
logdir /usr/local/squidGuard/logs #
日志目录定义
dbhome /usr/local/squidGuard/db #db
目录定义
time testtime { #
时间规则定义
weekly mtwhf 05:00 - 10:30
weekly as 08:00 - 19:00
date *-*-01 08:00 - 16:30
date 2001.10.01 - 2001.10.09
}
src admin { #
源组定义
ip 192.168.100.18
}
src client{
ip 192.168.100.20 192.168.100.21 192.168.100.22
ip 192.168.200.0/24
}
dest porn { #
目标组定义
domainlist porn/domains
urllist porn/urls
expressionlist porn/expressions
}
acl { #
访问规则定义
admin within testtime {
pass !porn all
} else {
pass all
}
client {
pass !in-addr !porn all
}
default {
pass none
redirect [url]http://admin.foo.com[/url]
(#也可以重定向到一个含有一些信息的
cgi
页面,如下:
[url]http://admin.foo.com/cgi/blocked?clientaddr=%a&clientname=%n&clientuser=[/url]
%i&clientgroup=%s&targetgroup=%t&url=%u
)
}
}
# vi db/porn/domains
(域列表文件:主要是阻塞一些定义的站点)
co.za
sex.com
(如上,可以阻塞如
hack.co.za
、
sex.com
、
[url]www.sex.com[/url]
、
whatever.sex.com
,但是不同于
.*[^.]sex.com
,不匹配
ssex.com
)
# vi db/porn/urls
(
url
列表文件,主要是阻塞一些站点及其一些栏目)
qihui.com/sex
valen.sohu.com/album
(
如上可阻塞
[url]http://qihui.com/sex[/url]
、
[url]http://qihui.com/sex/whatever[/url]
、
[url]ftp://qihui.com/sex[/url]
、
[url]http://www.qihui.com/sex[/url]
等
)
# vi db/porn/expressions
(
表达式列表文件,主要是阻塞一些与表达式匹配的
URL
访问
)
(^|[\?+=/])(.*)(girl)(.*)([\?+=/]|$)
(上面的正则表达式可以阻塞
URL
中包括
girl
站点的访问,如:
[url]www.girlzine.com[/url]
、
girl.huabao.net
、
[url]www.huayu.net/girl[/url]
、
[url]www.universiti.com/girl[/url]
等
)
注意:
squidGuard
对配置文件的语法要求很严,如果配置文件语法有误,
squidGuard
仍能运行,但是
squidGuard
已进入应急模式,此时代理服务不具有任何阻塞作用,所有通过该代理的访问都可通过,可以查看
logs/squidGuard
的日志文件,即可发现错误,例如:
2001-12-20 17:08:44 [2430] parse error in configfile /usr/local/squidGuard/squidGuard.conf line 8
2001-12-20 17:08:44 [2430] going into emergency mode
…….
其中配置文件第
8
行有误,
squid
G
uard
进入应急模式。
配置的具体说明详见
[url]http://www.squidguard.org/[/url]
五
.
运行:
$ chmod 777 /usr/local/squid/logs
设置
logs
对所有用户为可写。这样,不特定的
squid
代理客户才能正常访问代理服务器,并能在
logs
目录、产生
access.log
、
cache.log
等文件。)
$ /usr/local/squid/bin/squid -z
(
手工建立
squid
的缓存目录
/usr/local/squid/cache
。
)
#/usr/local/squid/bin/squid
(
后台执行
squid
。如果想前台执行
squid
:如果你想前台执行
Squid
执行命令:
$/usr/local/squid/bin/squid -NCd1
该命令正式启动
Squid
。如果一切正常,你会看到一行输出
:
Ready to serve requests
# ps ax|grep squid
20198 ? S 0:00 /usr/local/squid/bin/squid
20200 ? S 0:27 (squid)
20310 ? S 0:00 (squidGuard) -c /usr/local/squidGuard/squidGuard.conf
20311 ? S 0:00 (squidGuard) -c /usr/local/squidGuard/squidGuard.conf
20312 ? S 0:00 (squidGuard) -c /usr/local/squidGuard/squidGuard.conf
20313 ? S 0:00 (squidGuard) -c /usr/local/squidGuard/squidGuard.conf
20314 ? S 0:00 (squidGuard) -c /usr/local/squidGuard/squidGuard.conf
(此时
squidGuard
也已启用,每次修改配置后
squid -k reconfigure
重新起用即可,要杀掉
squid
执行
squid -k kill
)
查看
squidGuard
日志文件:
init domainlist /usr/local/squidGuard/db/porn/domains
2001-12-20 16:14:43 [2270] init domainlist /usr/local/squidGuard/db/porn/domains
2001-12-20 16:14:43 [2270] init urllist /usr/local/squidGuard/db/porn/urls
2001-12-20 16:14:43 [2270] init expressionlist /usr/local/squidGuard/db/porn/expressions
2001-12-20 16:14:43 [2270] squidGuard 1.1.4 started (1008836083.022)
2001-12-20 16:14:43 [2270] recalculating alarm in 917 seconds
2001-12-20 16:14:43 [2270] squidGuard ready for requests (1008836083.044)
表示
squidGuard
已正常启动六
.
测试:
配置客户端,然后测试代理服务:
在另一台
win2k
上,(以
Internet Explore5.0
为例)运行
IE
,单击
"
工具
"
,接着单击
"Internet
选项
"
,再单击
"
连接
"
选项卡,单击
"
局域网设置
"
;在
"
局域网设置
"
窗口中,
?quot;
地址
"
处填上
squid
服务器的
IP
地址
192.168.100.16
,在
"
端口
"
处填上
"8080"
(修改后
squid
代理使用的端口号,也就是
squid.conf
中的
http_port
,默认值为
3128
),确定后退出。
接下来,先把
IP
改成
192.168.100.20
,浏览一些网站,如
sohu
,
163
等,然后再试试
domains
和
urls
中定义的,如
hack.co.za
、
qihui.com/sex
,会发现主页被重定向到
[url]http://admin.foo.com[/url]
。然后再试试浏览有关
girl
的网站,去不了了:(;在
sohu
中搜
girl
也被重定向了;用
IP
试试(有些代理程序对IP不做限制,用IP可以绕过代理的限制访问一些禁止的站点),可惜不行!(因为
squid
G
uard
配置文件中使用了!
in_addr
,所以可以强迫用户使用域名访问而不能使用
ip
访问)
再下来,把
IP
改成
192.168.100.18
,然后时间改为
testtime
外的时间,浏览网页,试试结果,然后再将时间改为
testtime
内浏览网页!
最后,把
IP
改成
192.168.100.30
,浏览网页测试。
(可以查看
logs
下的
access.log
和
cache.log
,看看是否代理运行正常以及访问的站点记录)
七
.
总结:
由上可见,用
squid
和
squid
G
uard
建立的代理服务器,配置比较简单,而且功能强大,可以有效的限制一些用户对
internet
的访问并过滤一些黑名单列出的站点(如色情站点等)。
这里只简单的介绍了关于
http
代理的例子,其它的应用和功能大家可以自己试试