Izvietošanas atzīmes ir parastais iemesls, kāpēc cilvēki ķeras pie šīs funkcijas: katram savienojumam jānes kaut kas līdzīgs vietai vai lomai, un serverim tas jālasa, neizgudrojot otru akreditācijas datu formātu. Kopienas OpenVPN jau ir šis mehānisms, un tas ir mazs. Sāpīgā daļa ir gaidījumi. Parasta mainīgā iestatīšana klienta profilā serverī neko nedara, un ieradusies vērtība tikai pierāda, ka klients to nosūtīja.

Šī ir darbvirsmas rokasgrāmata strādājošajam ceļam, verifikācijas solim, kas parāda, kas tiešām ieradās, un atritināšanai, kas nepaliek aiz sevis pusa konfigurētu āķi. Šeit nekas neprasa jaunu sertifikātu, jaunu spraudni vai protokola paplašinājumu.

Iestatiet mainīgo un iespējojiet ceļu

Klienta profilā darbu veic divas rindas, un abas ir vajadzīgas. Bez pirmās nav ko sūtīt; bez otrās klients vispār nepiedāvā vienaudža informāciju. Secībai nav nozīmes, un to ir vērts zināt, jo abas rindas bieži nonāk dažādās ģenerētā profila daļās. Svarīgi, lai abas pārdzīvotu jebkuru profila pārrakstīšanu pirms klienta lasīšanas.

setenv UV_DEPLOY field-support
push-peer-info

UV_ prefikss nav rotājums. Parasts DEPLOY mainīgais paliek lokāls klienta procesā un nekad netiek pārsūtīts, savukārt forma ar prefiksu ir nosaukumvieta, ko protokols rezervē lietotāja definētiem laukiem. Atstājiet pārējo apstiprināto profilu neskartu un pirms izvietošanas pārliecinieties, ka izvietotā klienta būvējums atbalsta abas direktīvas.

Viena praktiska pārbaude iederas šeit, nevis beigās: pārliecinieties, ka direktīva sasniedz klienta bināro failu un to neaprij iesaiņojums. Grafiskais klients, kas ģenerē savu komandrindu, vai pārvaldības saskarne, kas pārlādē saglabātu profilu, var izmest rindas, ko tā neatpazīst. Ja serveris neko neredz, šī ir pirmā vieta, kur jāskatās.

Lasiet lauku no servera āķa

Servera pusē saņemtā vienaudža informācija tiek validēta un ievietota savienojuma darbplūsmas vidē, un tas ir tas, kas padara to lasāmu no āķa bez jebkāda jūsu protokola darba. Serverim nav jāanalizē vadības kanāls vai jāsaglabā kaut kas jūsu vietā; vērtība vienkārši ir klāt, kamēr savienojums tiek iestatīts. Minimāls client-connect skripts, kas ieraksta atzīmi līdzās autentificētajam vārdam, izskatās šādi.

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

Lasiet mainīgo caur vidi, nevis analizējot žurnālu, un vienmēr piešķiriet tam noklusējuma vērtību. ${UV_DEPLOY:-unset} uztur skriptu darbspējīgu klientiem, kas lauku nekad nesūta, kas ir normāls stāvoklis pakāpeniskas izvietošanas laikā. Neizgāziet visu vidi žurnālā, lai atrastu nosaukumu; tajā ir daudz vairāk nekā atzīme, tostarp vērtības, ko neplānojāt saglabāt.

Palaidiet skriptu ar roku, un tas ziņos unset par visu, jo manuāla čaula nenes savienojuma vidi. Tā nav skripta kļūda, un tas nav pierādījums, ka lauks trūkst. Pārbaudiet to caur īstu savienojumu, kas ir vienīgais konteksts, kurā mainīgais pastāv.

Pārbaudiet, kas tiešām ieradās

Pievienojiet vienu klientu ar atzīmi un vienu bez tās, pēc tam lasiet failu. Pāris ir tests: vienai rindai jānes vērtība, bet otrai noklusējuma vērtība, un abām jānosauc tā pati autentificētā identitāte, kuru gaidāt.

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

Tās komentāru rindas ir izvades forma, nevis jūsu servera transkripts; lasiet savu failu. Ja arī otrais klients rāda vērtību, mainīgais ir iestatīts citur vidē, un jūs lasāt novecojušu iestatījumu, nevis vienaudža lauku.

Pārbaudiet arī servera žurnālu par savienojumu. Vienaudža informācija tur var parādīties, kas ir ērti atkļūdošanai un iemesls turēt vērtības garlaicīgas: bez cilvēku vārdiem, bez biļešu numuriem, nekas tāds, ko jūs negribētu, lai žurnāla lasītājs redzētu.

Uztveriet atzīmi kā apgalvojumu, nevis identitāti

Ikviens, kas var rediģēt klienta profilu, var mainīt atzīmi, un tas, ka tunelis ir autentificēts, nepadara atzīmi autoritatīvu. Transportēšana aizsargā vērtību ceļā; tā neapliecina apgalvojumu. Autorizācija joprojām pieder autentificētajai identitātei un serverim piederošam reģistrācijas ierakstam, un atzīme tiek salīdzināta ar šo ierakstu, kad tas ir svarīgi.

Šī atšķirība nosaka, kur atzīmi drīkst izmantot. Labi lietojumi ir sesijas novirzīšana uz pareizo žurnālfailu, attēlošanas grupas izvēle informācijas panelī vai atbalsta sesijas marķēšana, lai cilvēks to vēlāk atrastu. Slikti lietojumi ir ierīces ielaišana apakštīklā, ugunsmūra politikas izvēlēšana vai lēmums par to, kuru klienta datu sesija drīkst lasīt.

Validējiet vērtību, pirms tā sasniedz ceļu, vaicājumu vai čaulas komandu. Gaidāmo virkņu atļauto saraksts ir pietiekams izvietošanas atzīmei, un tas neko nemaksā. Nekad neievietojiet vienaudža piegādātu virkni čaulas komandrindā, un ierobežojiet jebkuru saglabātu novērojumu ar sesiju, nevis tuneļa adresi, kuru nākamais klients izmantos atkārtoti.

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

Atritiniet tīri

Funkcijas noņemšana ir divas dzēšanas un viena pārbaude. Noņemiet rindas setenv un push-peer-info no klienta profila, pēc tam noņemiet vai atspējojiet āķi un tā žurnāla mērķi serverī.

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

Pēc tam atkal pievienojiet vienu klientu un apstipriniet, ka žurnāla rinda pārstāj parādīties. Āķis, kas turpina darboties pēc profila maiņas, parasti ir otrs profils, kas joprojām izvietots testa ierīcē, un atrast to tagad ir lētāk nekā atrast auditā.

Beigās paliek maza, ierobežota sesijas metadatu daļa ar dokumentētu izcelsmi: klients to apgalvo, serveris to ieraksta, un nekas par piekļuvi no tā nav atkarīgs. Šī ir funkcijas lietderīgā versija, un tai nav vajadzīgi jauni akreditācijas dati.

Saistītie raksti