pfSense book之备份和恢复

备份和恢复

  • 在WebGUI中进行备份
  • 使用AutoConfigBackup插件
  • 远程备份技术
  • 从备份中恢复
  • 用备份插件备份文件和目录
  • 警告和问题

pfSense使用的基于XML的配置文件,备份是一件轻而易举的事情。 系统的所有设置都保存在一个文件中。 在绝大多数情况下,这个文件可用于将系统恢复到与之前运行的完全相同的工作状态。 不需要进行整个系统的备份,因为基本系统文件不会被正常运行的系统修改。

注意:在极少数情况下,插件可能会将文件存储在config.xml之外,请查看插件文档以获取更多信息和备份建议。

备份策略

最佳做法是在每次较小更改后进行备份,并在每次重大更改或一系列更改之前和之后进行备份。通常,如果所做的更改具有不良影响,则应进行初始备份。在对变化进行评估并确保其具有预期结果后,进行事后备份。无论有何变化,定期备份也很有帮助,特别是在由于某种原因可能会错过手动备份的情况下。

每次更改时,pfSense都会进行内部备份,我们还建议您下载手动备份文件。每次更改时进行的自动备份对于在更改已证明有害之后恢复到之前的配置都很有用,但对灾难恢复不利,因为它们在系统本身而不是在外部保存。由于这是一个相当简单且无痛的过程,因此管理员应该习惯于不时下载备份并将其保存在安全的地方。如果你是pfSense黄金订阅会员,则可以使用AutoConfigBackup插件轻松自动处理备份。

如果对系统文件进行了更改(如自定义修补程序或代码更改),则必须手动备份这些更改或使用备份文件和目录中所述的备份插件来备份这些修改,因为它们不会被内置的备份系统备份或恢复 。 这包括对本书其他地方提到的系统文件的更改,如as/boot/device.hints/boot/loader.conf.local等。

注意:除了进行备份之外,还必须测试备份。 在将系统投入生产之前,请备份配置,擦除磁盘,然后尝试本章中的一些不同的恢复技术。 我们还强烈建议定期在非生产机器或虚拟机上测试备份。 如果备份文件不能正常使用,那将是无比糟糕的事情!

RRD图形数据可以选择性地保存在XML配置文件备份中。 由于备份文件的结果较大,此行为在默认情况下处于禁用状态。 还有其他方法可以确保这些数据安全备份。 请参阅本章后面的备份文件和目录。

在WebGUI中进行备份

在WebGUI中进行备份非常简单。

  • 导航到系统诊断>备份和恢复
  • 将备份区设置为ALL(默认选项)
  • 设置其他所需的选项,例如跳过RRD和加密
  • 单击将配置下载为XML(下图WebGUI备份)。

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(订阅用户名):
The username for the pfSense Gold Subscription account
Subscription Password/Confirm(订阅密码/确认):
The password for the pfSense Gold Subscription account
Encryption Password/Confirm(加密密码/确认):
上传前用于加密配置的任意密码。 这应该是一个较长且复杂的密码,以确保配置的安全性。 AutoConfigBackup服务器仅保存加密副本,如果没有此加密密码,这些副本将毫无用处。

注意

加密密码必须在防火墙外安全地记住或保存。 如果没有加密密码,配置文件将无法恢复,并且加密密码不会存储在配置文件以外的服务器上。

测试备份功能

进行更改来强制执行配置备份,例如编辑和保存防火墙或NAT规则,然后单击应用更改。 访问系统诊断> AutoConfigBackup,恢复选项卡,该选项卡将列出可用的备份以及进行修改的页面(如果可用)。

手动备份

手动备份应在升级或一系列重大更改之前进行,因为它将存储明确说明原因的备份,这样便于在必要时进行恢复。 由于每次配置更改都会触发新的备份,因此在进行一系列更改时,可能很难知道进程的起始位置。

强制手动备份配置:

  • 导航到系统诊断> AutoConfigBackup
  • 点击顶部的立即备份标签
  • 输入备份原因
  • 单击备份

恢复配置

要恢复配置:

  • 导航到系统诊断> AutoConfigBackup
  • 点击顶部的恢复标签
  • 在列表中找到所需的备份
  • 在配置行的右侧单击

防火墙将下载从AutoConfigBackup服务器指定的配置,使用加密密码对其进行解密并进行恢复。

默认情况下,插件不会启动重新启动。 根据恢复的配置项目,重新启动可能不是必需的。 例如,防火墙和NAT规则在恢复配置后自动重新加载。 恢复后,会提示用户是否要重新启动。 如果恢复的配置更改NAT和防火墙规则以外的任何其他配置,请选择“是”,并允许防火墙重新启动。

故障恢复

