Lösung 1:
Updates ziehen, nicht pushen
Wenn Sie skalieren, wird es unmöglich, Push auszuführen Updates für alle Ihre Produkte.
- Sie müssen alle nachverfolgen Einzelkunden, die möglicherweise jeweils eine andere Firewall-Konfiguration haben.
- Sie müssen eingehend erstellen Verbindungen durch die Firewall des Kunden, was eine Portweiterleitung oder einen anderen ähnlichen Mechanismus erfordern würde. Dies ist ein Sicherheitsrisiko für Ihre Kunden
Lassen Sie Ihre Produkte stattdessen ihre Updates regelmäßig abrufen, und dann können Sie serverseitig zusätzliche Kapazität hinzufügen, wenn Sie wachsen.
Wie?
Dieses Problem wurde, wie Sie vorgeschlagen haben, bereits gelöst. Hier sind einige Ansätze, die mir einfallen.
- mit apt :Verwenden Sie das integrierte apt-System mit einem benutzerdefinierten PPA und einer Quellenliste. Wie richte ich ein PPA ein?
- Kontra: Wenn Sie keinen öffentlichen Hosting-Dienst wie Launchpad verwenden, ist die Einrichtung Ihres eigenen apt PPA + -Paketsystems nichts für schwache Nerven.
- mit ssh :Generieren Sie einen öffentlichen SSH-Schlüssel für jedes Produkt und fügen Sie dann den Schlüssel dieses Geräts zu Ihren Update-Servern hinzu. Dann haben Sie einfach Ihre Software
rsync
/scp
die erforderlichen Dateien.- Kontra: Sie müssen alle öffentlichen Schlüssel für jedes Produkt, das Sie versenden, nachverfolgen (und sichern!).
- Pro :Sicherer als ein RAW-Download, da die einzigen Geräte, die auf die Updates zugreifen können, diejenigen sind, auf denen der öffentliche Schlüssel installiert ist.
-
Rohdownload + Signaturprüfung :
- Veröffentlichen Sie irgendwo eine signierte Update-Datei (Amazon S3, FTP-Server usw.)
- Ihr Produkt sucht regelmäßig nach der zu ändernden Update-Datei und lädt dann die Signatur herunter/überprüft sie.
- Con :Je nachdem, wie Sie dies bereitstellen, können die Dateien öffentlich zugänglich sein (was das Zurückentwickeln und Hacken Ihres Produkts erleichtern kann)
-
ansibel :Ansible ist ein großartiges Tool zum Verwalten von Systemkonfigurationen. Es ist im Bereich von Puppet / Chef, 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 Aktualisierungen weniger kompliziert zu gestalten.
Natürlich gibt es andere Möglichkeiten, dies zu tun.. Aber es bringt mich zu einem wichtigen Punkt.
Signiere / validiere deine Updates!
Egal, was Sie tun, es ist zwingend dass Sie über einen Mechanismus verfügen, um sicherzustellen, dass Ihr Update nicht manipuliert wurde. Ein böswilliger Benutzer könnte sich in jeder der oben genannten Konfigurationen als Ihr Update-Server ausgeben. Wenn Sie Ihr Update nicht validieren, ist Ihre Box viel leichter zu hacken und hineinzukommen.
Eine gute Möglichkeit, dies zu tun, besteht darin, Ihre Update-Dateien zu signieren. Sie müssen ein Zertifikat verwalten (oder jemanden dafür bezahlen), aber Sie können Ihren Fingerabdruck auf jedem Ihrer Geräte installieren, bevor Sie sie versenden, damit sie manipulierte Updates ablehnen können.
Physische Sicherheit
Wenn jemand physischen Zugriff auf die Bereitstellung des Kunden hat, kann er den Server natürlich problemlos übernehmen. Aber wenigstens können sie die anderen Stationen nicht angreifen! Die physische Sicherheit liegt wahrscheinlich in der Verantwortung Ihres Kunden.
Wenn Sie sich für einen Moment vorstellen würden, 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 im VPN anzugreifen
Sicherheit
Was auch immer Sie tun, Sicherheit muss eingebaut sein von Anfang an. Sparen Sie hier nicht - Sie werden es am Ende bereuen, wenn Sie es tun.
Die vollständige Sicherung dieses Aktualisierungssystems geht über den Rahmen dieses Beitrags hinaus, und ich empfehle dringend, einen Berater zu beauftragen, wenn Sie oder jemand in Ihrem Team keine Kenntnisse auf diesem Gebiet haben. Es ist jeden Cent wert.
Lösung 2:
Müssen Sie wirklich darauf zugreifen?
Oder nur aktualisieren? Weil Sie sie selbst aktualisieren lassen können, ähnlich wie apt selbst unbeaufsichtigt aktualisiert wird.
Wenn Sie sich anmelden müssen
Warum nicht ein OpenSSH-Daemon, der über die Portweiterleitung lauscht? Jeder Kunde kann aus Sicherheitsgründen einen separaten Schlüssel haben und wird nur bei Bedarf verbunden.
Bis zu Ihren Kunden
Sie müssen auch berücksichtigen, was der Kunde bereit ist zu akzeptieren. Sie sind möglicherweise mit Fernzugriff auf ihr Netzwerk nicht vertraut oder nur mit bestimmten Technologien/Konfigurationen vertraut.
Lösung 3:
Ich schlage ein Orchestrierungstool wie Puppet oder Salt vor.
Salt ist eine Nachrichtenwarteschlange und kann eine dauerhafte ausgehende Verbindung von Ihrer Appliance zu einem Master-Server herstellen. Sie können dies verwenden, um beliebige Befehle auf den Appliances auszuführen ... wie ein apt-get
.
Die andere Option ist Puppet, bei der Sie immer noch einen Master-Server haben und die Clients ausgehende Verbindungen von ihren Standorten aus herstellen.
Ich verwende diese beiden Tools für einen ähnlichen Zweck, bei dem ich möglicherweise keine administrative Kontrolle über die Firewall habe.