管理防火墙后面的Linux计算机集群

Modified on: Tue, 08 Oct 2019 17:20:02 +0800

我公司的产品本质上是一个Linux机箱(Ubuntu),位于运行我们软件的其他人的网络中。到目前为止,我们只有不到25个盒子,并使用TeamViewer来管理它们。

我们现在要发送1000个这样的盒子,TeamViewer不再是一个选项。我的工作是找出访问这些框并更新其上的软件的方法。这个解决方案应该能够穿透防火墙以及你有什么。

我考虑过:

1。自行开发的解决方案(例如Linux服务),它为云中的服务器建立SSH反向隧道,并在云中建立跟踪这些服务的另一项服务。让你连接到它们。

这显然是劳动密集型的,坦率地说,重新发明轮子,因为许多其他公司必须已经遇到过这个问题。即便如此,我也不确定我们会做得很好。

2。木偶,厨师或OpenVPN等工具

我试图尽可能多地阅读,但我似乎无法透过营销说话来理解明显的选择。

除了我们以外没有其他人需要连接到这些盒子。 有没有相关经验可以给我一些指示?

最佳答案

拉出更新,不要按

随着您的扩展,对所有产品进行推送更新将变得不可行。

  • 您必须跟踪每个单个客户,每个客户可能都有不同的防火墙配置。
  • 您必须通过客户的防火墙创建传入连接,这需要端口转发或其他类似的机制。 这对您的客户构成安全风险

相反,让您的产品定期“提取”他们的更新,然后您可以在增长时添加服务器端的额外容量。

如何?

如您所说,此问题已得到解决。以下是我能想到的几种方法。

  • 使用apt:将内置apt系统与自定义PPA和源列表一起使用。 如何设置PPA?
    • Con:除非您使用像启动板这样的公共托管服务,否则设置自己的apt PPA +打包系统并不适合胆小的人。
  • 使用ssh:为每个产品生成SSH公钥,然后将该设备的密钥添加到更新服务器。然后,只需要您的软件rsync / scp所需的文件。

    • Con:必须跟踪(并备份!)您发送的每个产品的所有公钥。
    • Pro:比原始下载更安全,因为可以访问更新的唯一设备是安装了公钥的设备。
  • 原始下载+签名检查


    • 在某处发布已签名的更新文件(Amazon S3,FTP服务器等)
    • 您的产品会定期检查要更改的更新文件,然后下载/验证签名。
    • Con:根据您的部署方式,文件可以公开访问(这可能会让您的产品更容易进行逆向工程和黑客攻击)
  • ansible:Ansible是管理系统配置的绝佳工具。它在木偶/厨师的领域,但是无代理(使用python)并且被设计为幂等的。如果部署您的软件需要复杂的bash脚本,我会使用这样的工具来降低执行更新的难度。

当然,还有其他方法可以做到这一点......但它让我有了一个重点。

签署/验证您的更新!

无论您做什么,强制性,您都有一种机制可以确保您的更新未被篡改。恶意用户可以在上述任何配置中模拟您的更新服务器。如果您未验证更新,那么您的框更容易入侵并进入。

执行此操作的好方法是签署更新文件。您必须维护证书(或向某人付费),但您可以在发送之前在每台设备上安装指纹,以便他们可以拒绝已经被篡改的更新。

物理安全性

当然,如果有人可以实际访问客户的部署,他们可以轻松接管服务器。 但至少他们无法攻击其他部署!物理安全可能是您客户的责任。

  

如果你想片刻,想象如果你使用了会发生什么
  大型OpenVPN网络进行更新......然后他们可以使用
  受损服务器攻击VPN上的每个实例

安全

无论您做什么,安全性都需要从一开始就内置。不要在这里偷工减料 - 如果你这样做,你最后会后悔的。

完全保护此更新系统超出了本文的范围,如果您或您团队中的某个人不熟悉此领域,我强烈建议您聘请顾问。值得每一分钱。


相关问答

添加新评论