pfSense使用SquidGuard过滤HTTP(S)连接

网络管理中,经常会面临如何过滤互联网中的有害内容或屏蔽特定网站,如果你使用pfSense,则可以通过Squid和SquidGuard来进行过滤。Squid是一个代理软件,SquidGuard是一个URL重定向软件。 Squidguard有两大优势:速度快、免费。

一、运行原理

过滤HTTP连接非常简单,由于这些连接是没有加密的,因此可以对它进行严格的检查,从而完全或部分阻止它们。但是现在越来越多的网站都使用HTTPS技术,用户浏览器和网络服务器之间使用加密连接,任何人都可以为他们的网站设置免费的证书。这本身是好事,因为它增加了安全性,使得许多攻击变得不可能或更加困难。但是,它也使得对不需要的内容进行过滤变得更加困难。

这个“问题”可以通过两种方式来解决:

1、中间人攻击

一种方法是有意识的中间人攻击。代理服务器解密HTTPS连接并重建它,允许查看连接并相应地对其进行过滤。大多数网页过滤解决方案都使用这种方法。这里的问题在于,这种对HTTPS连接的严重干扰意味着HTTPS提供的实际安全性不再得到保证,如果代理服务器的证书是可信的,用户很难识别差异。但这种安全性具有欺骗性,即使这是真实内容过滤的唯一方式。这种解决方案是危险、风险很大,也可能与国家现行法律要求(数据保护和隐私)不符合。因此出于安全和道德原因,不建议使用此方式。

2、通过SNI进行URL过滤

另一种可能性是通过SNI(Server Name Indication服务器名称指示)过滤。在浏览器和Web服务器之间查询证书并建立加密连接之前,浏览器会发送它想要查询的域名(FQDN)。这一部分还没有加密,因此可以通过(透明)代理读取并用于过滤。下图说明了TLS握手的过程。

TLS握手

可以很容易地看到SNI在密钥交换和实际安全连接之前发送。可以利用这一原则,除了HTTP连接的网页过滤器之外,我们还可以为HTTPS连接建立一个URL过滤器,而不会通过中间人攻击破坏HTTPS。

二、搜索引擎-安全搜索

1、为DNS创建防火墙规则

例如,由于我们无法查看HTTPS连接,因此可能会在Google搜索中显示不需要的图像和视频。谷歌和其他搜索引擎因此提供了一种安全模式(安全搜索),我们可以强制使用它。

首先,我们必须在pfSense中激活DNS解析器(系统服务→DNS解析),然后保存应用更改。

DNS解析器

为了使网络中的计算机使用防火墙的DNS服务器,我们需要添加一条将所有其他DNS请求转发给防火墙的规则。在防火墙→NAT,端口转发选项卡下创建一个新规则,点击添加按钮,输入以下内容:

  1. 接口:LAN
  2. 协议:TCP / UDP
  3. 目标:any
  4. 目标端口范围:DNS(53)
  5. 重定向目标 IP:127.0.0.1
  6. 重定向目标端口:DNS(53)
  7. 描述:输入你需要说明的内容

NAT重定向

确保我们新创建的防火墙规则在最优先的位置。它必须高于默认的“ 默认允许LAN到任意规则 ”!如下图所示:

局域网规则

2、主机覆盖Bing和Youtube

接下来,我们将创建一些DNS条目,以确保Google和Bing都使用他们的安全搜索。在系统服务→DNS解析下打开DNS解析器,并在下面的主机覆盖部分中添加以下条目。

Bing:

  • 主机:www
  • 域名:bing.COM
  • IP地址:204.79.197.220
  • 描述: BING
  • 单击保存

Youtube:

  • 主机:www
  • 域名:youtube.COM
  • IP地址:216.239.38.120
  • 描述:Youtube
  • 单击保存

主机覆盖

再次保存并应用更改。

3、Google主机覆盖

谷歌使用了很多不同的域名,手动输入非常耗时,可以选择另外一种方式。通过SSH登录pfSense(首先必须在系统→高级设置,安全Shell部分启用SSH )。

