pfBlockerNG是为pfSense开发的免费开源软件包,提供了广告、恶意内容和地理拦截功能。
在pfSense中使用pfBlockerNG,可以拦截广告、阻止网络跟踪、防范恶意软件和勒索软件。它将利用DNSBL功能为整个网络提供保护。pfBlockerNG可以阻止来自特定IP地址的网络流量,网络黑客发起攻击的IP地址可能属于特定的国家和地区,pfBlockerNG的这种能力可以防止特定地区的黑客实施的攻击。
pfBlockerNG是什么
pfBlockerNG由BBCan177基于IP/DNS的过滤来创建并使用的。它基于Marcello Coutinho和 Tom Schaefer之前的工作项目。该项目的目标是通过使用IP和DNS控制列表,控制和管理防火墙的出、入站访问,来扩展pfSense的防火墙功能。
pfBlockerNG的特点
pfBlockerNG包含多种功能,例如国家/地区阻止、IP/DNS 黑名单和IP信誉阻止等。下面简要介绍pfBlockerNG的这些功能。
- IP封锁:pfBlockerNG可以基于 IPv4 和 IPv6 地址空间创建防火墙规则,这样就可以控制单个或多个接口上的入站和出站流量。还可以根据地理位置限制 IP 地址。Geolocation是对IP地址的真实地理位置的识别。MaxMind是IP地理定位准确性的行业领导者,提供并维护pfBlockerNG 使用的列表。
- DNS封锁:pfBlockerNG可以控制DNS解析器访问,以防止访问恶意网站,例如广告、威胁和恶意软件。域阻止是过滤跟踪域、恶意域和广告的一种非常有效的方法。当你浏览网站时,DNS 请求会根据阻止列表进行检查。如果匹配,则拒绝该请求。这是在不使用代理服务器的情况下阻止广告的绝佳方式。
从各种黑名单来源收集或手动输入的域名用于生成优化的DNS解析器黑名单。可以订阅用户维护的阻止列表,也可以使用预建的EasyLists。
- 入站流量过滤:pfSense默认阻止所有入站流量。但是当你开放个别端口,用于映射内部服务器时,那么建议你使用pfBlockerNG的自定义IP列表和GeoIP限制功能控制访问范围。
- 出站流量过滤:pfBlockerNG提供了出站阻止功能,防止内部客户端访问恶意网站。
- 基于策略的路由:pfBlockerNG可以创建基于策略路由的防火墙规则,将流量从特定网关引导出去。
- 拦截恶意DNS和广告:pfBlockerNG支持对DNS解析器服务的网络进行 DNS 阻止,防止访问跟踪和/或恶意站点。
- 垃圾邮件过滤:如果网络上有邮件服务器,pfBlockerNG可以使用黑名单来阻止垃圾邮件,例如Spamhaus。
- 白名单:如果希望某个域名不被阻止,可以使用白名单功能实现。
- 安全搜索:可以为主流的搜索引擎配置安全搜索。
安装pfBlockerNG
导航到System -> Package Manager -> Available Packages。在搜索字段中输入pfblockerng,然后单击search。找到pfBlockerNG-devel插件,并点击右侧的install按钮进行安装。下图为安装成功的页面。

图 1. pfBlockerNG-devel插件安装成功
配置pfBlockerNG
初始配置
- 导航到Firewall -> pfBlockerNG,启动配置向导。
单击下一步进行配置。如果之前配置了pfBlockerNG 并安装了以下组件,这会删除所有设置:
- IP:为WAN 接口定义防火墙规则,来阻止攻击者。
- DNSBL:使用 DNS 解析器,以阻止广告和其他已知的恶意域名。

图 2. pfBlockerNG 组件安装注意事项
- 进站防火墙接口选择WAN,出站防火墙接口选择LAN。如果有多个内部接口,建议都选中。

图 3. pfBlockerNG IP组件配置
- 单击下一步继续进行配置。
- VIP地址输入你的网络中未使用的 IP 地址,端口和 ssl 端口保留为默认。这个地址是pfBlockberNG DNSBL Web 服务器使用的地址。如果LAN地址是 10.1.1.0/24,则 VIP 地址不能在这个范围内。 IPv6 DNSBL和DNSBL白名单选项根据需要启用。

