OpenVPN push-peer-info: Cliente markéieren, ouni Zougang ze ginn
E UV_-Feld fiert duerch den authentifizéierten Tunnel, awer de Wäert ass nach ëmmer eng Behauptung vum Client. Verbënnt et, verifizéiert wat ukomm ass, a behält d’Autorisatioun um Server.
Deployment-Tags sinn de übleche Grond, firwat Leit no dëser Funktioun gräifen: all Verbindung soll eppes wéi eng Plaz oder eng Roll droen, an de Server soll et liesen, ouni en zweet Credential-Format ze erfinden. D’Community-OpenVPN huet de Mechanismus schonn, an en ass kleng. De schmerzhafte Deel sinn d’Erwaardungen. Eng gewéinlech Variabel am Clientprofil ze setzen, mécht um Server näischt, an e Wäert, deen ukommt, beweise just, datt de Client en geschéckt huet.
Dëst ass e Runbook fir de funktionéierende Wee, de Verifikatiounsschratt, deen weist wat wierklech ukomm ass, an de Réckzuch, deen keen hallef konfiguréierten Hook hannerléisst. Näischt hei brauch en neit Zertifikat, en neit Plugin oder eng Protokollerweiderung.
Setzt d’Variabel a maacht de Wee op
Zwee Linnen maachen d’Aarbecht am Clientprofil, an déi zwee si gebraucht. Ouni déi éischt gëtt et näischt ze schécken; ouni déi zweet bitt de Client guer keng Peer-Informatioun un. D’Reiefolleg spillt keng Roll, an dat ass gutt ze wëssen, well déi zwou Linnen oft an ënnerschiddlechen Deeler vun engem generéierte Profil landen. Wichteg ass, datt béid iwwerliewen, wat och ëmmer de Profil ëmschreift, ier de Client en liest.
setenv UV_DEPLOY field-support
push-peer-info
De Prefix UV_ ass keng Dekoratioun. Eng gewéinlech DEPLOY Variabel bleift lokal am Clientprozess a gëtt ni weidergeleet, wärend d’Form mam Prefix den Nummraum ass, deen de Protokoll fir benotzerdefinéiert Felder reservéiert. Loosst de Rescht vum approuvéierte Profil intakt a bestätegt virum Ausrollen, datt de Client-Build, deen Dir ausrullt, béid Direktiven ënnerstëtzt.
Eng praktesch Kontroll gehéiert hei an net um Enn: vergewëssert Iech, datt d’Direktiv d’Client-Binär erreecht an net vun engem Wrapper verschluckt gëtt. E grafesche Client, dee seng eege Kommandozeil generéiert, oder eng Verwaltungsinterface, déi e gespäicherte Profil nei lued, kann Zeilen verwerfen, déi en net erkennt. Wann de Server näischt gesäit, ass dëst déi éischt Plaz fir nozekucken.
Liest d’Feld aus engem Server-Hook
Op der Serversäit ginn d’empfange Peer-Informatiounen validéiert an an d’Ëmfeld vum Verbindungsworkflow agesat, an dat mécht se aus engem Hook liesbar, ouni datt Dir Protokollaarbecht maache musst. De Server muss de Kontrollkanal net parsen oder eppes fir Iech späicheren; de Wäert ass einfach do, wärend d’Verbindung opgebaut gëtt. E minimale Skript client-connect, deen d’Label niewent dem authentifizéierten Numm festhält, gesäit esou aus.
#!/bin/sh
# /etc/openvpn/server/hooks/label.sh
printf '%s %s\n' "$common_name" "${UV_DEPLOY:-unset}" \
>> /var/log/openvpn/deploy-labels.log
Liest d’Variabel iwwer d’Ëmfeld amplaz de Log ze parsen, a gitt hir ëmmer en Defaultwäert. ${UV_DEPLOY:-unset} hält de Skript funktionéierend fir Cliente, déi d’Feld ni schécken, wat beim gestaffelten Ausrollen den normale Fall ass. Schëdd net d’ganzt Ëmfeld an e Log, fir den Numm ze fannen; et enthält vill méi wéi d’Label, dorënner Wäerter, déi Dir net wëllt späicheren.
Féiert de Skript vun Hand aus, an en meld unset fir alles, well eng manuell Shell d’Verbindungsëmfeld net dréit. Dat ass kee Feeler am Skript an et ass kee Beweis, datt d’Feld feelt. Test et iwwer eng richteg Verbindung, deen eenzegen Kontext, an deem d’Variabel existéiert.
Verifizéiert, wat wierklech ukomm ass
Verbënnt ee Client mat der Label an een ouni, a liest dann de Fichier. D’Paar ass den Test: eng Zeil soll de Wäert droen an déi aner den Default, an déi zwee solle déi selwecht authentifizéiert Identitéit nennen, déi Dir erwaart.
tail -n 5 /var/log/openvpn/deploy-labels.log
# field-support deployed-client-07
# unset legacy-laptop-02
Déi Kommentarzeile sinn d’Form vum Output, net en Transkript vun Ärem Server; liest Ären eegene Fichier. Wann den zweeten Client och e Wäert weist, ass d’Variabel soss an der Ëmfeld gesat, an Dir liest eng al Astellung amplaz vum Peer-Feld.
Kuckt och de Serverlog fir d’Verbindung un. Peer-Informatiounen kënnen do optrieden, wat bequem fir d’Debuggen ass an ee Grond, fir d’Wäerter langweileg ze halen: keng Nimm vu Persounen, keng Ticketnummeren, näischt, wat Dir net wëllt, datt en Loglieser et gesäit.
Behandelt d’Label als Behauptung, net als Identitéit
Jidderee kann de Clientprofil editéieren an dat Tag änneren, an datt den Tunnel authentifizéiert ass, mécht d’Tag net autoritativ. Den Transport schützt de Wäert ënnerwee; en zertifizéiert d’Behauptung net. D’Autorisatioun gehéiert weiderhin zur authentifizéierter Identitéit an zu engem Inschreiwungsregëster, dee vum Server gehéiert gëtt, woubäi d’Label mat deem Regëster verglach gëtt, wann et drop ukommt.
Dës Ënnerscheedung entscheet, wou d’Label benotzt däerf ginn. Gutt Benotze si Sessiounen op de richtege Logfichier ze leeden, eng Displaygrupp an engem Dashboard auszewielen, oder eng Support-Sessioun ze markéieren, datt e Mënsch se spéider fanne kann. Schlecht Benotze si e Gerät an en Ënnernetz ze loossen, eng Firewall-Politik auszewielen, oder ze entscheeden, wéi eng Clientdaten d’Sessioun liese kann.
Validéiert de Wäert, ier en e Wee, eng Query oder en Shellkommando erreecht. Eng allowlist vun erwuessenen Strings ass genuch fir en Deployment-Tag, an et kascht näischt. Setzt ni e String, deen de Peer liwwert, an eng Shell-Kommandozeil an, a limitéiert all gespäichert Observatioun op d’Sessioun an net op eng Tunneladress, déi den nächsten Client nach eng Kéier benotzt.
case "${UV_DEPLOY:-}" in
field-support|field-qa|lab) : ;;
*) UV_DEPLOY=unknown ;;
esac
Huelt et propper zréck
D’Funktioun ewechhuelen sinn zwee Läschen an eng Verifikatioun. Huelt d’Zeilen setenv an push-peer-info aus dem Clientprofil eraus, an dann huelt den Hook a säi Logzil um Server ewech oder deaktivéiert se.
grep -rn 'UV_DEPLOY\|push-peer-info' /etc/openvpn/
tail -n 3 /var/log/openvpn/deploy-labels.log
Verbënnt duerno nach eemol ee Client a bestätegt, datt d’Logzeil ophält ze erschéngen. En Hook, deen no der Profilännerung nach ëmmer feuert, ass meeschtens en zweete Profil, deen nach op engem Testgerät ausgerullt ass, an en elo ze fannen ass méi bëlleg wéi en an engem Audit ze fannen.
Wat um Enn bleift, ass e klengt, begrenzt Stéck Sessiounsmetadaten mat dokumentéiertem Ursprong: de Client behaapt et, de Server registréiert et, an näischt iwwer den Zougang hänkt dovun of. Dat ass déi nëtzlech Versioun vun der Funktioun, an et brauch keng nei Umeldungsdaten, fir dohin ze kommen.