一. 前言
本文主要介绍了在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脚本语言。
本文主要介绍了在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下。
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
/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 组。
( 其余参数用默认值即可! )
修改 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
}
修改 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
}
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
}
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
}
domainlist porn/domains
urllist porn/urls
expressionlist porn/expressions
}
acl { #
访问规则定义
admin within testtime {
pass !porn all
} else {
pass all
}
admin within testtime {
pass !porn all
} else {
pass all
}
client {
pass !in-addr !porn all
}
pass !in-addr !porn all
}
default {
pass none
redirect [url]http://admin.foo.com[/url]
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 )
}
}
[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 )
(域列表文件:主要是阻塞一些定义的站点)
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] 等 )
( 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] 等 )
( 表达式列表文件,主要是阻塞一些与表达式匹配的 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]
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 代理的例子,其它的应用和功能大家可以自己试试
$ 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 代理的例子,其它的应用和功能大家可以自己试试