. 前言

  本文主要介绍了在linux使用squidsquidGuard配置代理服务器,以www代理服务为例介绍如何过滤有害站点和限制用户对internet的访问。

. 介绍


  SquidLinux下最为流行的代理服务器软件,它功能强大,支持对HTTPFTPGopherSSLWAIS等协议的代理;设置简单,只需对配置文件中稍稍改动就可使代理服务器运转起来。而且Squid具有页面缓存功能,它接收用户的下载申请,并自动处理所下载的数据。也就是说,当一个用户象要下载一个主页时,它向Squid发出一个申请,要Squid替它下载,然后Squid连接所申请网站并请求该主页,接着把该主页传给用户同时保留一个备份,当别的用户申请同样的页面时,Squid把保存的备份立即传给用户,使用户觉得速度相当快。

  squidGuard则是作为squid的辅助软件,完成过滤、重定向和访问控制的功能。它是一个自由软件,功能强,便于安装、易于配置、而且处理速度快。功能主要包括:根据web服务器或URLs列表限制一些用户的访问;阻塞某些用户对黑名单上的web服务器和URLs的访问;阻塞某些用户对正则表达式匹配的URLs的访问;在URL路径加强了使用域名访问而禁止用IP访问;重定向阻塞的URLs到一个智能CGI的信息页;重定向非授权用户到一个注册页面;具有基于日期、每周、每天具体时间的访问规则;对不同用户组有不同的规则。但是不能过滤、检查文档中的文本以及HTML中的JavaScriptVbscript脚本语言。 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

. 安装

  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-<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" />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 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 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 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 uard 配置文件中使用了! in_addr ,所以可以强迫用户使用域名访问而不能使用 ip 访问)

  再下来,把 IP 改成 192.168.100.18 ,然后时间改为 testtime 外的时间,浏览网页,试试结果,然后再将时间改为 testtime 内浏览网页!

  最后,把 IP 改成 192.168.100.30 ,浏览网页测试。

  (可以查看 logs 下的 access.log cache.log ,看看是否代理运行正常以及访问的站点记录)

. 总结:

  由上可见,用 squid squid uard 建立的代理服务器,配置比较简单,而且功能强大,可以有效的限制一些用户对 internet 的访问并过滤一些黑名单列出的站点(如×××站点等)。

  这里只简单的介绍了关于 http 代理的例子,其它的应用和功能大家可以自己试试