> For the complete documentation index, see [llms.txt](https://freebsd-journal-cn.bsdcn.org/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://freebsd-journal-cn.bsdcn.org/20170506-an-quan/pfsense-and-security.md).

# pfSense 与安全

FreeBSD 是一个以高级网络栈和安全性著称的操作系统。它通过 Ports Collection 提供数以千计的第三方软件包，使有经验的用户能以最少投入运行出色的防火墙。其他经验较少甚至没有 FreeBSD 经验的用户，或在某些情况下资金更充裕的用户，更愿意使用商业产品运行安全解决方案。

作者：James Dekker、Luiz Otavio O. Souza 和 Renato Botelho

pfSense® 软件存在于这两个世界之间。pfSense 是一个运行在 FreeBSD 之上的开源防火墙/路由器发行版。所有配置都通过易用的 Web GUI 完成，许多功能由其他开源应用程序提供（如 Unbound、Strongswan、OpenVPN 等）。pfSense 软件为用户提供大多数商业防火墙所提供的主要功能，但主要优势在于成本更低且开源。开源软件在其行为或安全性存疑时可以被审计和修复。开源模式还允许任何人修复损坏的代码，而闭源软件只能由供应商修复。pfSense 软件诞生于 2004 年，作为 m0n0wall 的分支。此后持续开发和改进，使其成为全球数十万用户信赖的产品。目前有超过 550,000 个活跃的 pfSense 软件安装。Netgate 是 pfSense 背后的公司，雇用核心开发者，确保一年 365 天都有人工作和提供支持。Netgate 提供 7×24 小时支持和专业服务，帮助用户从零开始设计网络、审查现有配置，以及从大多数知名商业产品迁移到 pfSense 软件以满足客户需求。

## 新版本的改进

在长期基于 FreeBSD 8 之后，基于 FreeBSD 10.3 的 pfSense 软件 2.2 版于 2015 年 1 月 23 日发布。我们持续紧跟 FreeBSD，因此 2016 年 4 月 12 日发布的 2.3 版基于 FreeBSD 10.3（2016 年 3 月 28 日发布）。pfSense 软件 2.3 带来了大量新功能和改进。最显著的变化是使用 Bootstrap 完全重写了 Web GUI，底层系统（包括基本系统和内核）完全转换为 FreeBSD `pkg`。让 pfSense 软件使用 `pkg` 带来了三大好处。首先，pfSense 软件更新历史上以单体镜像形式分发，覆盖在当前安装版本之上。系统文件没有任何记录。使用 FreeBSD `pkg` 使得分发小版本升级变得容易，并使测试和验证新升级的过程更快。其次，使用 `pkg` 升级 pfSense 软件的每个组件可以检测内核是否在升级。在 2.4 版本中，pfSense-upgrade 使用此信息决定系统是否需要重启。如果不需要，它将使用 `reroot` 作为替代方案，系统将重启所有服务并使用同一运行中的内核更快地恢复在线。最后，从 2.1 版本开始，pfSense 使用 PBI 分发附加软件包。这在当时是个好选择，因为每个 PBI 包含所有必需的库和其他二进制依赖项，不会用额外文件污染 pfSense 核心。使用 `pkg` 后，所有主要和附加软件包都使用 `poudriere` 在同一环境中一起构建。Poudriere 确保依赖被正确追踪，并在卸载软件包时移除所有不必要的文件，保持系统干净。将 Web GUI 转换为 Bootstrap 使界面更现代、更易用、更直观，同时让代码更易读、更易扩展，从而带来了项目贡献的新高潮。2.3 Web GUI 转换期间，提交到 GitHub 上 pfSense 主仓库的拉取请求数量从 384 翻了一番多至 955。我们继续紧跟 FreeBSD 源代码。我们的下一个主要版本——pfSense 软件 2.4 版，在撰写本文时处于 BETA 阶段，将基于 FreeBSD 11。在此版本中，32 位架构和 nanobsd 模式已停止支持，但我们现在提供 ARM 平台镜像，更具体地说是为 Netgate SG-1000（uFW）提供。旧的 `bsdinstaller` 已被 `bsdinstall` 替代——与 FreeBSD 使用的安装器相同，它带来了 UEFI 和 ZFS 支持等重要功能。FreeBSD 11 还带来更新的 802.11 协议栈，当 pfSense 软件用作 WiFi 客户端或接入点时将带来众多改进。Netgate/pfSense 商店中提供原生无线的设备完全兼容 FreeBSD 11，非常适合包括研究和渗透测试在内的应用。在 2.3 和 2.4 开发期间，我们大幅减少了对 FreeBSD 源代码的补丁数量，以满足 pfSense 用户所需的功能。对上游 FreeBSD 用户有价值的更改已贡献给 FreeBSD，而其他补丁被移除，pfSense 经过重写以在不修补 FreeBSD 的情况下实现相同效果。作为此工作的成果，pfSense 软件 2.4 版目前运行在更接近原生 FreeBSD 的代码树上。这带来的优势是，我们现在能比以往更快地迁移到新的 FreeBSD 主要版本。过去，在不同的领导团队下，项目花了两年时间从 FreeBSD 8.1 迁移到 FreeBSD 8.3，又花了 20 个月从 FreeBSD 8.3 迁移到 FreeBSD 10.1。

## 强制门户

pfSense 软件中的强制门户（Captive Portal）功能通过要求用户名和密码（或只需在门户页面上点击确认）来保护网络安全。如果使用认证，可使用 pfSense 内部的用户管理或外部认证服务器，如 Active Directory、LDAP 或 RADIUS 服务器。pfSense 防火墙主要由 `pf` 实现，这是 FreeBSD 中三个包过滤器实现之一。启用强制门户时，它使用 `ipfw`——FreeBSD 中另一个可用的包过滤器实现。直到 pfSense 软件 2.3，我们一直使用一个大幅修改的 `ipfw` 版本，使强制门户能够在多实例下工作。在迁移到 FreeBSD 11 时，由于 FreeBSD 上 `ipfw` 的大规模重写，我们认为这是移除大型 `ipfw` 补丁并让强制门户使用原生 `ipfw`（或至少只需少量修改）的好时机。所有与 `ipfw` 交互的强制门户组件都经过了重写，结果是我们能够消除一个大型额外补丁，使我们比以往更接近原生 FreeBSD。在此工作中完成的必要更改将在 2.4 发布后进行审查并提交上游。

## 安全

pfSense 软件的主要目标是成为安全设备，因此我们对此非常重视。2014 年，我们宣布了安全公告，包含所有发现的安全相关问题及其对应的 CVE ID。与 Web GUI 相关的大量安全漏洞由 HTTP GET 的使用引起。为缓解此攻击向量，pfSense 软件 2.4 已将 Web GUI 的许多部分转换为仅通过 HTTP POST 工作。

## 代码审查

2016 年，Netgate 邀请 Infosec Global 对 pfSense 软件版本 2.3.2 进行自上而下的提交后审计。进行独立代码审查有助于提升产品质量。在此项目中，我们向 Infosec Global 提供了预装 pfSense 软件 2.3.2（默认生产配置）的 Netgate XG-2758 1U 安全网关设备。Infosec Global 以自下而上的百分比量表评估威胁，0% 为完美分数，100% 最为严重。如审计报告所示，pfSense 2.3.2 获得了出色的 1% 分数，其中包括在审计过程中随着 pfSense 软件 2.3.2\_p1 版本发布已缓解的问题。提出的其他问题不适用于所审查的固件版本。完整报告可在 <https://www.netgate.com/assets/ISG_Netgate_2016.pdf> 查看。

## 软件包

pfSense 的主要优势之一是能够安装提供额外功能的附加软件包，如 Snort、Suricata 和 Squid。过去，可用附加软件包的数量变得难以管理，因为一些维护者失去了兴趣，导致某些软件包停滞不前。在 pfSense 2.3 发布过程中，我们从旧的 `pfSense-packages` 仓库迁移到基于 FreeBSD Ports 的仓库时，决定清理并移除已在上游弃用、不再有活跃维护者或从未稳定过的软件包。剩余的软件包被转换为新的 Bootstrap 模型并重写为 FreeBSD `pkg`。2.3 版本发布后，社区团结起来迁移和维护一些被移除的软件包。经过审查，其中一些软件包被接受并重新引入可用软件包列表。

## 翻译

虽然 pfSense 一直是社区贡献的项目，但翻译工作在多年前就已开始，但从未对任何语言做到 100% 完成。我们也从未能为 pfSense 翻译贡献者提供集中场所或良好的工具链。对于 pfSense 软件 2.4 版本，我们决定重新启动这项工作，将 pfSense 软件添加到 Zanata 翻译网站。宣布此设置后不久，我们就收到了西班牙语、俄语、挪威语、中文（简体，中国）、中文（台湾）和波斯尼亚语的完整翻译，德语和许多其他语言也取得了令人瞩目的进展。如果你想看到 pfSense 软件翻译成你的母语，加入我们吧！

## OpenVPN

随着 pfSense 软件 2.4 版本的发布，OpenVPN 已升级到 2.4.0 版本。这是一次重大升级，包括对许多新功能的支持，如 AES-GCM 等 AEAD 密码。我们还添加了对可协商加密参数（Negotiable Crypto Parameters，NCP）的支持，以控制客户端和服务器之间的自动密码选择。

## Let’s Encrypt

2017 年 2 月，一个名为 ACME 的新软件包在软件包管理器中面向 2.3.2 以上版本提供。此软件包与 Let’s Encrypt 项目对接，处理证书的生成、验证和续期过程。Let’s Encrypt 是来自非营利组织 Internet Security Research Group（ISRG）的开放、免费且完全自动化的证书颁发机构。Let’s Encrypt 的目标是通过消除成本障碍和一些技术障碍来加密 Web，这些障碍阻碍了服务器管理员和组织获取用于 Internet 服务器（主要是 Web 服务器）的证书。大多数浏览器信任 Let’s Encrypt 的证书。这些证书可用于 Web 服务器（HTTPS）、SMTP 服务器、IMAP/POP3 服务器以及其他使用相同类型证书的类似角色。Let’s Encrypt 的证书是域名验证的，此验证确保请求证书的系统对相关服务器拥有权限。这种验证可以通过多种方式执行，例如通过证明对域名 DNS 记录的所有权，或在 Web 服务器上为该域名托管一个文件。通过使用 Let’s Encrypt 的证书（包括 pfSense 中的 Web GUI），浏览器将信任该证书并显示绿色勾号、挂锁或类似指示。连接将被加密，无需手动信任无效证书。

## 贡献上游

我们的主要上游是 FreeBSD。FreeBSD 的源代码和 Ports 仓库是构建和运行 pfSense 软件的基础。在过去两年中，Netgate 工程师向 FreeBSD src 仓库贡献了 155 次提交，向 FreeBSD Ports Collection 贡献了 35 次提交。但 FreeBSD 并非我们唯一的上游；我们还运行第三方项目提供的软件，如 Strongswan、OpenVPN 和 dpinger。pfSense 开发者始终坚持在发现 bug 或实现新功能时为上游项目提交修复。这是为整个用户群改进软件的持续努力的一部分。

## 云中的 pfSense 软件

借助当今的云平台，你可以像设置和连接远程分支机构一样，轻松地将本地 IT 环境扩展到云中。虽然这些服务提供了出色的 VPN 连接和访问列表设置工具，但它们不能提供对端点的完全可见性和可管理性，也不能保护关键云服务的连接。Netgate 在 AWS 和 Azure 上提供的 pfSense 软件镜像，以低于其他解决方案的成本为你的公共云基础设施提供高级路由、防火墙和 VPN 功能。预构建的 pfSense AWS 和 Azure 镜像具有与 Netgate 提供的 pfSense 硬件设备和 VMware 认证 pfSense 相似的功能。

## pfSense 2.4 的 ARM 支持

我们刚发布 pfSense 2.3 时，第一个 ARM 系统的原型机就到了我们桌上。那时我们知道 FreeBSD 在 10 到 11 之间的 ARM 支持发展如此之快，以至于移植许多新功能和修复变得极其困难。我们清楚地认识到 FreeBSD 11 是唯一合理的选择，继续前进是提供最佳 ARM 体验的方式。此后，Netgate 已将在 SG-1000 上开发、测试并日常使用的所有代码提交上游。针对此平台所用 SoC 的一些特定贡献包括：

* 大量平台和以太网修复，提升系统稳定性和性能
* 双以太网支持
* 集成以太网交换机管理

向开发环境引入一个新的、不那么宽容的 ARM 架构还帮助我们发现了若干行为不当的代码段，这些代码在更宽容的架构上可能会被忽略。修复这些问题带来了代码正确性和更好的整体可移植性。如今，pfSense 中的 ARM 支持为这一新引入架构的任何用户提供了无缝体验。一切都经过精心设计，提供可靠、流畅且极其直观的体验，以至于你可能忘记自己正在使用一台微小的 ARM 设备（除非你设法想起这个小设备生活——或藏身——在你的办公室里）。得益于 pfSense 对 `pkg` 更新的支持，SG-1000 上的更新轻而易举，整个系统通过 Web GUI 更新（FreeBSD 内核和基本系统、pfSense 基本系统和软件包），使这些设备的管理变得出色。SG-1000 大幅增加了全球 FreeBSD ARM 设备的数量。在撰写本文时，我们正在积极开发下一代 ARM 系统——一个具有更高速度和更多硬件功能的双核 ARM。自 pfSense 作为 m0n0wall 的分支诞生以来，它不断演化为越来越深入企业市场的产品，同时仍满足并超越中小企业（SMB）、专业消费者和家庭用户的需求。它最初是一个为嵌入式硬件系统提供可扩展、易用软件产品的项目，现已成长为一个可在从比信用卡还小的嵌入式 ARM 设备到占用 2U 机架空间的高可用系统甚至更大集群配置的硬件上运行的产品。这一高度通用、日益稳定且安全的软件产品，如果没有社区和 Netgate 资源的大规模支持和参与，是不可能实现的。正是凭借这些的结合，我们才能继续在 FreeBSD 的可能性边界上不断突破，而且随着时间的推移，回到我们的根——为嵌入式设备提供可扩展、高吞吐、易用的软件产品。•

***

**RENATO BOTELHO** 在朋友给他一张安装 CD 并说“安装它，永远不要回头”后，从 3.2 版本开始使用 FreeBSD。他 2004 年首次为 FreeBSD Ports 树做贡献，次年成为提交者。同样，他在 2009 年参与 pfSense 后很快受雇于 Netgate。他与妻子、儿子、女儿和两只狗住在巴西的一个小城市。不在电脑前时，他喜欢跑步、CrossFit、啤酒和烧烤——顺序不一定如此。

**JAMES DEKKER** 是 pfSense 的铁杆粉丝，也是 Netgate 的生产支持分析师。他热衷于保护系统及其连接的网络。他从事 \*nix 系统工作已有相当时间，主要专注于安全、网络和系统管理。他从 2.0 版本开始使用 pfSense，从 2.1 版本开始为社区提供支持。James 不工作或不在办公室搞破坏时，可以在海滩上找到他，或者在钓鱼，或在家庭牧场工作。他与妻子、狗和猫住在佛罗里达的 Treasure Coast。

**LUIZ OTAVIO O. SOUZA** 是 Netgate 的软件工程师，也是 FreeBSD 提交者。


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://freebsd-journal-cn.bsdcn.org/20170506-an-quan/pfsense-and-security.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
