Fragen Sie die Management-Schnittstelle einmal nach einem Status, und sie beginnt wie ein Status-Port auszusehen. Das ist sie nicht. Sobald ein Client zugelassen ist, kann er die Steuerbefehle des Protokolls absetzen, und das Konto, das diesen Client ausführt, erbt alles, was diese Befehle mit dem Daemon anstellen können. Sie als schreibgeschützten Feed zu behandeln ist der Fehler, der aus einer Monitoring-Integration eine nicht authentifizierte Konsole macht.

Der Glaube und was er kostet

Der Glaube ist, dass der Management-Listener einem Metrik-Endpunkt entspricht: einen Collector anhängen, Zähler lesen, weitergehen. Tatsächlich öffnet der Collector eine Sitzung mit Steuerungsmöglichkeiten, und jede andere Annahme, die Sie über das Deployment getroffen haben, hängt jetzt davon ab, dass dieser Collector sich wohlverhält.

Nichts an der Schnittstelle bewirbt einen schreibgeschützten Modus. Es gibt keine Beobachterrolle zur Auswahl, und ein Benutzername in der Konfiguration erzeugt keine.

Was ein zugelassener Client tatsächlich hält

Der Community-Daemon akzeptiert jeweils nur einen aktiven Management-Client. Dieser eine Platz bedeutet, dass GUI, Skript und Monitoring-Agent nicht alle gleichzeitig andocken können; der zweite wartet oder scheitert, während der erste die Sitzung hält. Wenn Ihr Design gleichzeitige Leser annimmt, ist es bereits falsch.

Wo eine periodische Momentaufnahme reicht, liefert die Ausgabe der Statusdatei dieselben Zahlen ohne eine Live-Sitzung. Diese Datei in Intervallen zu schreiben und sie mit gewöhnlichen Dateiberechtigungen zu lesen, hält den Collector vollständig außerhalb der Steuerungsebene, und das ist die Anordnung, die die meisten Monitoring-Setups tatsächlich brauchen.

Ein eigener Socket, kein offener

Ein Unix-Domain-Socket hält den Steuerpfad vom Netz fern, was die wechselnde Tunneladresse aus dem Problem entfernt. Es entfernt nicht die Berechtigungsfrage. Das übergeordnete Verzeichnis muss für das Dienstkonto beschreibbar und für das Konto des Controllers erreichbar sein, und das sind zwei getrennte Berechtigungen:

management /run/openvpn/office-management.sock unix /etc/openvpn/management.password
management-client-user vpn-observer
management-client-group vpn-observer

Die Passwortdatei trägt das Management-Geheimnis in ihrer ersten Zeile. Schützen Sie diese Datei wie jede andere Anmeldeinformation, und halten Sie ihren Inhalt aus Protokollen und Support-Tickets heraus. Die Benutzer- und Gruppenbeschränkungen sind Peer-Prüfungen am Unix-Socket, keine Dateisystemberechtigungen, daher braucht der vorgesehene Prozess sowohl den Dateizugriff als auch die passende Identität.

Den Socket weltweit zugänglich zu machen, um einen Berechtigungsfehler zu beseitigen, ist die eine Korrektur, die Sie vermeiden sollten. Sie verwandelt einen lokalen Steuerkanal in etwas, das jeder Prozess auf dem Host steuern kann.

Die Veröffentlichung über TCP ist kein gleiches Design

Den Listener auf einen TCP-Port zu verlegen macht ihn weder sicherer noch bequemer. Das Management-Passwort wird im Klartext gesendet, daher legt ein TCP-Listener sowohl die Anmeldeinformation als auch die Sitzung für jeden offen, der den Pfad beobachten kann. Der Zugriff von einem anderen Host erfordert einen autorisierten Administrationskanal oder einen kleinen lokalen Agenten, der nur die benötigten Beobachtungen bereitstellt.

Ein Passwort über einen Klartext-Transport ist Authentifizierung ohne Vertraulichkeit, und diese Kombination ist schlimmer, als sie aussieht, weil sie sich geschützt anfühlt.

Startabhängigkeiten, die Sie nicht wollten

Mehrere Management-Optionen verändern den Lebenszyklus des Daemons. Den Start anzuhalten, bis ein Controller sich verbindet, oder zu beenden, wenn der Controller verschwindet, macht aus einem optionalen Beobachter eine harte Abhängigkeit. Ein abstürzender Monitoring-Agent würde dann den Tunnel mitreißen.

Prüfen Sie diese Optionen, bevor Sie irgendetwas über den Socket selbst hinaus aktivieren. Optionale Beobachtung sollte optional bleiben, und eine Neustartrichtlinie sollte nicht an einen Collector gekoppelt werden, der für Diagramme hinzugefügt wurde.

Eine Socketdatei, die nach einem fehlgeschlagenen Prozess zurückbleibt, ist kein Beweis dafür, dass ein Listener existiert. Stellen Sie fest, welche Instanz den Pfad besitzt, bevor Sie ihn entfernen, und nutzen Sie den eigenen Wiederherstellungsablauf des Dienstes, statt Dateien unter einem laufenden Daemon zu löschen.

Wie Abnahme aussieht

Vier Prüfungen decken das Design ab: die vorgesehene Controller-Identität verbindet sich, ein Prozess ohne diese Identität wird abgewiesen, der Daemon übersteht einen Controller, der sich ohne Vorwarnung trennt, und der Tunnel trägt weiterhin Verkehr durch einen kontrollierten Neustart. Eine erfolgreiche Management-Verbindung beweist nur die Steuerungsebene. Sie sagt nichts darüber aus, ob der Verkehr privater Anwendungen funktioniert, also testen Sie das separat. Schreiben Sie die vier Ergebnisse dort auf, wo der nächste Betreiber sie findet.

Die Dokumentation der Management-Schnittstelle beschreibt das Einzelclient-Modell und die privilegierte Natur des Protokolls, und das ist der Teil, der es wert ist, gelesen zu werden, bevor Sie ein Dashboard darauf richten.

Ähnliche Artikel