如何在pfSense上使用pfBlockerNG设置IP过滤和DNS黑洞

Marc Dahan

By Marc Dahan . 30 3月 2024

网络安全记者

Miklos Zoltan

Fact-Checked this

pfSense是一个非常强大的开源防火墙/路由器解决方案。基于FreeBSD,pfSense非常注重安全性。即使是在“原始”配置中,pfSense的安全性也远超你能购买的任何现成路由器。

出厂时,pfSense提供许多工具来自定义你的安全网络设置。但除了其默认工具外,pfSense还提供了一个可安装的附加包仓库,以进一步增强你的设置。

在这篇文章中,我们将看看pfBlockerNG。pfBlockerNG是pfSense可用的一个可选包。pfBlockerNG的本质是通过使用IP和DNS黑名单,细致地调整进出连接,从而扩展pfSense的防火墙功能。

相关指南:如何使用pfSense、Squid和SquidGuard在所有设备上屏蔽广告

文章简要:
pfSense,一个源自FreeBSD的高级防火墙/路由器解决方案,提供的安全级别超过了典型的商业路由器。
它通过诸如pfBlockerNG这样的附加包增强其实用性,通过IP和DNS黑名单提供了对进出连接的精细管理,从而提高了防火墙性能。

pfBlockerNG的关键特性包括使用IP地址列表和GeoIP限制过滤流量、屏蔽广告以及通过DNS过滤保护免受恶意网站的侵害。

pfBlockerNG有效地对这些黑名单中的DNS请求进行筛选,充当一个有效的内容屏蔽器和安全工具,而且不需要代理服务器。

如何设置IP过滤

pfBlockerNG是什么?

pfBlockerNG有两个核心用途:

进出站流量过滤

pfBlockerNG能够根据IP列表过滤进出站流量,并通过允许或拒绝来自特定国家的流量应用GeoIP限制。如果你在WAN上开放端口,后者功能可能非常有用。

通过DNS黑洞阻止广告和恶意网站

pfBlockerNG能够通过DNS过滤来阻止广告和访问恶意网站。在浏览网页时,你的DNS请求会被对照一个阻止列表检查。如果发现匹配,请求就会被阻止。这是一个不使用代理服务器就能阻止广告的好方法。

我们将查看这两种用例,并在处理每一种时进一步详细说明。

本指南假设你已经设置了pfSense,并且具有功能性的WAN和LAN接口。

具有功能性WAN和LAN接口的pfSense

让我们开始吧。

安装pfBlockerNG-devel

首先,我们需要做的是安装pfBlockerNG。

  1. 从顶部菜单选择系统 > 包管理器。你将进入包管理器已安装包标签页。

    安装pfBlockerNG

  2. 选择可用包。将显示可用包的列表。

    安装pfBlockerNG步骤2

  3. 向下滚动直到你看到pfBlockerNG。有两个pfBlockerNG的条目:pfBlockerNGpfBlockerNG-devel。我们将安装pfBlockerNG-devel。虽然“devel”后缀代表开发版本(即,测试软件),但它是完全功能的并且在积极开发中。它将永远处于测试阶段,因为包开发者认为,随着他不断向包中添加新功能,将其视为测试软件更为安全。

    安装pfBlockerNG-devel

  4. 点击安装,位于pfBlockerNG-devel旁边。将显示包安装器窗口。
  5. 点击确认。安装将开始。

    pfBlockerNG-devel

  6. 安装完成后,你应该会在包安装器窗口底部看到成功pfBlockerNG-devel现在已安装。

    pfBlockerNG-devel

基础设置

现在pfBlockerNG-devel已经安装好了,我们需要配置我们的包。我们将从IP和GeoIP过滤开始。

我们将逐部分配置pfBlockerNG。任何未提及的设置都应保留其默认值。

  1. 从顶部菜单选择防火墙 > pfBlockerNG。pfBlocker配置向导将显示。
    pfBlockerNG基础设置
  2. 你可以运行配置向导或手动配置pfBlockerNG。我们将手动配置它,所以你可以点击红色的这里来关闭向导。然后你将进入pfBlocker设置的通用页面。

    pfBlockerNG设置页面

