Sie haben einen Common Name und eine Adresse in Ihren Notizen und drei Befehle, die alle einen Client zu entfernen scheinen. Nur einer tut, was Sie wollen, und die Wahl hängt davon ab, ob Sie die jetzt laufende Sitzung beenden, die nächste Anmeldung ablehnen oder das Recht zu verbinden ganz entziehen müssen. Lesen Sie die Identität, die Sie tatsächlich haben, bevor Sie etwas anfassen, denn ein OpenVPN-Pool vergibt die gleiche Tunneladresse später an eine andere Sitzung.

Welche Identität Sie tatsächlich haben

Eine Statusdatei der Version 3 ist der übliche Ausgangspunkt. Der Abschnitt CLIENT_LIST trägt den Common Name, die echte Adresse, Byte-Zähler und Verbindungszeit; der Abschnitt ROUTING TABLE ordnet einer virtuellen Adresse einen Common Name mit einem Zeitstempel der letzten Referenz zu. Der Common Name ist die stabile Identität. Die virtuelle Adresse ist eine Zuweisung, und die echte Adresse hinter einem NAT kann zwischen Sitzungen wechseln, ohne dass sich auf dem Server etwas ändert.

Die Management-Schnittstelle zeigt eine ähnliche Sicht über ihren Befehl status und fügt pro Sitzung eine Client-ID hinzu. Diese ID erwartet client-kill, und sie ist nicht die Tunneladresse. Wenn Sie wissen müssen, welcher Common Name beim Verbinden welche Adresse erhalten hat, hat die Umgebung eines client-connect-Skripts beides, zusammen mit der vertrauenswürdigen äußeren Adresse, aber dieses Skript läuft als OpenVPN-Benutzer und braucht einen beschreibbaren Logpfad.

What you holdWhere it came fromWhat it can act on
Common nameCLIENT_LIST, or the auth hookkill, and credential revocation
Client IDstatus on the management socketclient-kill, that one session
Tunnel addressROUTING TABLE, client-connect environmentNothing durable, the address is recycled

Jetzt killen, beim Login verweigern, dauerhaft widerrufen

Beide Entfernungsbefehle in der Management-Schnittstelle sind Sitzungsaktionen. kill nimmt einen Common Name oder eine echte Adresse und einen Port; client-kill nimmt die Client-ID und beendet diese Instanz sofort. Keiner ist eine Sperre: Ein gekickter Client mit gültigem Zertifikat und Passwort verbindet sich in Sekunden wieder, was in Ordnung ist, wenn Sie einen Test-Peer recyceln, und nutzlos, wenn ein Laptop gestohlen wurde.

client-deny ist eine andere Art von Entscheidung. Es wird normalerweise aus einem Authentication- oder client-connect-Hook heraus erteilt und lehnt die Sitzung mit einer Begründung ab, passt also zu einer Richtlinie, die eine Anmeldung verweigert, nicht zu einer, die eine Verbindung unterbricht. Die Dokumentation warnt außerdem, dass ein während einer TLS-Renegotiation erteiltes Deny den neu ausgehandelten Schlüssel ungültig macht, während die bestehende Sitzung bis zum Schließen des Übergangsfensters weiterlaufen kann. Wenn die Anforderung ist, dass der Client jetzt weg ist, ist die dokumentierte Antwort client-kill.

Dauerhaftes Entfernen liegt unter all dem. Widerrufen Sie das Zertifikat und stellen Sie sicher, dass crl-verify auf eine Liste zeigt, die der Server tatsächlich neu lädt, deaktivieren Sie die client-spezifische Konfigurationsdatei im ccd-Verzeichnis, oder deaktivieren Sie das Konto in dem Backend, das der Authentication-Hook abfragt. Auch ein Widerruf ist nicht sofort: Mit Standardwerten für reneg-sec kann eine etablierte Sitzung weiterlaufen, bis sie renegotiiert, also sind die Sitzungsaktion und die Legitimationsaktion Ergänzungen, keine Alternativen.

Ist der Management-Socket frei?

Die Management-Schnittstelle bedient jeweils einen Client. Wenn eine GUI oder ein Überwachungsdaemon die Verbindung bereits hält, kann Ihr Skript sich nicht daneben anhängen, und je nach Client verdrängen Sie die bestehende, statt sauber zu scheitern. Ihr Passwort reist im Klartext über diesen Socket, deshalb gehört er auf eine lokale Adresse oder einen Unix-Socket, nie auf eine öffentliche Schnittstelle.

Wenn Sie den Socket nicht übernehmen können, haben Sie noch Optionen, und alle sind langsamer. Geben Sie zuerst die Sitzung der GUI frei, wenn Sie sie kontrollieren, oder akzeptieren Sie den Weg über die Legitimationsschicht und warten Sie auf die nächste Renegotiation. Was Sie nicht tun sollten, ist den Dienst neu zu starten, um einen Client loszuwerden, denn das beendet auch jede andere Sitzung und zerstört die Beweise der Statusdatei für diese eine.

Die Reihenfolge, die ich auf einem Live-Server ausführe

Anhängen, den aktuellen Zustand lesen, auf die gerade gelesene ID reagieren, dann erneut lesen. Aus einem Dokument kopierte Werte sind der häufigste Weg, den falschen Menschen zu töten.

status                     # note the client ID and common name
client-kill 3              # end that session now
kill Test-Client           # alternative: by common name
status                     # confirm the session is gone

Der Name und die Nummer oben sind Platzhalter, und IDs werden wiederverwendet, nachdem andere Clients die Verbindung getrennt haben. Bestätigen Sie, dass die Zeile fehlt, bevor Sie etwas als erledigt notieren, und prüfen Sie, dass sich die Zahl der verbundenen Clients um eins und nicht um mehrere verschoben hat.

Bestätigen, dass er weggeblieben ist

Notieren Sie den Common Name, die Tunneladresse, die äußere Adresse und die Minute der Entfernung. Wenn derselbe Common Name eine Minute später wieder auftaucht, hat die Sitzungsaktion funktioniert und die Legitimationsschicht nicht, was eine völlig andere Reparatur ist als ein Befehl, der nie gewirkt hat.

Testen Sie dann von der Client-Seite. Ein widerrufenes Zertifikat sollte den nächsten Handshake verfehlen; wenn es sich noch verbindet, wird die CRL überhaupt nicht gelesen, und das ist der Befund, der es wert ist, gemeldet zu werden. Wählen Sie die Aktion danach, was Sie beenden müssen, bestätigen Sie mit einem zweiten status, und reparieren Sie die Legitimationsschicht, wenn die Antwort länger als die Sitzung halten muss.

Ähnliche Artikel