备份和恢复
- 在WebGUI中进行备份
- 使用AutoConfigBackup插件
- 远程备份技术
- 从备份中恢复
- 用备份插件备份文件和目录
- 警告和问题
pfSense使用基于XML的配置文件,备份轻而易举。系统的所有设置都保存在一个文件中。在绝大多数情况下,这个文件可用于将系统恢复到与之前运行的完全相同的工作状态。不需要备份整个系统,因为基本系统文件不会被正常运行修改。
注意: 在极少数情况下,插件可能会将文件存储在config.xml之外,请查看插件文档以获取更多信息和备份建议。
备份策略
最佳做法是在每次较小更改后进行备份,并在每次重大更改或一系列更改之前和之后进行备份。通常,如果所做的更改可能产生不良影响,则应先进行初始备份。在对更改进行评估并确保其达到预期结果后,进行事后备份。无论有何变化,定期备份也很有帮助,尤其是在可能错过手动备份的情况下。
每次更改时,pfSense都会自动进行一次内部备份,但我们仍然建议您下载手动备份文件。自动备份对于回滚有害的更改非常有用,但对灾难恢复则不然,因为它们保存在系统本身上,而非外部。由于这是一个相当简单且无痛的过程,管理员应养成时常下载备份并将其保存在安全位置的习惯。如果您是pfSense黄金订阅会员,则可以使用AutoConfigBackup插件轻松自动地处理备份。
如果对系统文件进行了更改(例如自定义修补程序或代码更改),则必须手动备份这些更改,或使用备份文件和目录中所述的备份插件来备份它们,因为这些修改不会被内置的备份系统备份或恢复。这包括对本书其他地方提到的系统文件的更改,如 /boot/device.hints, /boot/loader.conf.local 等。
注意: 除了进行备份之外,还必须测试备份。在将系统投入生产之前,请备份配置,擦除磁盘,然后尝试本章中的一些不同恢复技术。我们还强烈建议定期在非生产机器或虚拟机上测试备份。如果备份文件不能正常使用,那将是无比糟糕的事情!
RRD图形数据可以选择性地保存在XML配置备份中。由于会使备份文件增大,此行为默认处于禁用状态。还有其他方法可以确保这些数据的安全备份。请参阅本章后面的“备份文件和目录”。
在WebGUI中进行备份
在WebGUI中进行备份非常简单:
- 导航到 系统诊断 > 备份和恢复
- 将备份区设置为 ALL(默认选项)
- 设置其他所需选项,例如跳过RRD和加密
- 单击 将配置下载为XML