启用SSH

使用以下命令通过SSH登录(Windows下可以使用Xshell):

1 $ ssh admin@192.168.0.1

选择菜单“8”(Shell)。

pfSense Shell

使用VI命令创建一个文件,在该文件中为Google输入DNS条目。按以下顺序来操作:

1 $ vi /var/unbound/google.conf

退出编辑器,我们输入:wq(冒号很重要!)。

回到防火墙菜单,进入系统诊断→编辑文件,在路径中输入/var/unbound/google.conf并点击导入

编辑文件

将以下链接文本内容复制到文件中:

谷歌域名

单击保存

最后,必须让DNS服务器在哪里可以找到这些DNS记录。打开系统服务→DNS解析下的DNS服务器设置,然后单击显示自定义选项。插入以下行,保存设置并应用更改。

server:
include: /var/unbound/google.conf

DNS自定义选项搜索引擎已配置完成。下面为HTTP设置内容过滤器,为HTTPS设置URL过滤器。

三、Squid Proxy和SquidGuard

1、安装

要启用pfSense来过滤URL,需要安装代理服务器,通过它来代理网络的所有请求。我们通过Squid来实现,并使用SquidGuard进行过滤。在系统→插件,“可用插件选项卡下,安装Squid和SquidGuard。

包管理器

2、设置HTTP透明代理

在系统服务→Squid Proxy Server设置HTTP透明代理。透明代理的优点是我们无需在网络中的单个计算机上配置任何设置。在常规选项卡中,我们激活以下项目:

  1. 启用Squid代理:✔
  2. 代理接口:LAN
  3. 允许接口上的用户 :✔
  4. 透明HTTP代理 :✔
  5. 透明代理接口: LAN

Squid Proxy General

单击保存,在Local Cache(本地缓存)选项卡中确定缓存使用的磁盘空间(这里设置为500MB)。

鱿鱼缓存

单击保存设置,HTTP透明代理的设置完成。

3、配置SquidGuard

SquidGuard是负责过滤内容的组件。每个连接请求都由SquidGuard进行检查,然后决定是否阻止请求或拦截网站。这里要使用一个黑名单,我们将在后面进行配置。在此之前,我们先在系统服务→SquidGuard Proxy Filter下定义一些常规设置。

  1. 启用✔
  2. 启用日志✔
  3. 启用日志轮转✔
  4. 启用黑名单 ✔
  5. 黑名单网址: http://www.shallalist.de/Downloads/shallalist.tar.gz

Squid代理过滤器一般

单击保存所有内容。

在使用SquidGuard时,只有在单击“ 保存应用”(上面的“常规设置”选项卡)后,配置中的更改才会激活!

4、设置黑名单和白名单

我们已经完成了基本设置,但黑名单和白名单还没有任何条目。黑名单的URL已经提供,现在我们必须在标签“ Blacklist(黑名单) ”中下载它们。

黑名单

为了确保过滤器有效,我们现在定义了几个目标类别。打开“Target Categories(目标类别) ” 选项卡并单击添加。创建明确允许的所有域名的白名单。那就是所有Google域名,因为我们会阻止所有其他搜索引擎,以防止用户绕过上面设置的安全搜索功能。

