Oznake za implementaciju uobičajen su razlog zašto ljudi posežu za ovom funkcijom: svaka veza treba nositi nešto poput lokacije ili uloge, a server to treba čitati bez izmišljanja drugog formata vjerodajnica. OpenVPN zajednice već ima mehanizam i on je mali. Bolni dio su očekivanja. Postavljanje obične varijable u profilu klijenta ne radi ništa na serveru, a vrijednost koja ipak stigne dokazuje samo da ju je klijent poslao.

Ovo je priručnik za radni put, korak provjere koji pokazuje šta je zaista stiglo i vraćanje koje ne ostavlja napola konfiguriranu kuku. Ništa ovdje ne zahtijeva novi certifikat, novi dodatak ili proširenje protokola.

Postavite varijablu i omogućite put

Dva retka obavljaju posao u profilu klijenta i oba su obavezna. Bez prvog nema šta poslati; bez drugog klijent uopće ne nudi informacije o peeru. Redoslijed nije važan i to je vrijedno znati jer dva retka često završe u različitim dijelovima generiranog profila. Važno je da oba prežive sve što prepisuje profil prije nego što ga klijent pročita.

setenv UV_DEPLOY field-support
push-peer-info

Prefiks UV_ nije ukras. Obična varijabla DEPLOY ostaje lokalna za proces klijenta i nikada se ne prosljeđuje, dok je oblik s prefiksom imenski prostor koji protokol čuva za polja koja definira korisnik. Ostatak odobrenog profila ostavite netaknutim i prije uvođenja provjerite da build klijenta koji postavljate podržava obje direktive.

Jedna praktična provjera pripada ovdje, a ne na kraju: pobrinite se da direktiva stiže do klijentske binarne datoteke i da je ne guta omotač. Grafički klijent koji sam generira naredbeni redak ili upravljačko sučelje koje ponovno učitava spremljeni profil mogu odbaciti retke koje ne prepoznaju. Ako server ne vidi ništa, to je prvo mjesto za provjeru.

Pročitajte polje iz serverske kuke

Na strani servera primljene informacije o peeru provjeravaju se i umeću u okruženje toka veze, i upravo to ih čini čitljivima iz kuke bez ikakvog vašeg rada na protokolu. Server ne treba analizirati kontrolni kanal niti bilo šta spremati za vas; vrijednost je jednostavno prisutna dok se veza uspostavlja. Minimalna skripta client-connect koja bilježi oznaku uz autentificirano ime izgleda ovako.

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

Čitajte varijablu kroz okruženje umjesto analiziranja zapisa i uvijek joj dajte zadanu vrijednost. ${UV_DEPLOY:-unset} održava skriptu radnom za klijente koji nikada ne šalju polje, što je uobičajeno stanje tijekom postupnog uvođenja. Ne ispisujte cijelo okruženje u zapis da biste pronašli ime; ono sadrži mnogo više od oznake, uključujući vrijednosti koje niste namjeravali trajno sačuvati.

Pokrenite skriptu ručno i prijavljivat će unset za sve, jer ručna ljuska ne nosi okruženje veze. To nije greška u skripti i nije dokaz da polje nedostaje. Testirajte je kroz stvarnu vezu, što je jedini kontekst u kojem varijabla postoji.

Provjerite šta je zaista stiglo

Spojite jedan klijent s oznakom i jedan bez nje, zatim pročitajte datoteku. Par je test: jedan redak treba nositi vrijednost, a drugi zadanu vrijednost, i oba trebaju navesti isti autentificirani identitet koji očekujete.

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

Ti komentarski reci su oblik izlaza, a ne transkript s vašeg servera; čitajte vlastitu datoteku. Ako i drugi klijent pokazuje vrijednost, varijabla je postavljena negdje drugdje u okruženju i čitate zastarjelu postavku, a ne polje peera.

Provjerite i serverski zapis za vezu. Informacije o peeru mogu se pojaviti tamo, što je zgodno za otklanjanje grešaka i razlog da vrijednosti ostanu dosadne: bez imena ljudi, bez brojeva zahtjeva, bez ičega što biste nerado vidjeli u zapisu.

Tretirajte oznaku kao tvrdnju, a ne identitet

Svako ko može uređivati profil klijenta može promijeniti oznaku, a to što je tunel autentificiran ne čini oznaku mjerodavnom. Transport štiti vrijednost u prijenosu; on ne potvrđuje tvrdnju. Autorizacija i dalje pripada autentificiranom identitetu i evidenciji upisa koju posjeduje server, a oznaka se s tom evidencijom upoređuje kada je to važno.

Ta razlika određuje gdje se oznaka smije koristiti. Dobre upotrebe su usmjeravanje sesije u pravu datoteku zapisa, odabir grupe za prikaz na nadzornoj ploči ili označavanje sesije podrške da je čovjek kasnije pronađe. Loše upotrebe su puštanje uređaja u podmrežu, odabir pravila vatrozida ili odlučivanje čije podatke klijenta sesija smije čitati.

Provjerite vrijednost prije nego stigne do putanje, upita ili naredbe ljuske. Popis dopuštenih očekivanih nizova dovoljan je za oznaku implementacije i ne košta ništa. Nikada ne umećite niz koji je dostavio peer u naredbeni redak ljuske i ograničite svako sačuvano opažanje na sesiju, a ne na adresu tunela koju će sljedeći klijent ponovno koristiti.

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

Vratite to čisto

Uklanjanje funkcije su dva brisanja i jedna provjera. Uklonite retke setenv i push-peer-info iz profila klijenta, zatim uklonite ili onemogućite kuku i njezin cilj zapisa na serveru.

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

Nakon toga ponovno spojite jedan klijent i potvrdite da se redak zapisa prestaje pojavljivati. Kuka koja se nastavlja pokretati nakon promjene profila obično je drugi profil još uvijek postavljen na testni uređaj, a pronaći ga sada je jeftinije nego tijekom revizije.

Na kraju ostaje mali, ograničeni dio metapodataka sesije dokumentiranog porijekla: klijent ga tvrdi, server ga bilježi i ništa o pristupu ne ovisi o njemu. To je korisna verzija funkcije i ne treba joj nova vjerodajnica.

Povezani članci