WebGUI 备份
浏览器将提示将文件保存在用于访问WebGUI的PC上某处。文件将被命名为 config-<hostname>-<timestamp>.xml,在保存之前您也可以更改它。
使用AutoConfigBackup插件
pfSense会员可以通过AutoConfigBackup插件访问自动配置备份服务。
功能和优点
进行防火墙配置更改时,配置会自动用在插件中输入的密码加密,并通过HTTPS上传到AutoConfigBackup服务器。加密的配置文件保留在AutoConfigBackup服务器上。这样,一旦配置了插件,就可以在没有用户干预的情况下即时安全地进行防火墙配置文件的非现场备份。
pfSense版本兼容性
AutoConfigBackup插件可与所有受支持的pfSense版本以及许多旧版本配合使用。
安装和配置
要安装插件:
- 导航到 系统 > 插件管理, 可用插件选项卡
- 在列表中找到 AutoConfigBackup
- 在AutoConfigBackup条目右侧单击 安装
- 点击 确认安装
防火墙将下载并安装该插件。安装完成后,可在 系统诊断 > AutoConfigBackup 下的菜单中找到该插件。
设置主机名
确保在 系统 > 常规设置 中配置唯一的主机名和域。AutoConfigBackup中的配置条目由FQDN(完全限定域名,即主机名+域)存储,因此每个备份的防火墙必须具有唯一的FQDN,否则系统无法区分多个安装。
配置AutoConfigBackup
该插件在 系统诊断 > AutoConfigBackup 下进行配置。在设置选项卡上,按如下所示填写设置:
| 设置项 | 说明 |
|---|---|
| Subscription Username(订阅用户名): | 您的 pfSense Gold 订阅账户的用户名。 |
| Subscription Password/Confirm(订阅密码/确认): | 您的 pfSense Gold 订阅账户的密码。 |
| Encryption Password/Confirm(加密密码/确认): | 上传前用于加密配置的任意密码。这应该是一个较长且复杂的密码,以确保配置的安全性。AutoConfigBackup服务器仅保存加密副本,如果没有此加密密码,这些副本将毫无用处。 |
注意: 加密密码必须在防火墙外安全地记住或保存。如果没有加密密码,配置文件将无法恢复,并且加密密码不会存储在配置文件以外的服务器上。
测试备份功能
进行更改来强制执行配置备份,例如编辑和保存防火墙或NAT规则,然后单击应用更改。访问 系统诊断 > AutoConfigBackup 的“恢复”选项卡,该选项卡将列出可用的备份以及进行修改的页面(如果可用)。
手动备份
手动备份应在升级或一系列重大更改之前进行,因为它将存储带有明确说明原因的备份,便于在必要时进行恢复。由于每次配置更改都会触发新的备份,因此在进行一系列更改时,可能很难知道进程的起始位置。
强制手动备份配置:
- 导航到 系统诊断 > AutoConfigBackup
- 点击顶部的 立即备份 标签
- 输入备份原因
- 单击 备份
恢复配置
要恢复配置:
- 导航到 系统诊断 > AutoConfigBackup
- 点击顶部的 恢复 标签
- 在列表中找到所需的备份
- 在配置行的右侧单击(恢复按钮)