图 4. pfBlockerNG DNSBL 组件配置
- 单击完成结束向导。

图 5. pfBlockerNG初始配置完成
- 然后出现pfBlockerNG更新页面,所有激活的阻止列表都会自动下载并激活。你也可以选择Cron来定期更新选项。

图 6. pfBlockerNG 更新设置
至此,pfblockerNG安装完成!

图 7. pfBlockerNG 安装完成
常规设置
导航到Firewall -> pfBlockerNG -> General。
确保启用了 pfBlockerNG。如果正确启用了,该页面上的设置可以保留为默认值。

图 8. pfBlockerNG 常规设置
IP过滤
即使防火墙未开放面向Internet 的端口,本地用户也可能无意中启动与恶意服务器的连接,这会对网络构成高安全风险。为了降低发生这种情况的可能性,必须限制对已知来源的勒索软件、恶意软件、僵尸网络和命令与控制 (C&C) 服务器的访问。通过自带的 PRI1 feed,pfBlockerNG了提供定期更新的阻止列表。
本节介绍如何在pfBlockerNG上启用 IP 源(PRI1-PR5 组),并设置防火墙规则以防止出站流量访问该组中的任意地址。
IP配置
导航到Firewall -> pfBlockerNG -> IP ,参照下图进行配置。
- Enable De-Duplication。此选项通过检测和删除重复条目来减少列表大小。
- Enable CIDR aggregation。该选项将优化CIDR。由于CIDR 聚合会占用较多的处理器能力,如果处理器性能一般,建议禁用。
- Enable Suppression。启用抑制后,将过滤RFC1918和环回地址。这会确保不会阻止本地子网。另外,pfBlockerNG会删除与抑制列表中指定的条目匹配的所有拒绝列表条目,这些条目可以从pfBlockerNG警报选项卡手动或自动填加。
- 其他设置可以保持默认。确保你的网络中未使用占位符 IP 地址。当然,也可以启用 ASN报告,启用后,警报和统计选项卡将报告阻止/拒绝/允许/匹配 IP 条目的ASN。ASN详细信息将从BGPview.io收集并且缓存1周时间(也可以配置为 24、12、4、1 小时)。

图 9. pfBlockerNG 的 IP配置页面
- 配置完成后,点击底部的保存IP设置。
MaxMind GeoIP配置
GeoIP功能可以过滤某个国家或地区的流量。pfBlockerNG通过使用许可证密钥的 MaxMind GeoIP数据库来实现这个功能。许可证密钥完全免费,描述部分包含了指向MaxMind注册页面的链接。
要获取许可证密钥,在 MaxMind 注册页面上填写注册表。

图 10. MaxMind GeoLite2注册页面

图 11. MaxMind管理许可证密钥
生成许可证密钥后,在pfBlockerNG上的MaxMind许可证密钥字段中输入。
你可以根据需要选择 MaxMind 本土语言。可以使用以下语言:
- 英语
- 法语
- 葡萄牙语
- 西班牙语
- 德语
- 日语
- 中文
此外,也可以禁用MaxMindGeoIP数据库的定期更新。

图 12. MaxMind GeoIP 配置
IPv4抑制列表
pfBlockerNG允许你将指定的IP地址(仅适用于 /32 或 /24)添加到黑名单。每行添加一个 IP 地址。手动将IP地址添加到列表后,还必须运行“Force Reload-IP”才能使更改生效。

图 13. IPv4 抑制列表
IP接口/规则配置
在IP接口/规则配置页面,pfBlockerNG会自动定义防火墙规则。这里可以指定 pfBlockerNG的IPv4、IPv6和GeoIP过滤适用于哪些入站和出站接口。要确定入站和出站接口,可以按照下面的说明进行操作。
- 选择WAN入站防火墙规则,可以将自动规则应用到入站接口。
- 选择LAN出站防火墙规则,可以将自动规则应用到出站接口。
- 如果有多个出站接口,则启用浮动规则选项更方便。浮动规则是优先于常规防火墙规则的特殊防火墙规则,可以确保pfBlockerNG在流量进入防火墙后马上进行滤。另外一个优点是pfBlockerNG会为你自动生成浮动规则。
- 启用Kill states(杀死状态)。由于IP阻止列表每天更新数次,该选项允许 pfBlockerNG立即终止与被阻止IP的任何连接。
- 其他选项保留为默认值。
- 单击底部的Save IP Settings按钮保存配置。

