Oznake uvajanja so običajen razlog, da se ljudje lotijo te funkcije: vsaka povezava naj bi nosila nekaj kot je lokacija ali vloga, strežnik pa naj bi to bral brez izmišljanja drugega formata poverilnic. Skupnostni OpenVPN že ima mehanizem in ta je majhen. Boleči del so pričakovanja. Nastavitev običajne spremenljivke v profilu odjemalca na strežniku ne naredi ničesar, vrednost, ki vendarle prispe, pa dokazuje le, da jo je odjemalec poslal.

To je priročnik za delujočo pot, korak preverjanja, ki pokaže, kaj je v resnici prispelo, in razveljavitev, ki ne pusti na pol nastavljenega kavlja. Nič tukaj ne potrebuje novega potrdila, novega vtičnika ali razširitve protokola.

Nastavite spremenljivko in omogočite pot

V profilu odjemalca delo opravita dve vrstici in obe sta potrebni. Brez prve ni ničesar za poslati; brez druge odjemalec sploh ne ponuja podatkov o partnerju. Vrstni red ni pomemben in to je vredno vedeti, ker obe vrstici pogosto pristaneta v različnih delih ustvarjenega profila. Pomembno je, da obe preživita vse, kar profil prepiše, preden ga odjemalec prebere.

setenv UV_DEPLOY field-support
push-peer-info

Predpona UV_ ni okras. Običajna spremenljivka DEPLOY ostane lokalna v procesu odjemalca in se nikoli ne posreduje, oblika s predpono pa je imenski prostor, ki ga protokol rezervira za uporabniško določena polja. Preostanek odobrenega profila pustite nedotaknjen in pred uvajanjem preverite, da gradnja odjemalca, ki jo uvajate, podpira obe direktivi.

En praktični pregled sodi sem, ne na konec: poskrbite, da direktiva doseže binarno datoteko odjemalca in da je ne pogoltne ovoj. Grafični odjemalec, ki sam ustvarja ukazno vrstico, ali vmesnik za upravljanje, ki znova naloži shranjen profil, lahko zavrže vrstice, ki jih ne prepozna. Če strežnik ne vidi ničesar, je to prvo mesto za pogled.

Preberite polje iz kavlja strežnika

Na strani strežnika se prejete informacije o partnerju validirajo in vstavijo v okolje delovnega toka povezave, in prav to jih naredi berljive iz kavlja brez vašega dela s protokolom. Strežniku ni treba razčlenjevati krmilnega kanala ali česa shranjevati za vas; vrednost je preprosto prisotna, medtem ko se povezava vzpostavlja. Minimalna skripta client-connect, ki zapiše oznako ob overjenem imenu, izgleda takole.

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

Spremenljivko berite skozi okolje, ne z analizo dnevnika, in vedno ji dajte privzeto vrednost. ${UV_DEPLOY:-unset} ohranja skripto delujočo za odjemalce, ki polja nikoli ne pošljejo, kar je med postopnim uvajanjem običajno stanje. Ne izlivajte celotnega okolja v dnevnik, da bi našli ime; vsebuje veliko več kot oznako, vključno z vrednostmi, ki jih niste nameravali ohraniti.

Zaženite skripto ročno in poročala bo unset za vse, ker ročna lupina ne nosi okolja povezave. To ni hrošč v skripti in ni dokaz, da polje manjka. Preizkusite jo skozi dejansko povezavo, edini kontekst, v katerem spremenljivka obstaja.

Preverite, kaj je zares prispelo

Povežite enega odjemalca z oznako in enega brez nje, nato preberite datoteko. Par je preizkus: ena vrstica naj bi nosila vrednost, druga privzeto vrednost, obe pa naj bi imenovali isto overjeno identiteto, ki jo pričakujete.

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

Te komentarjeve vrstice so oblika izhoda, ne prepis z vašega strežnika; berite svojo datoteko. Če tudi drugi odjemalec kaže vrednost, je spremenljivka nastavljena kje drugje v okolju in berete zastarelo nastavitev namesto polja partnerja.

Preverite tudi dnevnik strežnika za povezavo. Informacije o partnerju se lahko pojavijo tam, kar je priročno za odpravljanje napak in razlog, da vrednosti ostanete dolgočasne: brez imen ljudi, brez številk zahtevkov, ničesar, česar si ne bi želeli pokazati bralcu dnevnika.

Oznako obravnavajte kot trditev, ne kot identiteto

Vsakdo, ki lahko ureja profil odjemalca, lahko spremeni oznako, in to, da je tunel overjen, oznake ne naredi verodostojne. Prenos ščiti vrednost na poti; trditve ne potrjuje. Avtorizacija še vedno pripada overjeni identiteti in evidenci vpisa, ki jo ima strežnik, oznaka pa se s to evidenco primerja, kadar je to pomembno.

Ta razlika odloča, kje se oznaka sme uporabljati. Dobre uporabe so usmerjanje seje v pravo dnevniško datoteko, izbira skupine za prikaz na nadzorni plošči ali označevanje seje podpore, da jo človek pozneje najde. Slabe uporabe so spuščanje naprave v podomrežje, izbira pravila požarnega zidu ali odločanje, katere podatke naročnika sme seja brati.

Vrednost validirajte, preden doseže pot, poizvedbo ali ukaz lupine. Seznam dovoljenih pričakovanih nizov zadostuje za oznako uvajanja in nič ne stane. Nikoli ne vstavljajte niza, ki ga zagotovi partner, v ukazno vrstico lupine, in vsako shranjeno opazovanje omejite na sejo in ne na naslov tunela, ki ga bo naslednji odjemalec znova uporabil.

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

Vrnite to čisto

Odstranitev funkcije sta dve brisanji in eno preverjanje. Odstranite vrstici setenv in push-peer-info iz profila odjemalca, nato odstranite ali onemogočite kavelj in njegov dnevniški cilj na strežniku.

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

Nato znova povežite enega odjemalca in potrdite, da se vrstica v dnevniku neha pojavljati. Kavelj, ki po spremembi profila še vedno sproža, je običajno drugi profil, ki je še vedno nameščen na preskusni napravi, in najti ga zdaj je ceneje kot med revizijo.

Na koncu ostane majhen, omejen del metapodatkov seje z dokumentiranim izvorom: odjemalec ga trdi, strežnik ga zabeleži in nič glede dostopa ni odvisno od njega. To je uporabna različica funkcije in za pot do nje ne potrebuje novih poverilnic.

Sorodni članki