防火墙将从AutoConfigBackup服务器下载指定的配置,使用加密密码对其进行解密并恢复。
默认情况下,插件不会自动重新启动。根据恢复的配置项目,重新启动可能不是必需的。例如,防火墙和NAT规则在恢复配置后会自动重新加载。恢复后,系统会提示用户是否要重新启动。如果恢复的配置更改了NAT和防火墙规则以外的任何设置,请选择“是”,允许防火墙重新启动。
故障恢复
如果防火墙的硬盘出现故障,需要执行以下步骤在新安装中进行恢复:
- 更换发生故障的硬盘
- 在新硬盘上安装pfSense
- 配置局域网和广域网,并按照先前配置的方式分配主机名和域
- 安装 AutoConfigBackup 插件
- 如上所述配置AutoConfigBackup插件,使用相同的订阅帐户和相同的加密密码
- 访问 恢复 选项卡
- 选择要恢复的配置
- 当恢复后提示重新启动时,请按要求操作
一旦防火墙重新启动,它将在故障前的备份配置下运行。
检查AutoConfigBackup状态
通过查看“还原”选项卡上显示的备份列表,可以检查AutoConfigBackup运行的状态。此列表是从AutoConfigBackup服务器中提取的。如果有备份在那里列出,则代表其已成功创建。
如果备份失败,则会记录一条警报,并将在WebGUI中显示通知内容。
远程备份技术
以下技术也可用于远程执行备份,但每种方法都有其自身的安全问题,可能会排除在许多环境中的应用。首先,这些技术不会加密可能包含敏感信息的配置,这可能导致配置在不受信任的链路上未加密传输。如果必须使用其中一种技术,最好从非WAN链路(如LAN、DMZ等)或通过VPN进行。如果不加密,也必须控制对持有备份的存储介质的访问权限。与pfSense黄金订阅一起提供的AutoConfigBackup插件是一种更简单、更安全的远程备份自动化方式。
使用 wget
可以使用 wget 从远程系统检索配置,并且可以通过 cron 或其他方式编写此过程的脚本。即使在使用HTTPS时,这也不是真正安全的传输模式,因为为了适应自签名证书通常会禁用证书检查,从而可能遭到中间人攻击。在不受信任的网络中使用 wget 运行备份时,请使用带有可以通过 wget 验证的受信证书的HTTPS。
在pfSense 2.2.6及更高版本中,wget 命令必须分成多个步骤来处理登录过程和备份下载,同时还要考虑CSRF验证。
对于运行带有自签名证书的HTTPS的防火墙,命令如下所示:
获取登录表单并保存Cookie和CSRF令牌:
$ wget -qO- --keep-session-cookies --save-cookies cookies.txt \ --no-check-certificate https://192.168.1.1/diag_backup.php \ | grep "name='__csrf_magic'" | sed 's/.*value="\(.*\)".*/\1/' > csrf.txt提交登录表单以及第一个CSRF令牌并保存第二个CSRF令牌:
$ wget -qO- --keep-session-cookies --load-cookies cookies.txt \ --save-cookies cookies.txt --no-check-certificate \ --post-data "login=Login&usernamefld=admin&passwordfld=pfsense&__csrf_magic=$(cat csrf.txt)" \ https://192.168.1.1/diag_backup.php | grep "name='__csrf_magic'" \ | sed 's/.*value="\(.*\)".*/\1/' > csrf2.txt现在脚本已经登录并可以采取行动。提交下载表单以及第二个CSRF令牌以保存config.xml的副本:
$ wget --keep-session-cookies --load-cookies cookies.txt --no-check-certificate \ --post-data "Submit=download&donotbackuprrd=yes&__csrf_magic=$(head -n 1 csrf2.txt)" \ https://192.168.1.1/diag_backup.php -O config-hostname-`date +%Y%m%d%H%M%S`.xml请将用户名和密码替换为防火墙的实际凭证,IP地址替换为执行备份的系统可以访问的防火墙地址。要备份RRD文件,请忽略最后一条命令中的
&donotbackuprrd=yes参数。
执行备份的系统也需要访问WebGUI,因此应相应地调整防火墙规则。强烈不建议通过WAN执行此操作。至少应使用HTTPS,并将对WebGUI的访问权限限制为一组可信的公共IP地址。最好在本地或通过VPN进行此操作。
使用SCP
配置文件也可以使用 scp 从pfSense防火墙推送到另一个UNIX系统。手动使用 scp 推送一次性备份可能很有用,但以自动方式使用它会带来一些风险。scp 的命令行取决于系统配置,一般内容如下:
# scp /cf/conf/config.xml \
user@backuphost:backups/config-`hostname`-`date +%Y%m%d%H%M%S`.xml为了以自动方式推送配置,请在不使用密码的情况下生成SSH密钥。由于无密码密钥存在不安全性质,此类密钥的权限应限制在最小范围。这确实增加了风险,因为任何有权访问该私钥文件的人都可以访问目标主机上的指定账户,尽管密钥保存在防火墙的受限访问区域,在大多数情况下风险可控。如果这样做,请确保目标系统上的远程用户处于隔离状态,并拥有最少或没有特权。
在这种情况下,可能需要对 scp 环境进行 chroot。scponly shell可用于大多数允许SCP文件拷贝但拒绝交互式登录的UNIX平台。某些版本的OpenSSH具有内置的sftp(Secure FTP)的 chroot 支持。这些步骤极大地限制了与远程服务器相关的风险,但仍会使备份数据面临危险。访问配置完成后,可以将 cron 条目添加到pfSense系统以调用 scp。
基于SSH备份
类似于scp备份,还有一种方法可以在一个UNIX系统上运行。此方法不会调用SCP / SFTP层,如果系统已处于失败状态,某些情况下可能无法正常工作:
$ ssh user@192.168.1.1 cat /cf/conf/config.xml > backup.xml执行时,该命令将在当前工作目录中生成一个名为 backup.xml 的文件,其中包含远程pfSense防火墙配置。使用 cron 自动执行此方法也是可能的,但这需要在执行备份的主机上配置无密码的SSH密钥。此密钥将启用对防火墙的管理访问权限,因此必须严格控制。
从备份中恢复
如果无法恢复备份,并通过恢复来测试它们,备份将毫无意义。pfSense提供了几种恢复配置的方法,最终结果都相同:一个与备份时状态相同的运行系统。
通过WebGUI恢复
大多数用户恢复配置的最简单方法是使用WebGUI:
- 导航到 系统诊断 > 备份和恢复
- 找到 恢复配置 部分
- 选择要恢复的区域(通常为 ALL)
- 点击 浏览
- 在本地PC上找到备份文件
- 点击 恢复配置