如果防火墙中的硬盘出现故障,需要执行以下步骤才能在新安装中进行恢复。

  • 更换发生故障的硬盘
  • 在新硬盘上安装pfSense
  • 配置局域网和广域网,并按照先前配置的方式分配主机名和域
  • 安装AutoConfigBackup插件
  • 如上所述配置AutoConfigBackup插件,使用相同的订阅帐户和相同的加密密码
  • 访问恢复选项卡
  • 选择要恢复的配置
  • 当恢复后提示重新启动时,请按要求操作

一旦防火墙重新启动,它将在故障前备份配置的情况下运行

检查AutoConfigBackup状态

通过查看“还原”选项卡上显示的备份列表,可以检查AutoConfigBackup运行的状态。此列表是从AutoConfigBackup服务器中提取的。如果有备份在那里列出,则它已成功创建。

如果备份失败,则会记录一条警报,并将在WebGUI中显示通知内容。

远程备份技术

以下技术也可用于远程执行备份,但每种方法都有其自身的安全问题,可能会排除在许多地方的使用。 对于初学者来说,这些技术不会加密可能包含敏感信息的配置。 这可能会导致配置通过未加密的不可信链接进行传输。 如果必须使用其中一种技术,最好从非WAN链路(LAN,DMZ等)或***上这样做。 如果不加密,也必须控制对持有备份的存储介质的访问权限。 AutoConfigBackup插件与pfSense黄金订阅一起提供,这是一种更简单、更安全的远程备份自动化方式。

使用 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地址可以是执行备份的系统可以访问的任何IP地址,而且要使用HTTP或HTTPS来匹配防火墙GUI。 要备份RRD文件,请忽略最后一条命令中的&donotbackuprrd = yes参数。

执行备份的系统也需要访问WebGUI,因此应相应调整防火墙规则。 不建议通过WAN执行此操作。 至少应使用HTTPS并将对WebGUI的访问权限限制为可信的一组公共IP地址。 最好在本地或通过***进行此操作。

使用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密钥。 由于没有密码密钥的不安全性质,这样的密钥只限于用来来练习。 这增加了风险,因为任何有权访问该文件的人都可以访问指定的帐户,尽管因为密钥保存在防火墙的访问受限的地方,所以在大多数情况下这不是一个相当大的风险。 如果已完成,请确保远程用户处于隔离状态,并且在目标系统上具有很少或没有特权。

在这种情况下,可能需要chroot scp环境。 scponly shell可用于大多数允许SCP文件拷贝但拒绝交互式登录功能的UNIX平台。 某些版本的OpenSSH具有内置的sftp(Secure FTP)的chroot支持。 这些步骤极大地限制了与远程服务器相关的风险,但仍会使备份的数据处于危险之中。 访问配置完成后,可以将cron条目添加到pfSense系统以调用scp。

基于SSH备份

类似于scp备份,还有另一种方法可以在一个UNIX系统上运行。此方法不会调用SCP / SFTP层,如果系统已处于失败状态,某些情况下可能无法正常工作:

$ ssh root@192.168.1.1 cat /cf/conf/config.xml > backup.xml

执行时,该命令将在当前工作目录中产生一个名为backup.xml的文件,该文件包含远程pfSense防火墙配置。 使用cron自动执行此方法也是可能的,但此方法需要执行备份的主机上没有密码的SSH密钥。 此密钥将启用对防火墙的管理访问权限,因此必须严格控制。

从备份中恢复

如果没有办法恢复它们,并且通过扩展来测试它们,备份是无用的。 pfSense提供了几种恢复配置的方法。 有些人比其他人涉及更多,但每个人都会得到相同的最终结果:与备份时相同的运行系统。

通过WebGUI恢复

大多数用户恢复配置的最简单方法是使用WebGUI:

  • 导航到系统诊断>备份和恢复
  • 找到恢复配置部分(下图WebGUI恢复)
  • 选择要恢复的区域(通常为ALL)
  • 点击浏览
  • 在本地PC上找到备份文件
  • 点击恢复配置

配置被应用,防火墙将使用从备份文件获得的设置重新启动。

WebGUI恢复

虽然易于使用,但此方法在处理完全恢复到新系统时确实有一些先决条件。 首先,需要在新的目标系统完全安装并运行后完成。 其次,它需要一台额外的PC连接到工作网络或pfSense防火墙后面的交叉电缆进行恢复。

从历史配置中恢复

对于一些小的问题,使用在pfSense防火墙上其中一个内部备份是撤销更改的最简单方法。 完整安装后,先前的30个配置与当前的运行配置一起存储在配置历史记录中。 在NanoBSD上,存储了5种配置。 每行显示配置文件的生成日期,配置版本,在GUI中进行更改的用户和IP地址,进行更改的页面以及某些情况下的简要说明。 每行右侧的操作按钮将显示鼠标指针悬停在按钮上时所做操作的说明。

从历史记录恢复配置:

  • 导航到系统诊断>备份和恢复
  • 点击配置历史记录选项卡(下图配置历史记录)。
  • 在列表中找到所需的备份
  • 单击  恢复该配置文件

