Frage Cluster von Linux-Computern hinter Firewalls verwalten


Das Produkt meines Unternehmens ist im Wesentlichen eine Linux-Box (Ubuntu), die im Netzwerk eines anderen Benutzers sitzt und unsere Software ausführt. Bisher hatten wir weniger als 25 Boxen in der Wildnis und nutzten TeamViewer, um sie zu verwalten.

Wir werden jetzt 1000 dieser Boxen ausliefern und TeamViewer ist keine Option mehr. Meine Aufgabe ist es, einen Weg zu finden Zugriff auf diese Boxen und Aktualisierung der Software auf ihnen. Diese Lösung sollte in der Lage sein, Firewalls zu durchbrechen und was hast du.

Ich habe überlegt:

1. Eigengewachsene Lösung (z. B. ein Linux-Dienst), der ein SSH Reverse Tunnel zu einem Server in der Cloud und einem anderen Dienst in der Cloud, der diese verfolgt und Sie mit ihnen verbinden kann.

Dies ist offensichtlich arbeitsintensiv und ehrlich gesagt fühlt es sich an, das Rad neu zu erfinden, da so viele andere Unternehmen dieses Problem bereits überwunden haben müssen. Trotzdem bin ich mir nicht sicher, ob wir einen tollen Job machen werden.

2. Tools wie Puppet, Koch oder OpenVPN

Ich habe versucht, so viel wie möglich zu lesen, aber ich kann nicht genug durch das Marketing sprechen, um die offensichtliche Wahl zu verstehen.

Niemand außer uns muss sich mit diesen Boxen verbinden. Gibt es jemanden mit einschlägiger Erfahrung, der mir Hinweise geben kann?


18
2017-07-31 16:13


Ursprung


"Wir werden nicht versenden" => "Wir sind jetzt im Begriff zu versenden "? - Bob


Antworten:


Updates ziehen, nicht drücken

Wenn du skalierst, wird es unausführbar werden drücken Updates für alle Ihre Produkte.

  • Sie müssen verfolgen jeden einzelner Kunde, der möglicherweise jeweils eine andere Firewall-Konfiguration hat.
  • Sie müssen erstellen eingehend Verbindungen durch die Firewall des Kunden, die eine Portweiterleitung oder einen anderen ähnlichen Mechanismus erfordern würden. Dies ist ein Sicherheitsrisiko für Ihre Kunden

Lassen Sie Ihre Produkte stattdessen regelmäßig von ihren Produkten "ziehen", und fügen Sie dann beim Wachstum zusätzliche Serverkapazität hinzu.

Wie?

Dieses Problem wurde bereits gelöst, wie Sie vorgeschlagen haben. Hier sind einige Ansätze, die ich mir vorstellen kann.

  • mit apt: Verwenden Sie das integrierte apt-System mit einer benutzerdefinierten PPA- und Quellenliste. Wie richte ich einen PPA ein?
    • Con: Sofern Sie keinen öffentlichen Hosting-Service wie Launchpad verwenden, ist die Einrichtung eines eigenen apt PPA + Verpackungssystems 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 benötigten Dateien
    • Con: Sie müssen alle öffentlichen Schlüssel für jedes Produkt, das Sie versenden, verfolgen (und sichern!).
    • Profi: Sicherer als ein Raw-Download, da nur die Geräte mit dem öffentlichen Schlüssel auf die Updates zugreifen können.
  • Raw Download + Signaturprüfung:

    • Sende eine signierte Update-Datei irgendwo (Amazon S3, FTP-Server, etc)
    • Ihr Produkt überprüft regelmäßig, ob die Aktualisierungsdatei geändert wurde, und lädt die Signatur herunter bzw. überprüft sie.
    • ConJe nachdem, wie Sie das bereitstellen, sind die Dateien möglicherweise öffentlich zugänglich (wodurch Ihr Produkt leichter rückentwickeln und hacken kann)
  • ansible: Ansible ist ein großartiges Tool zum Verwalten von Systemkonfigurationen. Es ist im Reich der Marionette / des Kochs, aber ist agentenlos (benutzt Python) und entworfen, um idempotent zu sein. Wenn die Bereitstellung Ihrer Software ein komplexes Bash-Skript erfordern würde, würde ich ein Tool wie dieses verwenden, um die Durchführung Ihrer Aktualisierungen 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!