图 14. pfBlockerNG上的 IP接口/规则配置
启用IPv4过滤
默认情况下会启用 pfBlockerNG PRI1 Feed。Feed是公开使用的阻止列表,默认配置为定期进行同步。导航到Firewall -> pfBlockerNG -> IP -> IPv4,可以查看启用的IPv4 订阅源列表。

图 15. 在 pfBlockerNG 上启用 IPv4 feed
PRI1 Feed有较广泛的覆盖范围,但为了避免误报,可能会错过真正的威胁。为了加强网络安全,还必须启用其他的 IPv4 源。查看pfBlockerNB上其他可用Feed列表,请导航至Firewall -> pfBlockerNG -> Feeds。

图 16. IPv4类 feeds(PRI1-5)
IPv4类Feeds分为五组 (PRI1-5)。这些PRI组包含已知的勒索软件、恶意软件、僵尸网络、命令和控制 (C&C) 服务器、机器人、Web 脚本、网络钓鱼和受感染的服务器、发现的恶意IP攻击SSH、SMTP、IMAP、TELNET、FTP 端点和其他已知的恶意行为发起者。一般来说,PRI的数字越低,误报的可能性就越低。所以,如果启用更严格的列表(PRI3 以上),可能会造成一些网站无法访问。在这种情况下,可能需要进行故障排除并将误报地址列入白名单。这里还有一些源组旨在阻止某些特定类型的不良流量,例如:
- Scanner(互联网风暴中心)
- Mail(已知的垃圾邮件来源;用于保护邮件服务器)
- Forum Spam(论坛垃圾邮件)
- Tor 节点(已知的Tor出口点;本身并不危险,但可以隔离匿名用户的流量)
- Internic(包含初始化 Internet 域名服务器缓存所需的根名称服务器)
- Proxy IP
- Torrent IP
- Public DNS
- DOH(基于 HTTP 的 DNS)
- VPN
- BlocklistDE

图 17. 其他 IPv4 类feed组
可以按照下面的步骤启用IPv4类PRI3组feeds。
- 向下滚动到 PRI3 组标题,然后单击组名称旁边的图标,就会重定向到设置页面来添加规则。

图 18. 添加 IPv4类型PRI3组feeds
- 设置名称和描述,或将它们保留为默认值。
- 将IPv4 Source Definitions(IPv4源定义) 部分所有feeds状态设为ON。如果希望下载列表一次但将其从自动更新中排除,也可以选择 HOLD 选项。不要启用 BBC_C2 Feed,因为它需要 API 密钥。
- 也可以单击IPv4 Source Definitions窗格底部按钮Enable All来启用所有Feeds。

图 19. PRI3组的 IPv4 源定义
- 向下滚动到Settings窗格,然后选择希望在匹配 IP 地址时采取的操作选项。
- 在操作下拉菜单中选择Deny Both(拒绝两者)则将规则应用于入站和出站连接。

图 20. 添加 PRI3 feeds
- 将其他设置保留为默认值。
- 点击Save IPv4 Settings按钮。在pfBlockerNG 上启用 IPv4类型PRI3 feeds保护内部网络的步骤全部完成。
- 也可以通过在IPv4 Summary窗格上,单击Action项的下拉菜单,选择Deny Both,然后单击右下角的保存按钮将 PRI 源规则应用于入站和出站连接。

图 21. IPv4类型设置
可以按照上面给出的类似步骤启用其他 PRI 组、IPv6 和 DNS 阻止列表,只需添加别名组,选择要启用的列表,然后选择匹配项目时要执行的操作。但要注意启用列表对内存的占用和CPU性能的消耗。
验证IPv4过滤
按照下面的步骤在pfBlockerNG 上验证IPv4过滤。在开始测试 IPv4 过滤之前,先更新pfBlockerNG的设置。在pfBlockerNG上,单击Update选项卡下Update Settings中的Run按钮来强制更新。然后:
- 导航到Firewall -> Rules -> Floating。
- 确保添加了阻止 IPv4类型 PRI3 组的防火墙规则。