配置历史记录

配置将被恢复,但在需要重启不会自动完成。微小的更改不需要重新启动,但恢复一些重大更改将会重新启动防火墙。

如果只在一个特定部分进行更改(如防火墙规则),则在GUI的该区域触发刷新以启用更改。 对于防火墙规则,过滤器重新加载就足够了。 对于Open***,编辑和保存***实例就足够了。 采取的必要操作取决于配置中更改的内容,但确保完整配置处于活动状态的最佳方法是重新启动。 如有必要,请转至系统诊断>重新启动系统,然后单击,用新配置重新启动防火墙。

以前保存的配置可以通过点击来删除,但不要手动删除它们以节省空间; 当新的配置备份被创建时,旧的配置备份会自动删除。 希望从已知错误的配置更改中删除备份以确保不会意外恢复。

通过单击可以下载以前配置的副本 。

配置历史记录设置

如果需要,可以更改存储在配置历史记录中的备份数量。

  • 导航到系统诊断>备份和恢复
  • 单击配置历史记录选项卡
  • 在保存的配置栏右侧单击展开设置。
  • 输入要保留的配置数量
  • 单击保存

除配置计数外,这里还会显示当前备份所占用的空间量。

配置历史差异

任何两个配置文件之间的差异可以在配置历史记录选项卡中查看。 在配置文件列表的左边有两列单选按钮。 使用最左边的列选择两个配置文件中较早的一个,然后使用右侧列选择这两个文件中较新的一个。 一旦选择了这两个文件,在列的顶部或底部单击比较

控制台配置历史

配置历史记录恢复也可以选择控制台菜单中的15选项来恢复最近的配置。 菜单选择将列出最近的配置文件并允许对它们进行恢复。 如果最近的更改已将管理员锁定在GUI外或将系统从网络中取出,这种方法很有用。

通过安装磁盘进行恢复

这种方法在嵌入式用户中很受欢迎。 当来自pfSense防火墙的CF或磁盘连接到运行FreeBSD的计算机时,可以挂载该驱动器,并且以将新配置直接复制到已安装的系统上,或者可以替换掉发生故障的系统中的配置。

注意:这也可以在单独的pfSense防火墙上执行,而不是运行FreeBSD的计算机,但不要使用活动的生产防火墙来达到此目的。建议只请使用备用或测试防火墙。

在NanoBSD中,config.xml文件保存在/ cf / conf /中,但不同之处在于该目录所在的位置。 对于NanoBSD安装,这是在一个单独的分区上,如ad0s3,如果驱动器是ad0。 借助最近版本的FreeBSD上的GEOM(模块化存储框架)标签以及在基于NanoBSD的嵌入式文件系统上的使用,通过使用标签/ dev / ufs / cf,无论设备名称如何,也可以访问这个分区。 对于完整安装,它是根分区的一部分(通常为ad0s1a)。 驱动器名称将根据系统中的类型和位置而有所不同。

NanoBSD示例

首先,将CF连接到FreeBSD系统上的USB读卡器或另一个不活动的pfSense系统。 对于大多数情况下,它会显示为da0。 还将显示控制台消息,以反映设备名称和新提供的GEOM标签。

  • 现在挂载配置分区:
# mount -t ufs /def/ufs/cf /mnt

如果由于某些原因GEOM标签不可用,请直接使用该设备,例如/ dev / da0s3。

  • 现在,将一个配置复制到卡上:
# cp /usr/backups/pfSense/config-alix.example.com-20090606185703.xml \
      /mnt/conf/config.xml
  • 然后一定要卸载配置分区
# umount /mnt
  • 拔下卡,将其重新插入防火墙,然后重新打开。现在,防火墙将以先前的配置运行。

要从卡中复制配置,过程是相同的,但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文件包含所有设置,但它不包含可能由系统手动进行的任何更改,例如手动修改源代码。 另外后期安装的插件需要另外的数据备份方法。

在某些情况下,配置文件可能包含敏感信息,如***密钥或证书以及明文密码(管理密码除外)。 某些密码在运行时必须以纯文本格式提供,因此不可能对这些密码进行安全处理。 对于任何有权访问源代码的人,即任何人,任何混淆都是微不足道的。 一个有意识的设计决定在m0n0wall中进行,并在pfSense中继续,将这些密码清除以使其非常清楚该文件包含敏感内容并且必须受到保护。 因此,这些文件的备份副本也必须以某种方式受到保护。 如果它们存储在可移动介质上,请注意该介质的物理安全性和/或加密驱动器。

如果WebGUI必须在没有VPN连接的情况下通过广域网使用,则至少应使用HTTPS。 否则,将以明文形式传输备份,包括该备份文件内的任何敏感信息。 我们强烈建议使用可信网络或加密连接。