Updates ziehen, nicht pushen
Während Sie skalieren, wird es unmöglich, Push- Updates für alle Ihre Produkte durchzuführen.
- Sie müssen jeden einzelnen Kunden verfolgen , der möglicherweise eine andere Firewall-Konfiguration hat.
- Sie müssen eingehende Verbindungen über die Firewall des Kunden herstellen, für die eine Portweiterleitung oder ein ähnlicher Mechanismus erforderlich wäre. Dies ist ein Sicherheitsrisiko für Ihre Kunden
Lassen Sie Ihre Produkte stattdessen regelmäßig ihre Aktualisierungen abrufen, und fügen Sie dann dem Server zusätzliche Kapazität hinzu, wenn Sie wachsen.
Wie?
Dieses Problem wurde bereits gelöst, wie Sie vorgeschlagen haben. Hier sind einige Ansätze, die ich mir vorstellen kann.
- using apt : Verwenden Sie das integrierte apt-System mit einer benutzerdefinierten PPA- und Quellenliste. Wie richte ich eine PPA ein?
- Con: Wenn Sie keinen öffentlichen Hosting-Dienst wie das Launchpad verwenden, ist das Einrichten eines eigenen apt PPA + -Verpackungssystems nichts für schwache Nerven.
- using ssh : Generieren Sie einen öffentlichen SSH-Schlüssel für jedes Produkt, und fügen Sie den Schlüssel dieses Geräts Ihren Update-Servern hinzu. Dann brauchen Sie nur Ihre Software
rsync
/ scp
die benötigten Dateien.
- Con: Sie müssen alle öffentlichen Schlüssel für jedes Produkt, das Sie versenden, nachverfolgen (und sichern!).
- Pro : Sicherer als ein unformatierter Download, da nur Geräte mit installiertem öffentlichen Schlüssel auf die Updates zugreifen können.
Raw-Download + Signaturprüfung :
- Veröffentlichen Sie eine signierte Update-Datei (Amazon S3, FTP-Server usw.)
- Ihr Produkt überprüft regelmäßig, ob die Aktualisierungsdatei geändert werden soll, und lädt die Signatur herunter bzw. überprüft sie.
- Con : Abhängig davon, wie Sie dies bereitstellen, sind die Dateien möglicherweise öffentlich zugänglich (was das Reverse Engineering und das Hacken Ihres Produkts erleichtert).
ansible : Ansible ist ein großartiges Tool zum Verwalten von Systemkonfigurationen. Es ist im Bereich der Puppen / Köche, aber ohne Agenten (verwendet Python) und so konzipiert, dass es idempotent ist. Wenn die Bereitstellung Ihrer Software ein kompliziertes Bash-Skript erfordern würde, würde ich ein Tool wie dieses verwenden, um die Durchführung Ihrer Updates zu vereinfachen.
Natürlich gibt es andere Möglichkeiten, dies zu tun. Aber es bringt mich zu einem wichtigen Punkt.
Unterschreiben / validieren Sie Ihre Updates!
Unabhängig davon, was Sie tun, müssen Sie unbedingt über einen Mechanismus verfügen, der sicherstellt, dass Ihr Update nicht manipuliert wurde. Ein böswilliger Benutzer könnte sich in einer der oben genannten Konfigurationen als Updateserver ausgeben. Wenn Sie Ihr Update nicht validieren, ist Ihre Box viel einfacher zu hacken und in sie einzusteigen.
Eine gute Möglichkeit, dies zu tun, besteht darin, Ihre Aktualisierungsdateien zu signieren. Sie müssen ein Zertifikat führen (oder jemand dafür bezahlen), aber Sie können Ihren Fingerabdruck auf jedem Ihrer Geräte installieren, bevor Sie sie ausliefern, damit diese manipulierte Updates ablehnen können.
Physische Sicherheit
Wenn jemand physischen Zugriff auf die Bereitstellung des Kunden hat, kann er natürlich problemlos den Server übernehmen. Aber zumindest können sie die anderen Bereitstellungen nicht angreifen! Die physische Sicherheit liegt wahrscheinlich in der Verantwortung Ihres Kunden.
Stellen Sie sich für einen Moment vor, was passieren würde, wenn Sie ein großes OpenVPN-Netzwerk für Updates verwenden würden. Sie könnten dann den kompromittierten Server verwenden, um jede Instanz des VPN anzugreifen
Sicherheit
Was auch immer Sie tun, Sicherheit muss von Anfang an eingebaut werden . Schneiden Sie hier keine Ecken - Sie werden es am Ende bereuen, wenn Sie dies tun.
Das vollständige Sichern dieses Update-Systems fällt nicht in den Geltungsbereich dieses Beitrags. Ich empfehle dringend, einen Berater zu engagieren, wenn Sie oder jemand in Ihrem Team keine Kenntnisse in diesem Bereich haben. Es ist jeden Cent wert.