图 22. 阻止 IPv4类型 PRI3组的防火墙浮动规则
- 将鼠标悬停在源pfB_PRI3_v4上查看被阻止的 IP 列表。

图 23. 查看 IPv4 PRI3 别名详细信息
- 找一个被阻止的IP,例如1.0.221.21来进行测试。
- 打开浏览器输入1.0.221.21地址,应该是不可访问状态。

图 24. PRI3 ip地址不可访问
- 要查看该 IP 地址被pfBlockerNG 阻止情况,也可以查看相关的防火墙日志,单击页面右上角的图标Related log entries(相关日志记录)。
- 搜索1.0.221.21,应该看到PRI3 IP 地址被 pfBlockerNG 阻止的相关信息,如下图所示。

图 25. PRI3 ip 地址被 pfBlockerNG 阻止的防火墙日志
GeoIP封锁
pfBlockerNG 的GeoIP功能可用于限制对特定区域的访问。在大多数情况下,我们不需要限制本地用户对外部任意地区的访问,只需要根据GeoIP 数据阻止入站访问即可。
要在pfBlockerNG上启用GeoIP 封锁:
- 导航到Firewall -> pfBlockerNG -> IP -> GeoIP。
- 将Top Spammers和Proxy and Satellite的Action选择为Deny Inbound(拒绝入站),这两个列表已被确定为在线攻击频繁来源的国家/地区列表。

图 26. pfBlockerNG 上的 GeoIP封锁
- 单击Save按钮。
如果想封锁特定国家,而不是整个地区,进行以下操作:
- 单击该区域旁边的铅笔图标。
- 选择要阻止的国家/地区。
- 启用List Action和Logging两个选项。
- 点击Save。

图 27. 在 pfBlockerNG 上使用 GeoIP 封锁特定区域
DNS封锁
可以通过具有 DNS 黑洞功能的 pfBlockerNG 阻止广告和一些恶意网站,例如 Malware、Porn、Gambling 等。
为了能够使用pfBlockerNG 的DNS封锁功能,必须确保客户端设备都使用pfSense防火墙的DNS服务器。
- 导航到Services -> DNS Resolver -> General Settings,检查 DNS 解析器是否已启用。

图 28. 在 pfSense上启用 DNS 解析器
- 导航到System -> General Setup,配置一个或多个外部 DNS 解析器,这些解析器需要转发未被阻止的DNS 请求。

图 29. 在 pfSense上添加 DNS 服务器
- 导航到Services -> DHCP Server,选择要启用阻止的所有接口,并确保 DNS 服务器下没有填写其他内容。如果要配置静态 DNS,也应该设置为pfSense防火墙的IP 地址。
- 导航到Firewall -> pfBlockerNG -> IP 。
- 启用DNSBL。
- 将DNSBL mode设置Unbound python mode 。
确保启用以下选项:
- Wildcard Blocking TLD
- DNS Reply Logging:这将显示Unbound 回复的所有 DNS 查询。
- DNSBL Blocking
- HSTS mode
- CNAME Validation checked:防止广告域名通过使用不同的 DNS 域名绕过 DNSBL。

图 30. pfBlockerNG 上的 DNSBL 设置
- 向下滚动到DNSBL Webserver Configuration窗格。确保Virtual IP address(虚拟 IP 地址)设置正确,且不在网络的任何部分中使用。其他设置保留为默认。

图 31. pfBlockerNG 上的 DNSBL 网络服务器配置
- 向下滚动到DNSBL Configuration部分。
- 启用Permit Firewall Rules(允许防火墙规则),选择LAN接口。这会允许防火墙创建浮动规则,并为指定的网络(LAN)启用 pfBlockerNG。
- Global Logging/Blocking Mode选择 DNSBL Webserver/VIP。这样域就会并入 DNSBL VIP 并通过 DNSBL WebServer 登录。其他设置保留为默认。

