Debian系统SquidGuard结合Squid3进行上网行为管理(网页过滤)
提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!
之前有 一篇文章 介绍如何在树莓派(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建议到其 查询网站 上找一个在你屏蔽范围内的网站域名或者地址进行测试。
我自己搭建的效果如下:
至此我已经介绍完了,Good Luck!