Linux

管理防火牆後面的 linux 電腦集群

  • July 15, 2020

我公司的產品本質上是一個 Linux 機器(Ubuntu),它位於其他人的網路中執行我們的軟體。到目前為止,我們在野外只有不到 25 個盒子,並使用 TeamViewer 來管理它們。

我們現在要運送 1000 個這樣的盒子,TeamViewer 不再是一種選擇。我的工作是想辦法訪問這些盒子並更新它們上面的軟體。該解決方案應該能夠穿透防火牆以及您擁有的東西。

我考慮過:

1. 本地開發的解決方案(例如 Linux 服務),它建立到雲中的伺服器的SSH 反向隧道,以及雲中的另一個服務來跟踪這些服務並讓您連接到它們。

這顯然是勞動密集型的,坦率地說,感覺就像是在重新發明輪子,因為很多其他公司肯定已經遇到過這個問題。即便如此,我不確定我們是否會做得很好。

2. puppet、chef或OpenVPN等工具

我試圖盡可能多地閱讀,但我似乎無法通過行銷演講深入了解顯而易見的選擇。

除了我們之外,沒有其他人需要連接到這些盒子。有沒有相關經驗的大神可以指點一下?

拉取更新,不要推送

隨著您的擴展,對所有產品進行推送更新將變得不可行。

  • 您必須跟踪每個客戶,每個客戶可能都有不同的防火牆配置。
  • 您必須通過客戶的防火牆創建傳入連接,這需要埠轉發或其他類似機制。這對您的客戶來說是一個安全風險

相反,讓您的產品定期“拉動”其更新,然後隨著您的成長,您可以在伺服器端添加額外的容量。

如何?

正如你所建議的,這個問題已經解決了。這是我能想到的幾種方法。

  • using apt:使用帶有自定義 PPA 和源列表的內置 apt 系統。如何設置 PPA?

    • **缺點:**除非您使用像啟動板這樣的公共託管服務,否則設置自己的 apt PPA + 打包系統不適合膽小的人。
  • 使用 ssh:為每個產品生成一個 SSH 公鑰,然後將該設備的密鑰添加到您的更新伺服器。然後,只需擁有您的軟體rsync/scp所需的文件。

    • **缺點:**必須跟踪(並備份!)您發送的每個產品的所有公鑰。
    • Pro:比原始下載更安全,因為唯一可以訪問更新的設備是那些安裝了公鑰的設備。
  • 原始下載+簽名檢查

    • 在某處發布簽名的更新文件(Amazon S3、FTP 伺服器等)
    • 您的產品會定期檢查要更改的更新文件,然後下載/驗證簽名。
    • 缺點:根據您的部署方式,這些文件可能是公開可訪問的*(這可能使您的產品更容易進行逆向工程和破解)*
  • ansible:Ansible 是管理系統配置的好工具。它屬於 puppet / chef 的領域,但是是無代理的(使用 python)並且設計為冪等的。如果部署您的軟體需要復雜的 bash 腳本,我會使用這樣的工具來降低執行更新的複雜性。

當然,還有其他方法可以做到這一點。但這讓我想到了一個重要的點。

簽署/驗證您的更新!

無論您做什麼,都必須有一種機制來確保您的更新沒有被篡改。惡意使用者可以在上述任何配置中冒充您的更新伺服器。如果你不驗證你的更新,你的盒子容易被黑客入侵和進入。

執行此操作的一個好方法是簽署您的更新文件。您必須維護一個證書(或向某人付費),但您可以在每台設備上安裝指紋,然後再將它們發送出去,這樣他們就可以拒絕被篡改的更新。

物理安全

當然,如果有人可以物理訪問客戶的部署,他們可以輕鬆接管伺服器。**但至少他們無法攻擊其他部署!**物理安全可能是您客戶的責任。

如果您願意,想像一下如果您使用大型 OpenVPN 網路進行更新會發生什麼……然後他們可以使用受感染的伺服器攻擊VPN 上的每個實例

安全

無論您做什麼,都需要從一開始就建立安全性。不要在這裡偷工減料——如果你這樣做了,你最終會後悔的。

完全保護此更新系統超出了本文的範圍,如果您或您團隊中的某個人不熟悉該領域,我強烈建議您聘請顧問。它值得每一分錢。

引用自:https://serverfault.com/questions/792996