图 32. pfBlockerNG 上的 DNSBL 配置
- 点击页面底部的Save DNSBL Settings按钮。
启用其他DNSBL Feeds
默认情况下会启用 pfBlockerNG ADS_Basic Feed。要查看启用的 DNSBL Feed列表,可以导航到Firewall -> pfBlockerNG -> DNSBL -> DNSBL Groups。

图 33. pfBlockerNG 上启用的DNSBL Group feed
ADS_Basic feed,也称为StevenBlack_ADs,覆盖范围非常广泛,但因为要考虑减少误报,可能会错过真正的威胁。为了加强网络安全性,应该启用额外的DNSBL Feed。要查看pfBlockerNB 上的可用Feeds列表,请导航至Firewall -> pfBlockerNG -> Feeds。

图 34. DNSBL类feeds
在撰写本文时,有140余个DNSBL 类的feeds的可以使用。这些feeds用于阻止特定类型的恶意或不良流量,例如:
- EasyList
- ADs
- Malicious
- Phishing
- BBCAN177
- STUN
- DoH
- Torrent
- BBC
- Malicious2
- Cryptojackers
- Compilation
- Firebog_Suspicious
- Firebog_Advertising
- Firebog_Trackers
- Firebog_Malicious
- Firebog_Other
可以按照以下步骤启用不同的DNSBL feeds 。下面以启用 EasyList feeds 为例来介绍添加过程。强烈建议添加 Steven Black feeds,它是维护最完善的黑名单数据库之一。
EasyList 是目前主要的过滤器列表,它可以从国际网页中删除大部分广告,以及不需要的框架、图像和对象。它是许多广告拦截器最常用的列表,是十几个组合和补充过滤器列表的基础。
要注意的是,启用的feeds越多,越有可能中断网络上用户的网络访问。所以,你必须将特定域名列入到白名单。
- 向下滚动到EasyList组标题,然后单击组右侧的图标。会重定向到设置页面来添加规则。

图 35. 添加 DNSBL 类别 EasyList group feeds
- 设置名称和描述,或保留为默认值。

图 36. 为DNSBL feeds设置名称和描述
- 可以单击DNSBL Source Definitions窗格底部的Enable All按钮来启用所有feeds。在这里,我们只启用部分feeds,如下图所示。

图 37. EasyList 组的 DNSBL 源定义
- 向下滚动到Settings部分,Action选项选中Unbound。

图 38. 添加 EasyList feeds 的 DNSBL 类设置
- 其他设置保留为默认值。
- 可以通过单击图标添加其他希望阻止的域名列表。

图 39. pfBlockerNG 上的自定义 DNSBL 列表
- 输入要阻止的域名,例如
dnsbltest.com,后面我们要验证 DNSBL的阻止效果。 - 点击Save DNSBL Settings按钮。现在,已成功启用了DNSBL类的EasyList feeds来保护网络。

图 40. pfBlockerNG 上的 DNSBL 组摘要
可以按照上面给出的步骤启用更多的DNSBL组,只需添加别名组,选择要启用的列表并选择匹配项目时要执行的操作。但要注意对内存的占用和CPU性能的消耗。
重新加载DNSBL
启用更多的DNSBL组后,需要强制重新加载DNSBL列表,来激活新启用的DNSBL设置。请执行以下步骤:
- 导航到Firewall -> pfBlockerNG -> Update
- 在Select ‘Force option’ 部分,选中Reload。
- 在Select ‘Reload option’ 部分,选中DNSBL。
- 点击Run。

图 41. 强制在 pfblockerNG上重新加载 DNSBL列表
验证DNSBL的阻止效果
域名拦截验证
- 打开浏览器并输入添加到自定义 DNSBL 列表中的域名
dnsbltest.com。 - 将会看到下面给的默认阻止访问页面。

图 42. pfBlockerNG 的 DNSBL 阻止访问页面
- 导航到Firewall -> pfBlockerNG -> Reports -> Alerts。在警报上也可以看到相关阻止信息。
- 在DNSBL Python窗格中搜索
dnsbltest.com即可查看相关信息。