输入以下内容:

  • 名称: Whitelist
  • 域名列表:google.ac google.ad google.ae google.al google.am google.as google.at google.az google.ba google.be google.bf google.bg google.bi google.bj google.bs google.bt google.by google.ca google.cat google.cd google.cf google.cg google.ch google.ci google.cl google.cm google.cn google.co.ao google.co.bw google.co.ck google.co.cr google.co.hu google.co.id google.co.il google.co.in google.co.je google.co.jp google.co.ke google.co.kr google.co.ls google.com google.co.ma google.com.af google.com.ag google.com.ai google.com.ar google.com.au google.com.bd google.com.bh google.com.bn google.com.bo google.com.br google.com.bz google.com.co google.com.cu google.com.cy google.com.do google.com.ec google.com.eg google.com.et google.com.fj google.com.gh google.com.gi google.com.gr google.com.gt google.com.hk google.com.jm google.com.kh google.com.kw google.com.lb google.com.ly google.com.mm google.com.mt google.com.mx google.com.my google.com.na google.com.nf google.com.ng google.com.ni google.com.np google.com.om google.com.pa google.com.pe google.com.pg google.com.ph google.com.pk google.com.pr google.com.py google.com.qa google.com.sa google.com.sb google.com.sg google.com.sl google.com.sv google.com.tj google.com.tr google.com.tw google.com.ua google.com.uy google.com.vc google.com.vn google.co.mz google.co.nz google.co.th google.co.tz google.co.ug google.co.uk google.co.uz google.co.ve google.co.vi google.co.za google.co.zm google.co.zw google.cv google.cz google.de google-directory.co.uk google.dj google.dk google.dm google.dz google.ee google.es google.fi google.fm google.fr google.ga google.ge google.gg google.gl google.gm google.gp google.gr google.gy google.hn google.hr google.ht google.hu google.ie google.im google.iq google.is google.it google.je google.jo google.kg google.ki google.kz google.la google.li google.lk google.lt google.lu google.lv google.md google.me google.mg google.mk google.ml google.mn google.ms google.mu google.mv google.mw google.ne google.nl google.no google.nr google.nu google.off.ai googlepirate.com google.pl google.pn google.ps google.pt google.ro google.rs google.ru google.rw google.sc google.se google.sh google.si google.sk google.sm google.sn google.so google.sr google.st google.td google.tg google.tk google.tl google.tm google.tn google.to google.tt google.uz google.vg google.vu google.ws bing.com
  • 描述: Whitelist
  • 保存设置

白名单

最后是在Common ACL选项卡中制定规则。单击“ Target Rules List(目标规则列表) ”中的“ + ”符号打开不同规则集的列表。里面有不同的类别,我们前面创建的白名单也在这里。现在进行以下设置:

  • Whitelist: access whitelist
  • Default access [all]: access allow

通用ACL

其他类别可以根据需要设置。例如:

  • Block advertising:[blk_BL_adv] access deny
  • Block pornography:[blk_BL_porn] access deny

为了防止用户通过输入IP地址绕过URL过滤器,可以启用 Do not allow IP addresses in URL(不允许URL中的IP地址)。但是如果在使用中有任何问题,则必须禁用它。

不要允许IP地址

保持设置后,切换到General Settings(常规设置)选项卡并再次单击Apply(应用更改)。

5、测试设置

先测试HTTP连接,LAN上的计算机上不需要进行任何其他设置,过滤器应该已经正常工作。如果访问在黑名单中的页面,浏览器将会将显示如下信息:

被封锁的网站

6、HTTPS透明代理

现在透明代理也只对HTTP有效,下面来激活HTTPS的透明代理,它允许我们为端口443(HTTPS)上的所有请求启用URL过滤器,但缺点是无法分析内容。

打开系统服务→Squid代理服务器下的代理设置,然后在SSL Man in the Middle Filtering部分进行以下设置:

  • HTTPS / SSL 拦截 ✔
  • SSL/MITM 方法:Splice All
  • SSL 拦截接口:LAN
  • CA: 选择一个证书颁发机构证书,必须先在系统 → 证书管理下创建一个。
  • 单击保存

SSL MITM

设置完成,可以测试HTTPS连接。这次没有像HTTP连接那样得到一条错误消息提示,但是有来自浏览器的警告:

某些错误

即使这个错误信息不是很有意义,但我们已经达到了了阻止指定访问网站的目标了。

结论

经过以上设置,我们可以过滤LAN(或WLAN)中的所有网络流量,在黑名单中定义的页面都会被阻止。技术不能解决所有问题,但如果你需要有这样一个限制,这也许是一个很好的办法。