Les etiquetes de desplegament són el motiu habitual pel qual la gent recorre a aquesta funció: cada connexió hauria de portar una cosa com un lloc o un rol, i el servidor hauria de llegir-ho sense inventar un segon format de credencials. L’OpenVPN comunitari ja té el mecanisme, i és petit. La part que fa mal són les expectatives. Establir una variable ordinària al perfil del client no fa res al servidor, i un valor que sí que arriba només demostra que el client l’ha enviat.

Aquest és un manual per al camí que funciona, el pas de verificació que mostra què ha arribat realment i la reversió que no deixa cap hook mig configurat. Res d’aquí no necessita un certificat nou, un connector nou ni una extensió de protocol.

Estableix la variable i activa el camí

Dues línies fan la feina al perfil del client, i totes dues són necessàries. Sense la primera no hi ha res a enviar; sense la segona el client no ofereix cap informació del parell en absolut. L’ordre no importa, i val la pena saber-ho perquè les dues línies sovint acaben en parts diferents d’un perfil generat. L’important és que totes dues sobrevisquin a qualsevol reescriptura del perfil abans que el client el llegeixi.

setenv UV_DEPLOY field-support
push-peer-info

El prefix UV_ no és decoració. Una variable DEPLOY normal es queda local al procés del client i mai no es reenvia, mentre que la forma amb prefix és l’espai de noms que el protocol reserva per als camps definits per l’usuari. Mantén intacta la resta del perfil aprovat i confirma que la compilació del client que desplegues admet les dues directives abans de desplegar-les.

Una comprovació pràctica pertoca aquí i no al final: assegura't que la directiva arriba al binari del client i que no se l’empassa un embolcall. Un client gràfic que genera la seva pròpia línia d’ordres, o una interfície de gestió que recarrega un perfil desat, poden descartar línies que no reconeixen. Si el servidor no veu res, aquest és el primer lloc on cal mirar.

Llegeix el camp des d’un hook del servidor

Al costat del servidor, la informació del parell rebuda es valida i s’insereix a l’entorn del flux de connexió, i això és el que la fa llegible des d’un hook sense cap feina de protocol per part teva. El servidor no necessita analitzar el canal de control ni desar res per tu; el valor simplement hi és mentre s’estableix la connexió. Un script client-connect mínim que registra l’etiqueta al costat del nom autenticat té aquest aspecte.

#!/bin/sh
# /etc/openvpn/server/hooks/label.sh
printf '%s %s\n' "$common_name" "${UV_DEPLOY:-unset}" \
  >> /var/log/openvpn/deploy-labels.log

Llegeix la variable a través de l’entorn en lloc d’analitzar el registre, i dona-li sempre un valor per defecte. ${UV_DEPLOY:-unset} manté el script funcionant per als clients que mai no envien el camp, que és l’estat normal durant un desplegament esglaonat. No aboquis tot l’entorn en un registre per trobar el nom; conté molt més que l’etiqueta, incloent-hi valors que no tenies intenció de conservar.

Executa el script a mà i reportarà unset per a tot, perquè un intèrpret manual no porta l’entorn de la connexió. No és un error del script ni és cap prova que falti el camp. Prova'l a través d’una connexió real, que és l’únic context on existeix la variable.

Verifica què ha arribat realment

Connecta un client amb l’etiqueta i un sense, i després llegeix el fitxer. La parella és la prova: una línia hauria de portar el valor i l’altra el valor per defecte, i totes dues haurien de nomenar la mateixa identitat autenticada que esperes.

tail -n 5 /var/log/openvpn/deploy-labels.log
# field-support deployed-client-07
# unset         legacy-laptop-02

Aquestes línies de comentari són la forma de la sortida, no una transcripció del teu servidor; llegeix el teu propi fitxer. Si el segon client també mostra un valor, la variable està definida en un altre lloc de l’entorn, i estàs llegint una configuració antiga en lloc del camp del parell.

Comprova també el registre del servidor per a la connexió. La informació del parell hi pot aparèixer, cosa que és convenient per depurar i un motiu per mantenir els valors avorrits: sense noms de persones, sense números de tiquet, sense res que et sabria greu que veiés un lector del registre.

Tracta l’etiqueta com una afirmació, no com una identitat

Qualsevol que pugui editar el perfil del client pot canviar l’etiqueta, i el fet que el túnel estigui autenticat no fa que l’etiqueta sigui autoritària. El transport protegeix el valor en trànsit; no certifica l’afirmació. L’autorització continua pertanyent a la identitat autenticada i a un registre d’inscripció que posseeix el servidor, amb l’etiqueta comparada amb aquest registre quan importa.

Aquesta distinció decideix on es pot fer servir l’etiqueta. Bons usos són encaminar una sessió al fitxer de registre correcte, triar un grup de visualització en un tauler o etiquetar una sessió de suport perquè una persona la trobi més tard. Mals usos són admetre un dispositiu en una subxarxa, seleccionar una política de tallafocs o decidir les dades de quin client pot llegir la sessió.

Valida el valor abans que arribi a una ruta, una consulta o una ordre de shell. Una llista blanca de cadenes esperades és suficient per a una etiqueta de desplegament, i no costa res. No interposis mai una cadena proporcionada pel parell en una línia d’ordres de shell, i limita qualsevol observació desada a la sessió i no a una adreça de túnel que el proper client reutilitzarà.

case "${UV_DEPLOY:-}" in
  field-support|field-qa|lab) : ;;
  *) UV_DEPLOY=unknown ;;
esac

Reverteix-ho net

Treure la funció són dues eliminacions i una verificació. Elimina les línies setenv i push-peer-info del perfil del client, i després elimina o desactiva el hook i el seu destí de registre al servidor.

grep -rn 'UV_DEPLOY\|push-peer-info' /etc/openvpn/
tail -n 3 /var/log/openvpn/deploy-labels.log

Torna a connectar un client després i confirma que la línia de registre deixa d’aparèixer. Un hook que continua disparant-se després del canvi de perfil sol ser un segon perfil encara desplegat en un dispositiu de prova, i trobar-lo ara surt més barat que trobar-lo durant una auditoria.

El que queda al final és una peça petita i delimitada de metadades de sessió amb origen documentat: el client l’afirma, el servidor la registra i res de l’accés no en depèn. Aquesta és la versió útil de la funció, i no cal cap credencial nova per arribar-hi.

Articles relacionats