WebGUI恢复
配置被应用,防火墙将使用从备份文件获得的设置重新启动。
虽然易于使用,但此方法在完全恢复到新系统时确实有一些先决条件。首先,新目标系统需要完全安装并正常运行。其次,需要一台额外的PC连接到工作网络或直接连接到防火墙后进行恢复。
从历史配置中恢复
对于一些小问题,使用pfSense防火墙上的内部备份是撤销更改的最简单方法。完整安装后,最近的30个配置与当前的运行配置一起存储在配置历史记录中。在NanoBSD上,会存储5个配置。每行显示配置文件的生成日期、配置版本、在GUI中进行更改的用户和IP地址、进行更改的页面以及某些情况下的简要说明。
从历史记录恢复配置:
- 导航到 系统诊断 > 备份和恢复
- 点击 配置历史记录 选项卡
- 在列表中找到所需的备份
- 单击恢复按钮来恢复该配置文件

配置历史记录
配置将被恢复,但不会自动重启。微小的更改不需要重新启动,但恢复一些重大更改时则应重新启动防火墙。
如果只在某一特定部分做了更改(如防火墙规则),则在GUI的该区域触发刷新以应用更改。对于防火墙规则,重新加载过滤器就足够了。对于OpenVPN,编辑和保存VPN实例即可。采取的必要操作取决于配置中更改的内容,但确保完整配置生效的最佳方法是重新启动。如有必要,请转至 系统诊断 > 重新启动系统,然后单击 是,用新配置重新启动防火墙。
以前保存的配置可以通过点击下载按钮来下载一份副本。
配置历史记录设置
如果需要,可以更改保留在配置历史记录中的备份数量。
- 导航到 系统诊断 > 备份和恢复
- 单击 配置历史记录 选项卡
- 在“保存的配置”栏右侧单击展开设置按钮。
- 输入要保留的配置数量
- 单击 保存
除配置计数外,这里还会显示当前备份所占用的磁盘空间量。
配置历史差异
任意两个配置文件之间的差异可以在“配置历史记录”选项卡中查看。在配置文件列表的左边有两列单选按钮。使用最左边的一列选择两个配置文件中较早的一个,然后使用右边的一列选择较新的一个。选定两个文件后,在列的顶部或底部单击 比较。
控制台配置历史
配置历史记录恢复也可以通过在控制台菜单选择 15 选项来恢复最近的配置。菜单将列出最近的配置文件并允许对其进行恢复。如果最近的更改已将管理员锁定在GUI之外或使系统脱离网络,这种方法将非常有用。
通过安装磁盘进行恢复
这种方法在嵌入式系统用户中很流行。当pfSense防火墙的CF卡或磁盘连接到运行FreeBSD的计算机时,可以挂载该驱动器,并将新配置直接复制到已挂载的系统上,或在发生故障的系统中替换配置。
注意: 这也可以在另一台备用的pfSense防火墙上执行,而不是在运行FreeBSD的计算机上,但请勿使用正在运行的生产防火墙来达到此目的。建议只使用备用或测试防火墙。
在NanoBSD中,config.xml 文件保存在 /cf/conf/ 目录下,不同之处在于该目录所在位置。对于NanoBSD安装,它在一个独立的分区上,例如 ad0s3(如果驱动器是 ad0)。借助最近版本FreeBSD上的GEOM(模块化存储框架)标签,通过使用标签 /dev/ufs/cf,无论设备名称如何,也可以访问此分区。对于完整安装,它是根分区的一部分(通常为 ad0s1a)。驱动器名称会因系统中的类型和位置而异。
NanoBSD示例
首先,将CF卡连接到FreeBSD系统上的USB读卡器或另一台不活动的pfSense系统。大多数情况下,它会被识别为 da0。控制台也会显示消息,反映设备名称和新提供的GEOM标签。
挂载配置分区:
# mount -t ufs /dev/ufs/cf /mnt如果出于某些原因GEOM标签不可用,请直接使用设备,例如
/dev/da0s3。将一个配置复制到卡上:
# cp /usr/backups/pfSense/config-alix.example.com-20090606185703.xml \ /mnt/conf/config.xml务必卸载配置分区:
# umount /mnt- 拔下CF卡,将其重新插入防火墙,然后开启。现在,防火墙将以复制过去的配置运行。
要从卡中复制出配置,过程相同,但 cp 命令的参数是相反的。
用备份插件备份文件和目录
备份插件允许备份和恢复系统上任何给定的一组文件/文件夹。对于大多数情况并非必需,但对备份RRD数据或可能具有未保存在 config.xml 中的自定义文件的插件会非常有用。
要安装插件:
- 导航到 系统 > 插件管理
- 在列表中找到 Backup 插件
- 在右侧单击 安装
- 点击 确认 开始安装
安装完成后,该插件可在 系统诊断 > Backup Files/Dir 中找到。使用相当简单,如以下示例所示。
备份RRD数据
使用这个备份插件,可以非常容易地在 config.xml 方法之外备份RRD图形数据。
- 导航到 系统诊断 > Backup Files/Dir
- 单击 Add,将新位置添加到备份集
- 在 Name 字段输入
RRD Files - 在 Path 字段输入
/var/db/rrd - 将 Enabled 设置为
True - 在 Description 栏输入
RRD Graph Data Files - 单击 Save
- 单击 Backup 按钮下载备份存档,其中包含备份集的配置文件和目录。
- 将文件保存在安全的位置,如果数据很重要,请考虑保留多个副本。
恢复 RRD数据
- 导航到 系统诊断 > Backup Files/Dir
- 单击 Browse
- 找到并选择先前下载的备份存档文件
- 点击 Upload 以恢复文件
对于此示例,因为RRD文件只在每60秒更新一次时才被触及,所以一旦文件恢复,就不需要重新启动或重启任何服务。
警告和问题
虽然pfSense保留的配置XML文件包含所有设置,但它不包含可能由系统手动进行的任何更改,例如手动修改源代码。此外,后期安装的插件可能需要额外的数据备份方法。
在某些情况下,配置文件可能包含敏感信息,如VPN密钥或证书以及明文密码(管理密码除外)。某些密码在运行时必须以纯文本格式提供,因此不可能对这些密码进行安全的哈希处理。对于任何有权访问源代码的人,任何混淆都微不足道。这是从m0n0wall延续到pfSense的一个有意识的设计决定,目的是为了非常清楚地表明该文件包含敏感内容且必须受到保护。因此,这些文件的备份副本也必须以某种方式受到保护。如果存储在可移动介质上,请注意该介质的物理安全性和/或加密驱动器。
如果WebGUI必须在没有VPN连接的情况下通过广域网使用,则至少应使用HTTPS。否则,包括备份文件中任何敏感信息在内的所有内容都将以明文形式传输。我们强烈建议使用可信网络或加密连接。
觉得内容不错?我要