Egal was du tust, ist es Imperativ dass Sie einen Mechanismus haben, um sicherzustellen, dass Ihr Update nicht manipuliert wurde. Ein böswilliger Benutzer könnte den Update-Server in einer der oben genannten Konfigurationen imitieren. 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 führen (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, könnte er natürlich den Server problemlos übernehmen. Aber sie können die anderen Bereitstellungen nicht angreifen! Physische Sicherheit liegt wahrscheinlich in der Verantwortung Ihres Kunden.

Wenn Sie für einen Moment, würden Sie sich vorstellen, was passieren würde, wenn Sie ein verwendet   großes OpenVPN - Netzwerk für Updates ... Sie könnten dann das   kompromittierter Server zum Angriff jede Instanz auf dem VPN

Sicherheit

Was auch immer Sie tun, Sicherheit muss sein eingebaut von Anfang an. Mach keine Ecken hier - Du wirst es am Ende bereuen, wenn du es tust.

Dieses Update-System vollständig zu sichern ist außerhalb des Umfangs dieses Beitrags, und ich empfehle dringend, einen Berater einzustellen, wenn Sie oder jemand in Ihrem Team in diesem Bereich nicht kompetent sind. Es ist jeden Cent wert.


23
2017-07-31 22:13



Ich würde die Verwendung von Ansible abbrechen - es liegt in der Mitte der Komplexität zwischen Shell-Skripts und vollständigem Puppet / Chef-Konfigurationsmanagement und hat die Raffinesse, komplexere Dinge zu tun, als nur die Software zu aktualisieren (wie die Frage " verwalten"). - RichVel
Wenn Sie die Route von Ansible verwenden, können Sie es schreiben, um es auf 'localhost' auszuführen, und es wird kein SSH-Zugriff auf eine der verwalteten Maschinen benötigt. Konfigurieren Sie es als Cronjob und Sie sind golden. - BobTuckerman
BTW: Wenn Sie Ihren eigenen Paketserver betreiben wollen, fpm und aptly sind zwei großartige Werkzeuge, die es viel einfacher machen, eigene Pakete zu erstellen und zu hosten. Ich bin gerade erst durch diesen Prozess gegangen und es war ziemlich nett. - BobTuckerman


Müssen Sie tatsächlich auf sie zugreifen?

Oder aktualisiere sie einfach? Weil Sie sie selbst aktualisieren können, ähnlich wie apt-Updates auf ihre eigenen unbeaufsichtigt.

Wenn Sie sich anmelden müssen

Warum hört ein OpenSSH-Daemon nicht über Port-Forwarding auf? Jeder Kunde kann einen separaten Schlüssel für die Sicherheit haben und würde nur bei Bedarf verbunden werden.

Bis zu Ihren Kunden

Sie müssen berücksichtigen, was der Kunde auch zu akzeptieren bereit ist. Sie sind möglicherweise nicht mit einem Remote-Zugriff auf ihr Netzwerk oder nur mit bestimmten Technologien / Konfigurationen vertraut.


10
2017-07-31 16:42



diese. Mit 1000 verschiedenen Kundenanforderungen werden zumindest einige keine dauerhafte openvpn-Verbindung zu Ihren Büros wünschen. Im Idealfall würden Sie versuchen, sie zu aktualisieren, wenn / wenn eine neue Version verfügbar ist (beispielsweise aus einer Datei in einem AWS S3-Bucket). Das ist es, was wir tun. - Sirex
@Sirex - Ein Nachteil der Verwendung eines S3-Buckets ist, dass es keine einfache IP-Whitelist gibt, die der Kunde verwenden kann, um diesen Server zu sperren, sodass er nur den Bucket erreichen kann, der das Update enthält. Am Ende mussten wir einen Update-Server mit einer statischen öffentlichen IP-Adresse einrichten, damit Kunden mithilfe von IP-Filtern steuern konnten, mit was der Server kommunizieren kann. (AWS veröffentlicht alle ihre IP-Blöcke, daher ist es theoretisch möglich, einen Filter einzurichten, der nur Zugriff auf AWS-Ressourcen erlaubt, aber für diesen Anwendungsfall ist das zu breit) - Johnny
Wir haben keine Updates für S3, aber wir haben eine Textdatei, in der die neuste Version beschrieben wird. Diese Datei wird von der App verwendet, um die Banner für die Aktualisierung verfügbar zu machen. Kunden können dann (in unserem Fall manuell) den Download der neuesten Version auslösen, in unserem Fall von einem Service namens fetchapp. - Sirex


Ich schlage ein Orchestrierungswerkzeug vor wie Marionette oder Salz.

Salt ist eine Nachrichtenwarteschlange und kann eine dauerhafte ausgehende Verbindung von Ihrer Appliance zu einem Master-Server herstellen. Sie können damit beliebige Befehle auf den Appliances ausführen ... wie z apt-get.

Die andere Option ist Puppet, wo Sie noch einen Master-Server haben und die Clients ausgehend von ihren Standorten ausgehende Verbindungen herstellen.

Ich verwende beide Tools für einen ähnlichen Zweck, bei dem ich möglicherweise keine administrative Kontrolle über die Firewall habe.


9
2017-07-31 17:17