通用 / 通用设置

  1. 勾选pfBlockerNG右侧显示的启用框。这将启用服务。
  2. 点击页面底部的保存
  3. 我们将在这个页面上其它设置保留为默认值。

启用pfBlockerNG

IPv4过滤

IP / IP配置

  1. 选择IP标签以访问IP设置页面。现在先不要触碰下面出现的子菜单。
  2. 启用去重。如果你使用多个IP源,这将合并重复条目。
  3. 启用CIDR聚合
  4. 启用抑制。抑制确保你的本地子网不会被阻止。

IP / IP配置

IP / MaxMind GeoIP配置

正如我上面提到的,pfBlockerNG的GeoIP功能允许你过滤来往整个国家或大陆的流量。为此,pfBlocker使用MaxMind GeoIP数据库,这需要一个许可证密钥。MaxMind许可证密钥字段描述中的链接将带你到MaxMind注册页面。 MaxMind许可证密钥是免费的。

填写注册表单以获取你的许可证密钥。一旦你有了许可证密钥,就将其插入MaxMind许可证密钥字段。

MaxMinf GeoIP配置

并且:

MaxMind注册

IP / IP接口/规则配置

此部分确定pfBlockerNG的IPv4、IPv6和GeoIP过滤应用于哪些进出接口。

  1. 入站防火墙规则字段中选择WAN(以及你可能拥有并想要过滤的任何其他WAN接口)。
  2. 出站防火墙规则字段中选择LAN(以及你可能拥有并想要过滤的任何其他LAN类型接口)。
  3. 启用浮动规则。浮动规则是一种特殊的防火墙规则,应用于常规防火墙规则之前。这确保了一旦流量触及防火墙,pfBlockerNG的过滤就会发生。另一个好处是pfBlockerNG将自动为你创建浮动规则。
  4. 点击页面底部的保存

pfBlockerNG接口配置

添加IPv4源

现在是时候向pfBlockerNG添加一些阻止列表了。虽然你可以自由添加你的自定义源,但pfBlockerNG内置了一些我们可以启用的源(在这个上下文中,列表和源是可以互换的术语)。

这非常实用,因为在互联网上寻找阻止列表既耗时又困难,而且很多要么无法工作要么不再维护。pfBlocker内的源是实时更新的活跃列表,所以我们将使用这些。

  1. 选择标签。
  2. 点击蓝色+号,位于PRI1旁边。它是第一个列表。PRI1是一个源集合,所以它包含了几个源,我们很快就会看到。一旦点击蓝色+号,你将进入IP / IPv4页面,你选择的源将被列出。几乎所有相关字段都会自动填充。

pfBlockerNG源标签

IP / IPv4

源集合的名称和描述被填充。集合中包括的源URL及其关联描述也被填充。然而,我们的源默认设置为关闭。我们需要启用它们。

pfBlockerNG IPv4列表

但在做那之前,我们需要从PRI1集合中删除一个源。Pulsedive,从顶部数来的第7个源,是一个需要付费API密钥的高级列表。我们在这个教程中不会获取API密钥。点击删除按钮。

删除源

  1. 删除Pulsedive后,将所有源设置为开启

    列表开启

  2. 滚动到页面的设置部分。
  3. 从动作下拉菜单中选择拒绝双向。这将阻止往来列表/源中IP地址的流量。如果你愿意,你可以选择只拒绝进站或出站连接。但请注意,如果你只拒绝进站流量,而你的网络上的主机发起到其中一个IP的出站连接,那么来自那个IP的进站响应将被允许。这可能取决于你的环境是否可以接受 – 只是请注意。对于这个例子,我将选择拒绝双向

    IP拒绝双向

  4. 点击页面底部的保存IPv4设置

如果你的ISP给你的WAN分配了IPv4和IPv6 IP地址,你可以重复相同的步骤应用于IPv6。我们大多数人仍然使用的是仅IPv4的网络。

GeoIP 过滤设置

