安全的数据备份到远程服务器:客户端被入侵的场景

安全的数据备份到远程服务器:客户端被入侵的场景

我想将客户端的一些文件系统文件夹备份到外部服务器。我的目标是即使客户端以任何方式受到攻击/黑客攻击,也能在外部服务器上进行安全备份。

我正在考虑以下技术(按优先顺序):

  • 同步
  • AWS S3
  • FTP服务
  • HTTPS

据我所知,rsync 和 sFTP 通过 SSH 传输,因此我需要在客户端上放置某种 SSH 密钥。如果攻击者可以访问客户端,他也可以读取 SSH 密钥并连接到外部备份服务器。这就是我想要阻止的。

AWS s3 权限模型(https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html) 具有 WRITE 权限,即“允许被授权者创建、覆盖和删除存储桶中的任何对象”。因此,受感染的客户端可以删除我的所有备份。在这种情况下,情况并不乐观。

使用 HTTPs 当然也会在客户端上存储凭证,但我会在外部系统上创建某种 API,只允许 POST/上传数据。这样攻击者就“只能”将“批量”数据上传到外部服务器,而不会通过 SSH 删除我存储的备份。但通过 HTTPs 执行备份听起来不适合这项工作。

我是否遗漏了一些显而易见的东西?

非常感谢您的任何建议。

答案1

我处理这个问题的方法是将数据的控制权移交给备份目的地。为了便于描述,生产您的生产(主要)机器是备份是备份服务器。这确实要求您拥有备份服务器而不仅仅是数据存储库。

  • 删除 ssh 等效性生产备份除非你用密码保护密钥。(这消除了任何人或事物从一个系统获取另一个系统的机会。)不要在两个系统上使用相同的密码!
  • 设置rsyncd生产使用受用户名/密码保护的可读但只读配置。考虑拒绝任何目录访问~/.ssh- 尤其是 root 的
  • 创建常规rsync工作备份从中提取数据生产服务器。我将其与 结合起来rsnapshot,实际上为了节省空间,我在 上运行整个备份集3QL语言(挂在本地磁盘而不是 S3 存储上)。

这将阻止入侵生产到达你的备份数据。它还将阻止入侵备份覆盖你的生产系统。

如上所述,这种方法的缺点是rsyncd只能以明文形式传输数据。有两种方法可以解决这个问题,因为我不建议使用明文数据传输进行任何跨互联网通信

  • stunnel,可以配置为代表rsyncd
  • 使用 Wireguard、OpenVPN 或 IPsec 之类的点对点 VPN 隧道。

我应该指出,虽然这个解决方案是以 Linux 为中心的,但我也曾rsyncd在 Windows 系统上运行过,并成功备份了用户数据。但需要注意的是,如果不使用 VSS 影子快照,很难从打开的文件中备份数据,也不rsyncd知道如何创建这些快照。

答案2

您可以考虑使用Borg备份仅附加模式

这涉及使用基于密钥的身份验证通过 SSH 将客户端备份到服务器。客户端和服务器都需要安装 BorgBackup。备份客户端将通过 ssh 进入备份服务器并运行命令来处理将备份数据写入服务器计算机。(这与 ssh 目标的工作borg serve方式非常相似。)rsync

您还需要设置客户端将用于连接服务器的 SSH 密钥,并authorized_keys在备份服务器上进行配置,以便密钥具有强制命令并且只能运行borg serve --append-only。此模式将拒绝从备份存储库中删除或修剪任何数据。为了修剪旧备份,您需要在备份服务器上运行 cron 作业,或者使用配置为无需borg serve运行的第二个更受信任的 SSH 密钥来修剪备份。borg serve--append-only

相关内容