图 43. DNSBL警报
- DNSBL的另一种验证方法是查看pfBlockerNG 的报告选项卡下的 DNSBL 阻止统计页面。如果被阻止的域在防火墙的顶级阻止域列表中,可以在Top Blocked Domain或Top Blocked Evaluated Domain中看到相关阻止信息。

图 44. Top Blocked Domain and Top Blocked Evaluated Domain
- 还可以检查域名的DNS 查询结果来验证。如下图所示, DNS 解析器返回了DNSBL Web服务器的虚拟IP地址(默认为 10.10.10.1)。

图 45. nslookup 查询结果
提示:可以将自定义的pfBlockerNG 阻止网页添加到/usr/local/www/pfblockerng/www/,然后在DNSBL Configuration窗格的Blocked Webpage选项中激活。广告拦截验证
验证 pfBlockerNG 的广告拦截功能,可以用浏览器打开yahoo.com网站。下面的两张网页截图显示了拦截前后的对比效果。


图 46. yahoo.com 页面的广告拦截效果
DNS over HTTPS/TLS阻止
pfBlockerNG允许通过HTTPS/TLS 数据包阻止网络上的DNS。它包括支持DNS over HTTPS的已知公共 DNS 服务器的完整列表。由于使用HTTPS 的 DNS 存在严重的隐私和安全风险,因此应该在pfBlockerNG上启用 DoH/DoT(基于HTTPS的DNS/基于TLS的DNS)功能,以避免网络中的某些用户绕过 pfBlockerNG 的广告拦截和pfSense DNS服务器。
要启用 DoH/DoT 阻止,按以下步骤进行操作。
- 导航到Firewall -> pfBlockerNG -> DNSBL -> DNSBL SafeSearch。
- 在DNS over HTTPS/TLS Blocking部分的DoH/DoT Blocking 选项上,选择Enable。
- 在DoH/DoT Blocking List选项上,选中想阻止的所有DNS 服务器。
- 点击页面底部的Save按钮。

图 47. 在 pfBlockerNG上启用 DoH/DoT
启用安全搜索和YouTube限制
pfBlockerNG SafeSearch功能,可以强制搜索网站使用“安全搜索”算法。目前,Google、Yandex、DuckDuckGo、Bing 和 Pixabay 都支持这种功能。
pfBlockerNG 还有YouTube Restrictions(限制)功能。该模式会过滤掉过部分不宜观看的视频。分两个限制级别:
- Strict:严格模式不会阻止所有视频,而是作为过滤器,基于自动化系统筛选掉部分视频,同时保留一些视频可供观看。
- Moderate:此设置类似于严格模式,但可以提供更多的视频集合。
要启用安全搜索和 YouTube 限制,可以按以下步骤操作。
- 导航到Firewall -> pfBlockerNG -> DNSBL -> DNSBL SafeSearch。
- 在SafeSearch Redirection选项,选中Enable。
- 在YouTube Restrictions选项,选择Moderate或Strict来启用 YouTube 限制。
- 单击页面底部的Save按钮。

图 48. pfBlockerNG 上的安全搜索设置
白名单
在某些情况下,正常合法的访问可能会pfBlockerNG被阻止,这有可能是误报的原因,也可能表明合法网站已被黑客入侵,因此在加入白名单之前要严格注意。由于阻止列表经常更新,出现这些问题通常只是暂时的。
要添加白名单,按以下步骤操作:
- 导航到Firewall -> pfBlockerNG -> Reports -> Alerts。
- 查看最近的阻止列表,并通过单击旁边的图标将有问题的项目添加到白名单中。例如,我们将用于DNSBL测试的域名
dnsbltest.com添加到白名单,这会弹出一条确认消息。

图 49. pfBlockerNG 上的域白名单
- 单击OK。
- 系统会询问是否只想将此域名列入白名单或为该域名添加通配符。根据需要进行选择。

图 50. pfBlockerNG-2 上的域白名单
- 然后,单击Yes输入描述。

图 51. 输入白名单的描述
- pfBlockerNG不会再阻止列入白名单的域名了。

图 52. 白名单成功添加完成
参考原文:pfBlockerNG 官方教程
觉得内容不错?我要