Debian系统SquidGuard结合Squid3进行上网行为管理(网页过滤)

!本文可能 超过1年没有更新,今后内容也许不会被维护或者支持,部分内容可能具有时效性,涉及技术细节或者软件使用方面,本人不保证相应的兼容和可操作性。

之前有一篇文章介绍如何在树莓派(Raspberry Pi)上架构基于Squid3的透明代理。在文章后面讲到了如何利用广告黑名单进行广告过滤,但是这个方法比较局限,特别是没有分类要过滤的网页类型。

我今天要讲解的是利用Squid的一个插件(姑且这么称呼吧,因为这个软件是随Squid启动而启动的)SquidGuard,该软件会在Squid3处理请求的时候检查SquidGuard所管理的网站分类数据库,并根据自定义的规则进行转向(Redirect)拦截。

今天我们实验的平台依旧是树莓派(Raspberry Pi)的Raspbian,首先用apt-get先安装:

sudo apt-get install squidguard

安装后数据库所在位置为/var/lib/squidguard/db,然后我们需要下载黑名单,SquidGuard官方为我们提供了几个黑名单的数据库(注意:严格意义上来说这边也不能称作“黑名单”,只能说是一个网站分类数据库):

我这里选择URLBlacklist.com提供的网站分类数据库,通过下面的命令下载数据库压缩包到/tmp路径:

wget -q -c "http://urlblacklist.com/cgi-bin/commercialdownload.pl?type=download&file=bigblacklist" -O /tmp/bigblacklist.tar.gz

注意:URLBlacklist.com对于下载次数有限制,不要使用迅雷等多线程下载工具,一旦超过下载限制就会封锁IP至第二天。

然后解压数据库并拷贝至squidguard的数据库路径/var/lib/squidguard/db

cd /tmp
tar zxvf bigblacklist.tar.gz
cd blacklists
mv * /var/lib/squidguard/db

修改SquidGuard配置文件/etc/squidguard/squidGuard.conf

dbhome /var/lib/squidguard/db
logdir /var/log/squidguard

source clients {              # 接入客户端的IP段
  ip 192.168.1.0/24
}

dest ads {                    # 定义一条规则,这里主要针对ads目录下的
  domainlist ads/domains      # 定义域名列表所在位置
  urllist ads/urls            # 定义url列表所在位置
}

dest whitelist {
  domainlist whitelist/domains
  urllist whitelist/urls
}

acl {
  default {
    pass     whitelist !ads all     # 定义规则列表     
    redirect http://192.168.1.1/cgi-bin/block.cgi?clientaddr=%a&clientname=%n&clientuser=%i&clientgroup=%s&url=%u
  }
}

这里我简单解释一下,dest节点指示的是要定义的规则,对应的你可以使用命令ls /var/lib/squidguard/db查阅一下你所在的数据库路径的文件夹名字,然后domainlist指示的是文件夹下面存放待匹配的域名列表,urllist则存放URL列表,最后是一条acl控制规则,pass是要通过的规则,按优先级别排序,要拦截的在前面加上感叹号,全部放行则使用all指示。如果访问请求被拦截,则转向redirect所指示的URL,建议本地服务器架设个WEB服务,然后对被拦截的请求进行处理,当然可以获取clientaddr等客户端信息以便于进一步分析。

注意:这里最好不要拦截ads规则,因为国内很多正常的门户网站都在这个规则里,这里仅作为讲解演示用。

SquidGuard还有一些有用的特性比如上网时间控制等等,限于篇幅我这里就不一一介绍了,好了,我们配置还没结束,下面接着配置。

将SquidGuard附加到Squid3上面去,以便于Squid3启动SquidGuard并将请求转给其过滤,修改Squid3的配置文件/etc/squid3/squid.conf,查找url_rewrite_program节,并添加下面一条,具体路径可以通过命令which squidGuard获取:

url_rewrite_program /usr/bin/squidGuard

设置好相应文件夹的权限,这里需要注意的是SquidGuard相关资源的用户及组最好和Squid3一致,默认安装的情况下Squid3的用户和组都是proxy,所以我们这里的命令如下:

#  以管理员权限运行
chown -R proxy:proxy /var/log/squidguard
find /var/lib/squidguard/db -type f | xargs chmod 644
find /var/lib/squidguard/db -type d | xargs chmod 755
chown -R proxy:proxy /var/lib/squidguard/db

好了,到这里基本上就结束了,出于性能的考虑,我们还要为规则库生成数据库格式的文档,便于快速索引,通过下面的命令进行:

sudo -u proxy squidGuard -C all

注意:如果你在squidGuard.conf配置文件引入的规则比较多的话数据库生成会消耗相应的时间,请耐心等待。

检查日志文件/var/log/squidguard/squidGuard.log看是否有错误。

通过下面两条命令之一重新配置Squid3,使得SquidGuard可以正常工作:

sudo squid3 reload
sudo squid3 -k reconfigure

再次检查日志文件/var/log/squidguard/squidGuard.log看是否启动成功。也可以观察进程确保SquidGuard顺利启动:

ps aux | grep squid

测试SquidGuard是否正常工作,因为我们使用的是URLBlackList建议到其查询网站上找一个在你屏蔽范围内的网站域名或者地址进行测试。

我自己搭建的效果如下:

SquidGuard拦截转向页面

至此我已经介绍完了,Good Luck!

参考来源:SquidGuard-Proxy Server Filter

若无特别说明,本网站文章均为原创,原则上这些文章不允许转载,但是如果阁下是出于研究学习目的可以转载到阁下的个人博客或者主页,转载遵循创作共同性“署名-非商业性使用-相同方式共享”原则,请转载时注明作者出处谢绝商业性、非署名、采集站、垃圾站或者纯粹为了流量的转载。谢谢合作!
请稍后...

发表评论

电子邮件地址不会被公开。 必填项已用*标注