我正在寻找一种方法来实施一种更安全的异地备份方式,这种方式还可以保护我的数据免受恶意黑客获得对我的服务器的 root 访问权限的情况。即使正确设置了 SSH 和密码安全性并且系统保持正确更新,发生这种情况的可能性也小于其他类型的风险,但可以永久造成的损害数量确实很高,因此我想找到一个解决方案来限制它。
我已经尝试过两种异地备份方式:
一个简单的 root 可写 webdav 挂载(并在 fstab 中配置),将备份的数据复制到其中。问题:不是真正的异地备份,因为到异地位置的连接(以及访问)始终作为文件系统中的文件夹保持打开状态。如果挂载具有有限的访问权限(只读 root 访问),这足以防止多种攻击,但不能防止具有 root 访问权限的恶意人员。
Borg 通过 SSH 备份密钥认证。问题:如果恶意用户对主机具有 root 访问权限,则可以使用存储在主机上的密钥连接到该异地服务器。
作为一种解决方案,我正在考虑这些潜在的方法,但我不知道如何以及使用什么:
- 备份只能写入或附加到目标,但不能删除。
- 使用处理异地备份且不支持从第一台主机批量删除异地备份的备份软件。
在我的情况下不是很有趣的解决方案:
- 异地主机上的额外备份作业,将它们转移到第一台主机无法访问的位置(由于技术限制)。
任何人都可以就如何为我的案例实施适当的异地备份提供建议吗?
您目前的所有建议都有一个共同点:备份源执行备份并可以访问备份目标。无论您是挂载该位置还是使用 SSH 或 rsync 等工具,源系统都可以通过某种方式访问备份。因此,服务器上的妥协也可能会危及您的备份。
如果备份解决方案可以访问服务器呢?备份系统可以通过只读访问来完成其工作,因此对备份系统的任何损害都可能不会损害服务器。此外,备份系统可以专门用于该目的,使备份的内容成为唯一的攻击媒介。这不太可能发生,需要非常复杂的攻击。
为避免使用被篡改或损坏的内容覆盖备份,请执行增量备份,以允许您在定义的恢复期内恢复任何先前的状态。
不可变存储
一个不错的选择是使您的备份存储不可变,或者至少提供可靠的版本控制,从而使您有效地保持不变。需要明确的是:不可变意味着无法更改或永久。
有多种服务可以为您做到这一点。AWS S3、BackBlaze B2,我怀疑 Azure 和 Google 都提供类似的服务。您可能可以设置一个服务器来执行此操作,但我不确定如何。
当您拥有不可变/版本控制的存储库时,您可以将备份恢复到任何点,因此如果您的主机受到威胁,您仍然可以在任何时间点恢复。
*AWS S3**
我最熟悉 AWS S3。S3 提供版本化的加密存储,具有高度的持久性。
S3 支持版本控制,这为您提供了有效的不变性。您可以选择使用生命周期规则在您可以配置的时间段后删除旧版本的文件。您还可以将版本存档到冷存储(冰川冷存档),费用约为 1 美元/TB/月。
您可以使用智能存储分层类来降低成本。我选择使用生命周期规则将所有静态数据移动到不频繁访问类,它具有持久性和中等(热)性能,但不具备 S3 标准的可扩展性或性能。
S3使用IAM(身份访问管理,即用户管理)用户和策略。这使您可以非常精细地控制备份软件可以对存储执行哪些操作。您可以授予备份用户上传权限,但拒绝更新和删除。您还可以要求多重身份验证来删除文件,甚至提供对象锁定以使文件无法删除。
推荐软件
我使用Restic创建增量备份。Restic 将新文件上传到您的存储位置。我相信(但我可能不正确)它会创建新文件,但在一般操作中它不会更新或删除任何文件。
博格是另一种选择。我曾经使用 Borg,但我发现使用我数百 MB 的中等大小的备份,它每天有效地将我的所有数据从 EC2 上传到 S3。对我来说,这不是增量的,所以我停止使用它。我确实找到了这方面的文档,但没有链接。
有几十个软件可以上传到云存储。
受保护的存储
使用一些备份软件,您可以尝试授予 IAM 用户写入新文件但不更新现有文件的权限。使用 AWS IAM 很容易进行此限制,但根据下面的评论,Restic 不适用于这些权限。您还可以进行从 S3 中删除文件所需的多重身份验证。
您可以让另一个 IAM 用户从您的 PC 上运行,该用户定期清理存档,根据您设置的策略丢弃版本。
Borg Backup 支持仅附加远程存储库。正在备份的服务器的任何妥协都只会导致创建新的备份,而不是只覆盖旧的备份。
根本问题是,如果您可以远程访问您的备份,那么黑客也可以。
需要克服技术限制。
近 70 年来,磁带驱动器一直在为各种灾难(包括黑客)提供安全的异地保护。
您可以使用 AWS S3(或者可能是 Google 或 Azure 的等效服务)之类的存储服务,您可以在其中为您的根账户授予对存储桶的 PUT 权限,但不能授予 DELETE 权限。这样,您可以使用推送模型,攻击者将无法删除备份。
您可以对 AWS 采取进一步的安全措施,例如要求 MFA 对存储桶执行 DELETE,但允许在没有 MFA 的情况下执行 PUT 和 GET。这样,您可以在不使用 MFA 设备的情况下备份和检索数据以恢复您的服务,这在访问 MFA 设备可能会危及它的某些极端情况下(并且可能过于晦涩甚至无法提及)可能很有用。
此外,您可能会发现一个超出范围的评论有趣/有用,有几种方法可以配置 S3 和类似服务以在主数据源离线的情况下进行自动故障转移。
您可以在您的授权密钥中使用选项命令。您修复了远程允许的命令。
如何在 ssh authorized_keys 中添加命令
即使攻击者恢复了登录根,除了定义的命令之外,他将无法执行任何操作。
您可以设置的一种技术是在您的服务器和远程备份服务器之间使用同步,并让远程备份服务器在其末端执行快照或其他任何操作,以便擦除服务器端不会导致异地擦除。