在配置 GeoIP 过滤之前,我们首先需要强制更新 pfBlockerNG。pfBlocker 会自动在固定时间间隔内进行更新。但要配置 GeoIP 过滤,pfBlocker 首先需要拉取 MaxMind 数据库,强制更新正是为此。

  1. 从 pfBlockerNG 设置中选择更新标签。
  2. 点击运行。更新随即开始。

    GeoIP 更新设置

  3. 一旦更新完成,你应该会在更新设置下方的日志窗口底部看到更新过程结束的提示。

    GeoIP 更新过程结束

  4. 通过查看日志窗口,我们可以看到我的 IPv4 源和 GeoIP 数据库都已更新。

    IPv4 日志

    IPv4 日志

    GeoIP 日志

    GeoIP 日志

  5. 在 pfBlockerNG 设置的IP标签中,选择GeoIP子菜单。将显示 GeoIP 概览。

    GeoIP 菜单

GeoIP 概览包括按大洲组织的 IP 地址源,另外还有两个额外类别:顶级垃圾邮件发送者代理和卫星顶级垃圾邮件发送者是已知经常源于在线攻击的国家列表。代理和卫星是已知的匿名代理和卫星提供商。

你可以过滤来自/前往整个大洲的流量,或者你可以通过仅选择你想要过滤的国家来微调源。

自定义国家列表

  1. 点击你想编辑的源右侧的铅笔图标
    GeoIP 概览
  2. 选择你希望 pfBlockerNG 过滤的国家。
  3. 在页面底部点击保存

    GeoIP 概览页面

配置国家封锁

  1. 返回到pfBlocker 设置GeoIP 菜单
  2. 如同我们处理IPv4列表一样,对于每个字段右侧的操作下拉菜单,选择封锁入站封锁出站双向封锁

    GeoIP 操作

现在,这里有一些需要考虑的事项。如果你想封锁对一个国家或大洲的出站连接,尽管去做。然而,如果你考虑封锁来自一个政府或大洲的入站链接,需要考虑到pfSense 默认会阻止 WAN 上所有未经请求的入站流量

这意味着,除非你在 WAN 上开放了端口,否则封锁国家或大洲是无用的,只会无谓消耗内存。如果你在 WAN 上开放了端口,请确保你不要阻止你希望允许连接到你开放端口的国家的连接。

别名本身就是 pfSense 中的 IP 地址列表。使用别名,你可以只允许你选择的特定国家访问你的开放端口。然而,在 pfBlockerNG 内部可以从 MaxMind GeoIP 数据库创建自定义别名,这些别名可以直接作为你端口转发防火墙规则中的源使用。

在 pfBlockerNG 中创建 GeoIP 别名

因为 pfSense 会自动阻止任何未在防火墙规则中明确允许的流量,我们想要创建一个国家的别名,这些国家我们将允许通过防火墙。pfSense 将默认阻止其他国家。

  1. 前往IPv4子菜单,点击添加
    添加自定义别名
  2. 为你的别名命名并提供描述。
  3. 设置格式字段为GeoIP
  4. 设置状态字段为开启
  5. 将操作设置为原生别名。

  6. 输入你想要添加到别名中的国家的首字母。选择你希望添加到别名中的国家。国家列表将会显示。

    开始输入自定义别名

  7. 你可以通过点击绿色的添加按钮来增加更多国家到你的别名中。

    添加国家

  8. 更新频率设置为每天一次
  9. 在页面底部点击保存 IPv4 设置。一旦你强制更新 pfBlockerNG,你的别名将可用于包含在你的防火墙规则中。

    自定义别名设置

如果你确实有开放的端口,但想要保持简单,你可以不创建自定义别名而直接封锁来自顶级垃圾邮件发送者代理及卫星的入站连接。记住,这只有在你的 WAN 上有开放的端口时才有用。

拒绝垃圾邮件发送者和卫星

如果你的 WAN 上没有任何开放的端口,只需封锁出站流量或关闭 GeoIP 过滤。

测试 IPv4 过滤

为了确保我们的流量正在被过滤,我们可以尝试连接到阻止列表中的一个已知 IP 地址。如果我尝试在浏览器中访问 1.13.9.177(我的 pfBlockerNG IPv4 源中包含的一个 IP),该 IP 地址不会被转换为域名,并且我无法连接。这正是我们想要的。

IPv4 测试

现在,让我们开始配置 pfBlocker 的 DNSBL。

DNSBL

