BackupZit

3-2-1 备份与不可变副本:逐步实现勒索软件防护

如何把 3-2-1 规则变成真正可用的方案:本地的快速备份、一份异地副本,以及至少一份无法删除或覆盖的副本(使用 S3 Object Lock 或加固 Linux 存储库),再加上加密、保留、还原测试,以及副本失败时的告警。

您将配置什么

攻击者进入网络后,通常会先删除或加密备份,然后再加密服务器。因此,一份被盗管理员账户就能删除的备份是不够的。本指南用 BackupZit 搭建分层防护:本地存储上的主备份、另一处的副本,以及一个在设定期限结束前无法销毁备份的存储——即使掌握存储凭据也不行。BackupZit 免费且开源(AGPLv3);下面介绍的一切都属于免费产品。

3-2-1 规则与 3-2-1-1-0

3-2-1 规则:数据保留 3 份,存放在 2 种不同介质上,其中 1 份在异地。扩展规则 3-2-1-1-0 再增加 1 份不可变或离线副本,以及验证备份时 0 错误。在 BackupZit 中:

部分在 BackupZit 中
3 份生产数据、一个备份作业和一个备份副本作业。
2 种介质两个存储目标,例如通过 SMB 或 SFTP 访问的 NAS 和一个 S3 存储桶。
1 份异地副本存到云端(S3、Azure Blob Storage)或另一栋楼里的加固存储库。
1 份不可变或离线启用 Object Lock 的 S3、加固存储库或轮换 USB 磁盘。
0 错误自动还原测试和对全部已存储数据的检查,失败时发出告警。

您需要一台 BackupZit 控制台,并在要保护的机器上安装代理;Proxmox VE、Hyper-V 和 Windows 磁盘映像指南介绍了这些前期步骤。

第 1 步 — 用于快速还原的主存储

在控制台中打开存储 → 添加存储目标。第一份副本请选择本地网络中的存储,使备份和还原全速运行:文件服务器或 NAS 上的 SMB 共享,或通过 SFTP 访问的 Linux 服务器或 NAS(其主机密钥会被固定)。为该目标使用只能写入备份文件夹的专用账户,并且不要把备份存储加入 Windows 域。

保存时控制台会立即测试该目标——密码、主机密钥或共享填错会当场显示,而不是等到第一次备份。存储列表中的测试连接可再次测试。

第 2 步 — 添加不可变存储

BackupZit 有两种存储,在期限结束前其中的备份无法删除或覆盖。理想情况下它同时位于异地,这样一个目标即可满足两项要求。

方案 A:启用 Object Lock 的 S3

  1. 创建启用 Object Lock 的存储桶——在 AWS、Wasabi 和 Backblaze B2 上是创建存储桶时的选项,在 MinIO 上使用 mc mb --with-lock。
  2. 添加生命周期规则,一天后删除非当前版本(MinIO:mc ilm rule add --noncurrent-expire-days 1 --expire-delete-marker)。删除已锁定的备份只会添加删除标记;锁定到期后,该规则会释放空间。
  3. 在控制台中添加类型为 S3 兼容(AWS、Wasabi、Backblaze B2、MinIO 等)的目标,填写端点、存储桶和该存储桶的访问密钥。
  4. 勾选不可变备份(S3 Object Lock,合规模式),期限 … 天(默认 30),期限至少应与您要保护的保留时间一样长。

此后代理写入的每个文件都会以合规模式锁定该期限再加一天:在此之前,任何人——无论是持有密钥的攻击者还是存储桶所有者——都无法删除或覆盖它。新备份从旧备份复用的数据会延长锁定,因此每个还原点都在整个期限内受到保护。在不可变存储上,连接测试只登录并列出内容,并检查存储桶是否确实启用了 Object Lock。

Azure 与 Google Cloud:对于 Azure Blob Storage,请在 Azure 中为容器启用版本级不可变性,并设置基于时间的保留策略。Google Cloud Storage 可作为 S3 目标使用,但没有 Object Lock 选项;请改为在 Google Cloud 中设置存储桶保留策略(并将其锁定)。

方案 B:在您自己的 Linux 服务器上部署加固存储库

在一台专用 Linux 服务器上运行 backupzit-repo(deb 和 rpm 软件包附在每个 GitHub 版本中):

apt install ./backupzit-repo_*.deb       # 或:dnf install ./backupzit-repo-*.rpm
vi /etc/backupzit-repo/repo.env          # BACKUPZIT_REPO_LOCK_DAYS=30
systemctl start backupzit-repo
backupzit-repo add-key office-console    # 访问密钥只显示一次
backupzit-repo fingerprint               # 证书指纹

在控制台中添加类型为 加固存储库(Linux 上的 backupzit-repo,不可变)的目标,填写服务器地址(默认端口 8500)、访问密钥和指纹。

  • 代理和控制台只能添加文件;已有文件永远不会被覆盖。
  • 每个文件都会获得不可变属性(chattr +i),期限为该服务器上设置的时间再加一天。即使是 root,也必须先移除该属性才能删除文件。
  • 来自客户端的删除——无论是保留策略还是持有访问密钥的攻击者——只会把文件隐藏到其期限结束。
  • 期限只能在存储库服务器上设置;控制台和代理无法更改。

配置完成后,请关闭该服务器的 SSH 和其他远程访问,并保护其本地控制台、iDRAC/iLO 或虚拟化管理程序访问:防护强度取决于它的 root 账户。

第 3 步 — 加密与恢复密钥

保持加密备份(AES-256)开启(默认)。文件内容、文件名、文件夹结构和快照列表在离开代理之前就用 AES-256-GCM 加密,对数据的任何改动都会被发现。不可变性防止删除,加密防止读取——两者都需要。

对每个加密目标,控制台都会显示恢复密钥并提供恢复单。请离线保存,并与备份分开存放:有了密钥、存储位置及其凭据,即使没有控制台也能还原;没有密钥,任何人都无法读取备份——包括 BackupZit 支持人员。

第 4 步 — 备份作业与保留

在备份作业下使用第 1 步的主存储创建作业。在保留备份中设置最新的 N 个以及每日、每周和每月的还原点——例如最近 3 个、每日 7 个、每周 4 个、每月 6 个,可保留约半年、大约 20 个还原点。重复数据删除让未变化的数据只存储一次。

恢复点目标(RPO),小时规定最新成功备份最多可以有多旧,例如每日作业设为 26。未达标的作业会显示在仪表板上并发送通知,这也能发现离线多日的代理或被误删的计划。

第 5 步 — 用备份副本作业建立异地副本

创建第二个作业并选择备份副本。在复制以下作业的备份中选择第 4 步的作业,并将第 2 步的不可变或异地目标选为存储目标。

  • 由源作业的代理复制现有备份;受保护的机器不会被再次读取。
  • 只发送目标中尚不存在的数据,并用目标的密钥重新加密。
  • 在源作业每次备份后(默认)使副本保持最新;也可以使用普通计划,例如线路较慢时每晚一次。
  • 副本有自己的保留设置,例如 NAS 上保留 7 个每日备份,云端保留 12 个每月备份。每个还原点自创建起锁定 N 天,因此锁定 30 天时,更早的每月还原点不再受保护。锁定期越长,受保护的还原点越多,占用的数据也越多。

文件和虚拟机备份(Proxmox VE、Hyper-V、VMware)可以像从原始备份一样从副本还原;磁盘映像的副本使用命令行代理还原。立即复制会马上开始复制。

小型办公室的离线副本:目标类型轮换 USB / 可移动磁盘(离线副本)按卷标(BZBACKUP1、BZBACKUP2 …)识别磁盘。将一个副本作业指向它,定期(例如每周)更换磁盘,并把断开的那块存放在安全的地方。如果没有连接任何磁盘,运行会失败并发出告警。

第 6 步 — 还原测试与数据检查

备份只有在被还原过后才算得到证明。在设置 → 还原测试中:

  • 自动测试每个作业的最新备份(默认每周):从最新备份中随机抽取文件还原到临时文件夹,按存储的校验和逐字节验证后删除;对于磁盘映像,则验证随机数据块。这样可检验存储访问、凭据、密钥和数据本身。
  • 检查已存储的数据(默认每月):读取并验证每个存储库中的每一块数据,能及早发现 NAS 中即将损坏的磁盘或静默数据损坏。在 S3 和 Azure 上,只有开启也包括云存储(S3、Azure)才会运行——它会下载全部数据,请注意下载费用。
  • Proxmox 虚拟机作业还可以添加启动测试,在断开网络的情况下从备份启动每台虚拟机。

作业页面上的测试还原和检查数据可立即启动。结果显示在活动和报告中;测试失败会像其他失败一样发送告警。

第 7 步 — 告警与勒索软件检测

连续几周都失败的异地副本等于没有副本。配置设置 → 电子邮件通知(用发送测试邮件检查),并保持失败开启:每次运行失败都会发送一封附带原因的邮件——备份、副本、还原和还原测试——还可以选择每日报告。设置 → 聊天和 Webhook 会把同样的内容发送到 Slack、Microsoft Teams 或任意 HTTP 端点。仪表板上的需要关注列出失败的作业、错过的计划和 RPO、离线代理,以及已满 90 % 或将在 30 天内装满的存储。

此外,每个备份都会与其作业的近期历史进行比较。若更改的文件远多于平常、新数据不再能压缩(加密文件看起来是随机数据)、文件数量骤降三分之一或更多,或新数据量突然激增,该备份就会被标记为可疑。随后 BackupZit 会发送告警,将其列入待检查的可疑备份,并暂停该作业的保留(保留已暂停),这样即使损坏的备份不断到来,最后的干净备份也不会被删除。检查机器后,点击已检查 — 恢复保留。

第 8 步 — 保护控制台

不可变存储保护的是备份;决定备份什么、保留什么的仍是控制台。在设置 → 登录与安全中,要求管理员使用双因素认证,并开启四眼审批:之后删除作业或存储目标、缩短保留、在可疑备份后恢复保留以及关闭审批,都需要第二位用户批准。请把控制台放在内部网络中,不要把 8443 端口暴露到互联网,远程管理请使用 VPN。启用设置 → 控制台备份后,控制台还会每天把自身备份到网络存储目标。

遭受攻击后

如果备份被删除或覆盖,可以读取攻击之前的存储状态——只读,适用于启用 Object Lock 的 S3 和加固存储库:

backupzit-agent snapshots --repo <存储库> --as-of 2026-10-01T14:30
backupzit-agent restore   --repo <存储库> --as-of 2026-10-01T14:30 --target D:\Restore latest

在加固存储库上,管理员还可以找回被隐藏的文件,让备份恢复正常:

backupzit-repo status
backupzit-repo undelete --since 2026-10-01T14:00

需要了解的限制

  • 不可变性只在锁定期内有效。被删除的备份在期限结束后会真正消失,因此请根据攻击可能多久未被发现来选择期限。
  • 加固存储库的安全性取决于它的 root 账户,以及对其控制台、iDRAC/iLO 或虚拟化管理程序的访问。
  • SMB、SFTP 和本地磁盘本身没有不可变性;请将它们与不可变或离线副本结合使用。
  • 已锁定的数据在锁定到期前一直占用空间,删除后也是如此;没有生命周期规则,S3 空间不会被释放。
  • 不可变性不会清理数据:备份前就已被加密的文件会以加密状态被备份。请还原攻击之前的还原点——检测功能会暂停保留来保住这些还原点。
  • 没有恢复密钥,任何人都无法读取加密备份。
  • 四眼审批只作用于控制台;Active Directory 或 Entra ID 中的管理员组需要在那里加以保护。

下一步

下载 BackupZit,查看勒索软件防护和所有存储目标,或阅读控制台内置指南中关于存储目标和勒索软件防护的章节。BackupZit 本身如何构建和发布,请见安全页面。作业的配置在 Proxmox VE、Hyper-V、Microsoft 365 和 Windows 裸机还原指南中介绍。欢迎在 GitHub Discussions 提问。企业可以从 MaxZit 获得商业支持(仅提供英文服务)。