Squid代理上的Web过滤
本HOWTO描述了如何通过HTTP代理来保护您的家庭/小型企业网络用户免受令人反感的互联网内容。 我们的目标是建立一个运行Squid的免费的基于Linux的服务器,并在其上部署Web过滤应用程序,从而节省带宽,加快Web访问速度,阻止强制性和潜在的非法和恶意Web文件。
在本教程中,我将假设网络环境由SOHO级路由器组成,分布无线Wi-Fi,多台台式机和笔记本电脑,iPad和一些移动智能手机,如下图所示。
在代理服务器上设置CentOS 6.2 Linux
我们的代理服务器将使用免费版本的CentOS Linux 6.2构建。 也可以使用RedHat Linux 6.2,付费订阅您需要保证对您的服务器的支持级别。
为了安装CentOS Linux,请访问http://mirror.centos.org/centos/6/isos/i386/并下载CentOS-6.2-i386-minimal.iso映像文件。 将其刻录在备用CD上,插入服务器的CD驱动器并打开它。
按照安装步骤接受默认值或根据需要自定义安装所需的部分。 将机器主机名配置为“代理”,将root密码配置为“P @ ssw0rd”(不带引号)。 等待安装完成,然后重新启动系统。
安装的CentOS版本通常默认情况下不启用网络连接。 为了实现网络访问,我们需要执行以下操作。
- 通过修改启动脚本
/ etc / sysconfig / network-scripts / ifcfg-eth0,
将静态IP地址192.168.1.2
与网络掩码255.255.255.0分配
给我们的代理服务器。 打开它并添加以下行:BOOTPROTO=static NETMASK=255.255.255.0 IPADDR=192.168.1.2 ONBOOT=yes
- 在
/ etc / sysconfig / network
配置文件中通过添加此行设置默认网关设置:GATEWAY=192.168.1.1
- 通过添加在路由器上运行的DNS服务器的IP地址来调整
/etc/resolv.conf中
的DNS解析设置:nameserver 192.168.1.1
通过键入重新启动您的网络子系统
/etc/init.d/network restart
在根终端或通过重新启动服务器。 重新启动后,通过键入终端确认网络正常工作(这些命令的输出不应该有任何错误):
$ ping -c 3 192.168.1.1
$ nslookup google.com
在进行任何进一步安装之前,建议使用最新的安全补丁来更新新安装的系统,这些修补程序可能已在ISO发布之后出现。 所以输入
yum update
在根终端,并在更新完成后重新启动服务器。
在代理服务器上安装Squid
我们将使用Squid作为在代理服务器上运行的缓存和过滤代理。 为了安装6.2 CentOS分发类型附带的Squid版本
yum install squid
在根终端。 Squid和所有相关的软件包和依赖项都从Internet下载并自动安装。
使squid代理服务通过键入自动启动系统启动
chkconfig squid on
重新启动服务器或者首先手动启动Squid
service squid start
唯一要做的就是让来自我们家庭网络的外部用户访问Squid。 打开配置文件/etc/squid/squid.conf
并添加以下行:
visible_hostname proxy
另外检查http_access是否允许localnet
和配置
文件中存在acl localnet src 192.168.0.0/16
。
通过键入重新启动Squid
service squid restart
通过将用户浏览器指向代理服务器( 192.168.1.2
)的IP地址并冲浪到某些您最喜欢的网站来验证Squid是否正常运行。
注意:您可能需要调整CentOS中的防火墙设置,以便让代理用户连接到代理服务器上的端口3128。 使用system-config-firewall-tui或iptables命令来做到这一点。 一个好主意是允许访问端口80,因为我们将使用此端口通过Web UI管理QuintoLabs内容安全性,如下所述。
设置QuintoLabs内容安全
下一步是从QuintoLabs安装Squid的Content Security(我将在文本中进一步将其称为qlproxy)。 对于那些不知道的人,QuintoLabs内容安全是一个ICAP守护进程/ URL重写器,它与现有的Squid代理服务器集成,并提供丰富的内容过滤功能,以清理通向内部家庭/企业网络的Web流量。 它可能用于阻止非法或潜在的恶意文件下载,删除烦人的广告,阻止访问各种类别的网站,并以明确的内容(即禁止显式和成人内容)阻止资源。
注意:除了qlproxy之外,还有其他工具具有几乎相同的功能。 一些着名的是SquidGuard(SG)和DansGuardian(DG)。 虽然这些工具从理论的角度来看是可以的,但您需要安装它们以获得与qlproxy相同的功能。 SG作为URL Rewriter运行,DG甚至作为一个单独的代理本身。 它还不支持依赖资源无效的每个连接过程的服务器模型的SMP处理,导致对URL块数据库的爆炸性要求。 将SG和DG绑定在一起也是一个问题,因为它们具有不同的配置指令,并且在很大程度上独立于彼此之间强制管理员在需要仅调整一个过滤策略时查看两个不同的地方。
我们将使用本月发布的版本2.0的qlproxy。 该版本最突出的特征是基于策略的Web过滤,当代理的用户被组织成具有不同严格级别的几个组时。
默认情况下,qlproxy附带三个预先安装的策略。 严格的政策包含最高级别的网页过滤器设置,并且应该保护未成年人和K12学生免受互联网上不适当的内容。 宽松的政策只阻止过多的广告,并被网络管理员,教师和所有不需要过滤访问网络但希望避开大多数广告的用户使用。 最后一个组是默认的,并且包含较少的限制性Web过滤设置,适合于正常的网页浏览,而不显示成人内容。
这样做的好处是,您可以自由设计策略,您可以找到不适合您的网络环境的预定义策略。
无论如何,为了安装Content Security 2.0,我们必须从QuintoLabs网站http://www.quintolabs.com/qlicap_download.php手动获取CentOS / RedHat RPM软件包,并使用scp将软件包上传到代理服务器。 另一种方法是直接在代理服务器的根终端中键入以下命令(一行):
# curl http://quintolabs.com/qlproxy/binaries/2.0.0/qlproxy-2.0.0-bb01d.i386.rpm>qlproxy-2.0.0-bb01d.i386.rpm
下载完成(约21Mb)后,运行以下命令来安装下载的软件包及其所有依赖项(注意,该软件包来自i386版本,但是yum会在x86_64架构上进行正确的安装):
# yum localinstall qlproxy-2.0.0-bb01d.i386.rpm
yum安装经理将运行一段时间,程序将安装到/ opt / quintolabs / qlproxy
(二进制文件), / var / opt / quintolabs / qlproxy
(各种日志和内容过滤数据库)和/ etc / opt / quintolabs / qlproxy
(配置)。
注意:此方法假设您的机器上已禁用SELinux。 考虑到基于SELinux的qlproxy安装的具体说明,请参阅他们的网站,并在/ opt / quintolabs / qlproxy / usr / share / selinux中安装SELinux策略示例。 为了禁用SELinux设置SELINUX =在/ etc / selinux / config中禁用并重新启动。
整合Squid和内容安全
QuintoLabs内容安全性可以与Squid以两种不同的方式集成 - 作为ICAP服务器和URL重写器。 建议使用ICAP集成,因为它可以访问通过Squid的所有HTTP流量,并允许qlproxy执行完整的请求和响应过滤(Squid版本3及更高版本支持ICAP)。
/ etc / opt / quintolabs / qlproxy
文件夹中的README文件包含有关如何在不同平台(Debian,Ubuntu,RedHat甚至Windows)上执行与Squid的集成的详细说明。 要将其与在CentOS上运行的Squid集成,我们需要将以
下行添加到/etc/squid/squid.conf
配置文件中:
icap_enable on icap_preview_enable on icap_preview_size 4096 icap_persistent_connections on icap_send_client_ip on icap_send_client_username on icap_service qlproxy1 reqmod_precache bypass=0 icap://127.0.0.1:1344/reqmod icap_service qlproxy2 respmod_precache bypass=0 icap://127.0.0.1:1344/respmod adaptation_access qlproxy1 allow all adaptation_access qlproxy2 allow all
通过键入重新启动Squid
service squid restart
并尝试冲浪您最喜欢的网站,并查看有多少广告被阻止。 另一个有用的测试是去eicar.com网站,并尝试下载一个示例的人造eicar.com病毒,以查看* .com文件被下载过滤器阻止。
Content Security的默认安装是非常实用的,但为了根据前面描述的网络要求进行调整,我们将必须执行一些配置更改,如下所述( 所有路径都相对于/ etc / opt / quintolabs / qlproxy /政策 ):
- 将所有普通用户加入严格的过滤策略,方法是将
严格的/ members.conf
文件的IP地址(或用户名,如果您的Squid执行身份验证)。 - 通过将所有强力用户的IP地址或用户名添加到
轻松的/ members.conf
文件中,将所有强力用户置于轻松过滤策略中。 - 启用扩展AdBlock订阅,以阻止在两个策略的
block_ads.conf
配置文件中阻止英语,德语和俄语广告。 还可以通过在相同的文件中取消注释EasyPrivacy订阅来阻止常见的Web跟踪引擎。 - 在
strict / block_adult_sites.conf
文件中将成人阻止启发式的级别提高到“高”。 尽管可能会导致过多的虚假阻塞,但总是有可能将错误地阻止的站点添加到例外列表中。 - 使用社区开发的分类域数据库的UrlBlock模块错误地将blogspot.com添加到成人类别中...因此我们将把它添加到轻松/ exceptions.conf中的轻松策略的例外列表中,以便能够阅读博客。
- 知道蠕虫,木马和其他恶意软件相关的软件通常用数字IP地址而不是正常的主机名连接到世界,我们将把一个神奇的regexp
url = http:// \ d + \。\ d + \。\ d + \。\ d + /.*
into strict / block_sites_by_name.conf文件阻止通过IP访问网站。
现在发出一个重启命令使qlproxyd守护进程重新加载配置
/etc/init.d/qlproxy restart
使用Apache设置内容安全的Web UI
QuintoLabs内容安全性包含一个最小的Web UI,可让您查看当前的程序配置,使用您喜爱的浏览器从远程主机查看使用活动的报告和程序日志。 Web UI是使用Django Python Framework编写的,并使用部署在虚拟化Python环境中的mod_wsgi与Apache集成(以最小化包依赖性)。
要安装Apache,请在根终端中键入以下内容
yum install httpd
通过键入,使系统启动时使Apache服务自动启动
chkconfig httpd on
重新启动机器,或者首先通过键入手动启动Apache
service httpd start
然后通过键入根终端安装其他Apache和Python模块:
# yum install mod_wsgi python-setuptools
# easy_install virtualenv
# cd /var/opt/quintolabs/qlproxy/www
# virtualenv --no-site-packages qlproxy_django
# ./qlproxy_django/bin/easy_install django==1.3.1
将Web UI与Apache集成,将以下行添加到配置文件/etc/httpd/httpd.conf中
:
<VirtualHost *:80> ServerName proxy.lan ServerAdmin webmaster@proxy.lan LogLevel info ErrorLog /var/log/httpd/proxy.lan-error.log CustomLog /var/log/httpd/proxy.lan-access.log combined # aliases to static files (must come before the mod_wsgi settings) Alias /static/ /var/opt/quintolabs/qlproxy/www/qlproxy/static/ Alias /redirect/ /var/opt/quintolabs/qlproxy/www/qlproxy/redirect/ # mod_wsgi settings WSGIDaemonProcess proxy.lan display-name=%{GROUP} WSGIProcessGroup proxy.lan WSGIScriptAlias / /var/opt/quintolabs/qlproxy/www/qlproxy/qlproxy.wsgi <Directory /var/opt/quintolabs/qlproxy/www/qlproxy> Order deny,allow Allow from all </Directory> </VirtualHost>
将以下行添加到/etc/httpd/conf.d/wsgi.conf
以使mod_wsgi以守护程序模式运行:
WSGISocketPrefix /var/run/wsgi
注意:如果您尝试访问http:// localhost的
“访问被拒绝”错误页面,请检查SELinux权限是否可能阻止访问/ var / opt / quintolabs / qlproxy / www / qlproxy
/目录以进行httpd进程。
重新启动Apache后,导航到http://192.168.1.2/qlproxy
以查看程序配置,日志和生成的报告。
恢复
唯一剩下的就是将网络用户指向代理服务器。 有几种可能性自动执行(认为WPAD),但是为了测试目的,手动代理配置应该是足够的。 所以将浏览器指向192.168.1.4端口3128的代理,冲浪到一些喜爱的网站,并查看区别 - URL中的IP地址被阻止,明确的成人内容网站被禁止。 服务器上的RAM和CPU使用量很小,冲浪体验是可以接受的。 系统每天自动更新一次最新的URL块列表和AdBlock订阅,并且需要最少的额外维护。
有关详细信息,请参阅以下资源: