使用squid过滤HTTPS流量
本文将告诉您如何编译,设置和配置Squid代理能够使用Diladele Web Safety ICAP内容过滤服务器过滤加密的HTTPS连接。 能够查看HTTPS内容大大增加了您控制网络中允许和接受的内容的能力,同时保持不当的内容。
为什么我们需要过滤HTTPS
HTTPS协议旨在提供互联网浏览器和远程Web服务器之间的安全通信手段。 为了实现这一目标,HTTPS协议对通过已建立连接的数据进行加密,使其无法在合理的时间内解密,从而防止任何人通过此连接嗅探内容。 该协议主要是为了在互联网等不安全媒体上的用户和金融机构或政府机构之间进行安全和安全的通信而发明的。
最近越来越多的网站开始使用HTTPS加密通信来增加用户的在线隐私。 默认情况下,Google首先启用所有搜索的HTTPS可能会启动此趋势。 尽管HTTPS加密对于线上安全是件好事,但我们必须考虑到这一点,也为家庭或办公室通常发现的受控网络带来了一些问题。 这里的主要问题是HTTPS协议本身的本质 - 除了浏览器和Web服务器能够看到并因此过滤传输的数据之外,没有任何人。 这可能并不总是需要。 通常被阻止的内容突然被任何人立即访问。 例如,想像一个学校网络,通过错误地在Google中搜索词,未成年人可以看到有问题的内容。 此外,法律通常迫使教育机构的管理人员阻止对这些内容的访问(例如,教育环境的CIPA)和对网站的加密访问使得几乎不可能履行这样的义务。
为了克服这些限制,建议您通过Squid代理服务器和Diladele Web Safety Web过滤器的SSL突发功能来设置Web内容的HTTPS过滤。
怎么运行的
为了过滤Web请求,用户的浏览器需要明确指示使用部署在同一网络中的代理。 还可以设置透明代理,但是我们不会在本教程中解释这是如何完成的,因为涉及的步骤与显式代理设置有很大的不同。
当用户尝试导航到网站时,浏览器将请求发送到代理服务器,要求代理服务器获取请求的页面。 代理建立与远程站点的新连接,并将响应返回给浏览器。 如果使用正常的HTTP,则代理可以看到响应的原始内容并对其进行过滤。 在HTTPS的情况下,数据流是有点不同的。 浏览器要求代理在自身和远程服务器之间建立虚拟通道,然后通过代理发送加密数据。 正在建立虚拟隧道的域名通常是已知的,因此当发现该域名属于禁止类别时,代理能够阻止该虚拟隧道。 不幸的是,这不是一个完整的解决方案,因为互联网上有很多网站是一般的(如Google或YouTube),但允许您轻松导航到不需要的东西。
为了提高网页过滤的质量并访问加密连接中的内容,网络中的浏览器可能被设置为信任代理,以代表其行为建立HTTPS连接,过滤它们并将允许的数据传递给客户端,同时阻止所有的不允许。 虽然这个假设太严格,不能在公共网络中实施,但是在受控的家庭,教育或公司环境中,管理员可以作为网络设备的唯一所有者,并且可能强制执行任何信任规则,这一点很容易实现。 建立信任浏览器后,可以通过HTTPS安全地请求代理连接到远程站点,代理能够对流量进行解密,过滤,再次加密并将其传递给浏览器。 随着浏览器信任代理,它将继续使用过滤的HTTS,而不会出现任何错误或警告。
不幸的是,大多数常见的Linux / FreeBSD发行版中包含的大多数Squid版本不包含成功进行HTTPS过滤所需的编译开关。 代理管理员需要重新编译Squid代理,重新安装并重新配置其附加的选项列表。 虽然这个过程并不是非常复杂,但是它是非常复杂的,所以必须对所有必要的步骤进行描述。 我们将为最受欢迎的Linux发行版 - Ubuntu Server 13.10提供最新版本的准确说明。
使用SSL Bump和ICAP客户端构建squid
在编译之前,将操作系统置于最近的状态是一个很好的做法。 这可以通过在终端中运行以下命令来完成。
$ sudo apt-get update && sudo apt-get upgrade && sudo reboot
为了从源代码构建Squid,我们需要安装一些构建工具,并从Ubuntu存储库中获取Squid和各种依赖软件包的源代码。 这不需要在生产服务器上进行,可以在一台机器上构建Squid,并将其生成的二进制文件安装在其他机器上。
$ sudo apt-get install devscripts build-essential fakeroot libssl-dev
$ apt-get source squid3
$ sudo apt-get build-dep squid3
运行以下命令将Squid源码包与Ubuntu开发人员提供的所有系统集成脚本和修补程序一起解包。
$ dpkg-source -x squid3_3.3.8-1ubuntu3.dsc
来源已经打包成squid3-3.3.8文件夹。 我们需要将此文件夹设置为当前版本,并在debian / rules
中修改配置选项,以包含HTTPS过滤所需的编译器开关( --enable-ssl
和-enable-ssl-crtd
)。
$ patch squid3-3.3.8/debian/rules < rules.patch
rules.patch
文件应该是这样的。
--- rules 2013-11-15 11:49:59.052362467 +0100 +++ rules.new 2013-11-15 11:49:35.412362836 +0100 @@ -19,6 +19,8 @@ DEB_CONFIGURE_EXTRA_FLAGS := --datadir=/usr/share/squid3 \ --sysconfdir=/etc/squid3 \ --mandir=/usr/share/man \ + --enable-ssl \ + --enable-ssl-crtd \ --enable-inline \ --enable-async-io=8 \ --enable-storeio="ufs,aufs,diskd,rock" \
Squid Proxy的源代码中的一个文件也需要调整( src / ssl / gadgets.cc
)。 需要进行此更改,以防止在使用最新的Firefox浏览器进行HTTPS过滤时通常会发生Firefox错误sec_error_inensionsate_key_usage
。 如果您只使用Google Chrome,则Microsoft Internet Explorer或Apple Safari不需要此步骤。
$ patch squid3-3.3.8/src/ssl/gadgets.cc < gadgets.cc.patch
gadgets.cc.patch
看起来像这样。
--- gadgets.cc 2013-07-13 09:25:14.000000000 -0400 +++ gadgets.cc.new 2013-11-26 03:25:25.461794704 -0500 @@ -257,7 +257,7 @@ mimicExtensions(Ssl::X509_Pointer & cert, Ssl::X509_Pointer const & mimicCert) { static int extensions[]= { - NID_key_usage, + //NID_key_usage, NID_ext_key_usage, NID_basic_constraints, 0
然后我们使用以下命令构建软件包。 一段时间后,此命令构建所有必需的* .DEB包。
$ cd squid3-3.3.8 && dpkg-buildpackage -rfakeroot -b
安装Diladele Web安全
仅限SSL Bumpng功能不足以阻止可疑的网页内容。 我们还需要可以与Squid配对的过滤服务器。 我们将使用以前称为QuintoLabs内容安全的Diladele Web Safety(DDWS)作为过滤和阻止部分。 它是一个ICAP守护进程,可以集成现有的Squid代理,并提供丰富的内容过滤功能开箱即用。 它可以用于阻止非法或潜在的恶意文件下载,删除烦人的广告,阻止访问各种类别的网站,并以明确的内容阻止资源。
我们将使用版本3.0的qlproxy,它是发布候选状态,并可能会在本月终于发布。 它专门设计了HTTPS过滤,并且包含丰富的Web管理员控制台,可以从浏览器执行例行任务。
默认情况下,DDWS预先安装了四个策略。 严格的政策包含最高级别的网页过滤器设置,并且应该保护未成年人和K12学生免受互联网上不适当的内容。 宽松的政策只阻止过多的广告,并被网络管理员,教师和所有不需要过滤访问网络但希望避开大多数广告的用户使用。 第三种策略是针对白名单浏览而定制的,最后一组包含较少限制性的网页过滤设置,适用于普通网络浏览,而不显示成人内容。
为了安装Squid Proxy的Diladele Web Safety,请从Diladele BV网站http://www.quintolabs.com使用浏览器下载Ubuntu 13.10的软件包,或者只需在终端中运行以下命令即可。
$ wget http://updates.diladele.com/qlproxy/binaries/3.0.0.3E4A/amd64/release/ubuntu12/qlproxy-3.0.0.3E4A_amd64.deb
Diladele Web Safety的管理控制台是使用Python Django框架构建的,通常由Apache Web服务器管理。 要安装Web UI正确运行所需的软件包,请在终端中运行以下命令。
$ sudo apt-get install python-pip
$ sudo pip install django==1.5
$ sudo apt-get install apache2 libapache2-mod-wsgi
安装DEB包,并通过运行以下命令与Apache进行集成。
$ sudo dpkg --install qlproxy-3.0.0.3E4A_amd64.deb
$ sudo a2dissite 000-default
$ sudo a2ensite qlproxy
$ sudo service apache2 restart
请注意,如果您遇到访问被拒绝的错误尝试访问Diladele Web Safety的Web UI,则可能需要取消注释/etc/apache2/sites-available/qlproxy.conf中#Require所有授权的
行的注释
。 这是因为Apache配置设置在Ubuntu 12和Ubuntu 13之间发生了变化。幸运的是,只能做一次。
配置Squid进行ICAP过滤和SSL冲突
我们之前编译的Squid包需要安装在系统上。 要执行安装,请运行以下命令。
$ sudo apt-get install ssl-cert
$ sudo apt-get install squid-langpack
$ sudo dpkg --install squid3-common_3.3.8-1ubuntu3_all.deb
$ sudo dpkg --install squid3_3.3.8-1ubuntu3_amd64.deb
$ sudo dpkg --install squidclient_3.3.8-1ubuntu3_amd64.deb
为了在HTTPS过滤期间重新创建远程Web站点的原始SSL证书Squid使用一个名为ssl_crtd的单独进程,需要如下配置。
$ sudo ln -s /usr/lib/squid3/ssl_crtd /bin/ssl_crtd
$ sudo /bin/ssl_crtd -c -s /var/spool/squid3_ssldb
$ sudo chown -R proxy:proxy /var/spool/squid3_ssldb
最后,修改/etc/squid3/squid.conf中的Squid配置文件,将其与Diladele Web Safety集成为ICAP服务器。 由于补丁文件的大小,文本直接不包括在文章中,而是下载存档的一部分。
$ sudo cp /etc/squid3/squid.conf /etc/squid3/squid.conf.default
$ sudo patch /etc/squid3/squid.conf < squid.conf.patch
$ sudo /usr/sbin/squid3 -k parse
从现在起,Squid能够进行HTTPS过滤,我们可能会继续从Diladele Web Safety的Web UI过滤调整。
导航到http://您的PROXY IP地址/,并使用默认名称root和密码P @ ssw0rd进行登录。 选择设置 / HTTPS过滤 / 过滤模式 。 Diladele Web Safety可能会过滤特定的HTTPS站点或全部排除。 全面过滤更适合提供非常安全的网络环境。
选择所需的模式,单击保存设置,根据需要添加目标域或排除,然后通过单击右上角的绿色按钮重新启动ICAP服务器,如以下屏幕截图所示。
在代理终端中运行以下命令。
$ sudo service squid3 restart
浏览到google.com,看到HTTPS过滤确实是活动的。 以下警告显示,Squid能够破坏SSL连接,将其过滤并使用Diladele Web Safety生成的证书再次进行加密。
为了摆脱这些警告,我们必须将myca.der证书文件安装到浏览器中,并将其标记为可信任。 再次浏览http://您的代理IP地址。 选择设置 / HTTPS过滤 / 证书 ,然后选择与您的操作系统或设备相匹配的设置。 有关如何在每个操作系统或设备中安装证书的说明略有不同,以下屏幕显示如何在Apple iPad和Microsoft Internet Explorer中安装DER文件。 对于其他设备,请查看Diladele Web Safety的在线文档。
重新打开您的浏览器,导航到Google,并确保证书警告消失。 如果您点击互联网地址框中的锁图标,那么它清楚地表明google.com是由代理证书签署的,而不是谷歌的原始证书。
如果您尝试使用一些仅限成人的术语搜索Google(例如NSFW),Diladele Web Safety将阻止访问显示其被拒绝的页面的显式内容。
请确保将Diladele Web Safety的安装包中附带的默认证书更改为您的网络更独特的内容。 有关如何为此重新生成自己的证书的说明,请参阅Diladele Web Safety的在线文档。
恢复
现在我们已经对HTTPS网络过滤进行运行,并且对于那些最需要保护的人来说,我们的网络环境变得更加安全。 接下来的步骤将直接所有客户端浏览器使用Squid代理,重新生成默认代理证书,设置身份验证和授权以在Diladele Web Safety中获取用户特定的报告,使用Squid对Kerberos身份验证的支持以及可选的安装透明HTTPS将其与Active Directory集成过滤 建议在Squid代理上设置缓存DNS服务器,以进一步提高连接速度。