好的。我们已经配置了 IPv4 过滤、GeoIP 过滤和别名。现在是时候使用 pfBlockerNG 进行广告屏蔽了。pfBlockerNG 中的广告屏蔽是通过 DNS 黑洞实现的。这将你的 DNS 请求与已知的广告网络和追踪器的列表进行比对,并在匹配时在 DNS 层面阻止它们,从而实现无广告的互联网。万岁。

要在 pfBlockerNG 中使用 DNSBL 功能,你必须在 pfSense 中使用DNS 解析器进行 DNS 解析。这意味着如果你想使用 DNSBL 功能,你不能通过 DHCP 分配你的主机 DNS 或使用 DNS 转发器(dnsmasq)。

默认情况下,pfSense 在所有接口上使用 DNS 解析器。所以,如果你没有对 DNS 解析器设置进行任何更改,那你就没问题。如果你做了更改,请配置解析器以绑定到你的 LAN(出站)和你的 WAN(入站)。并选择任何其他你希望 DNSBL 过滤的 LAN 类型(OPT 接口)和 WAN 类型(多 WAN 设置,VPN 网关)接口。

DNS 解析器

配置 DNSBL

  1. 选择DNSBL 标签
  2. 启用 DNSBL
  3. DNSBL 模式旁边,选择Unbound Python 模式

    DNSBL

  4. 滚动到DNSBL 配置部分。
  5. 启用允许防火墙规则并选择你希望用 DNSBL 过滤的 LAN 和任何其他 LAN 类型接口。这将自动创建浮动防火墙规则(如同我们对 IPv4 过滤所做的), 以便一旦流量触及防火墙,DNSBL 过滤就会发生。
  6. 在页面底部点击保存 DNSBL 设置

    保存 DNSBL 设置

我们现在需要添加一些 DNSBL 源。

添加 DNSBL 源

  1. 选择标签。
  2. 向下滚动直到你看到左侧的DNSBL 类别。第一个条目是EasyList
  3. 点击EasyList左侧的蓝色+号。你会被带到DNSBL 组页面,你所选的源会被列出,就像 IPv4 过滤一样。几乎所有相关字段都会自动填充。

    DNSBL 源

  4. 删除所有源,除了第一个和最后一个:EasyListEasyList Privacy
  5. 将剩下的源设置为开启

    DNSBL 列表开启

  6. 滚动到设置部分。
  7. 操作设置为Unbound
  8. 点击DNSBL 自定义列表右侧的+号。会显示DNSBL 自定义列表窗口。
  9. DNSBL 自定义列表窗口中输入vungle.com。我们添加这个域名是为了通过尝试访问一个已知被阻止的域名来确保 DNSBL 过滤正在工作。
  10. 点击页面底部的保存 DNSBL 设置

    DNSBL 列表开启

强制更新 pfBlockerNG

现在,我们需要像之前一样强制更新 pfBlockerNG。

  1. 选择更新标签。你将被带到 pfBlockerNG 更新页面。
  2. 点击运行。更新开始。

    更新设置

更新完成后,我们可以看到我们的 DNSBL 源已经更新。

DNSBL 更新日志

测试 DNSBL

为了确保 DNSBL 过滤正在工作,我们将尝试连接到我添加到DNSBL 自定义列表的域名:vungle.com。如果我尝试在我的浏览器中访问 vungle.com,将显示 DNSBL 阻止页面,并提供一些有用的信息。

注意:pfBlocker 的 DNSBL 包括一个微型网页服务器,可以提供这个阻止页面。IPv4、IPv6 和 GeoIP 过滤扩展了 pfSense 防火墙的现有功能,可以阻止或允许 IP 地址,而不显示阻止页面。

DNSBL 测试

总结

就这样了。你已经成功地在 pfSense 中安装并配置了 pfBlockerNG-devel。我们配置了 IPv4 过滤、GeoIP 过滤以及 DNSBL 过滤。这三种方法都能让你的网络更加安全和私密,同时不会减慢你的连接速度。

随着你的网络增长,如果你想运行一个 VPN 服务器,或者想要从互联网上访问一个托管的网页服务器,你可能需要在你的 WAN 上开放某些端口。当你这样做时,pfBlockerNG 将是你安全工具箱中的一个好工具,帮助你锁定你的网络并精细地控制外部的访问权限。

相关:如何找到最好的 VPN

Leave a Comment