Etiketat e vendosjes janë arsyeja e zakonshme pse njerëzit i drejtohen këtij funksioni: çdo lidhje duhet të mbajë diçka si një vend ose një rol, dhe serveri duhet ta lexojë pa shpikur një format të dytë kredencialesh. OpenVPN i komunitetit e ka tashmë mekanizmin, dhe ai është i vogël. Pjesa që të lëndon janë pritshmëritë. Vendosja e një ndryshoreje të zakonshme në profilin e klientit nuk bën asgjë në server, dhe një vlerë që megjithatë arrin provon vetëm se klienti e dërgoi atë.

Ky është një udhëzues për rrugën që funksionon, hapin e verifikimit që tregon se çfarë mbërriti vërtet, dhe kthimin mbrapsht që nuk lë pas një grep gjysmë të konfiguruar. Asgjë këtu nuk kërkon një certifikatë të re, një shtojcë të re ose një zgjerim protokolli.

Vendosni ndryshoren dhe aktivizoni rrugën

Dy rreshta e bëjnë punën në profilin e klientit, dhe të dy janë të nevojshëm. Pa të parin nuk ka çfarë të dërgohet; pa të dytin klienti nuk ofron fare informacion për peera. Rendi nuk ka rëndësi, dhe ia vlen ta dini këtë sepse dy rreshtat shpesh përfundojnë në pjesë të ndryshme të një profili të gjeneruar. E rëndësishmja është që të dy t'i mbijetojnë çdo rishkrimi të profilit përpara se klienti ta lexojë atë.

setenv UV_DEPLOY field-support
push-peer-info

Parashtesa UV_ nuk është zbukurim. Një ndryshore DEPLOY e zakonshme mbetet lokale në procesin e klientit dhe nuk përcillet kurrë, ndërsa forma me parashtesë është hapësira e emrave që protokolli rezervon për fushat e përcaktuara nga përdoruesi. Lini pjesën tjetër të profilit të miratuar të paprekur dhe përpara vendosjes konfirmoni që ndërtimi i klientit që po vendosni mbështet të dy direktivat.

Një kontroll praktik i takon kësaj pjese, jo fundit: sigurohuni që direktiva arrin në binarin e klientit dhe nuk gëlltitet nga një mbështjellës. Një klient grafik që gjeneron vetë rreshtin e komandës, ose një ndërfaqe administrimi që ringarkon një profil të ruajtur, mund të hedhë poshtë rreshta që nuk i njeh. Nëse serveri nuk sheh asgjë, ky është vendi i parë për të parë.

Lexoni fushën nga një grep i serverit

Në anën e serverit, informacioni për peera që merret validohet dhe futet në mjedisin e rrjedhës së punës së lidhjes, dhe kjo është ajo që e bën atë të lexueshëm nga një grep pa asnjë punë protokolli nga ana juaj. Serveri nuk ka nevojë të analizojë kanalin e kontrollit ose të ruajë diçka për ju; vlera thjesht është e pranishme ndërsa lidhja vendoset. Një skript minimal client-connect që regjistron etiketën pranë emrit të autentikuar duket kështu.

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

Lexojeni ndryshoren përmes mjedisit në vend që të analizoni regjistrin, dhe jepini gjithmonë një vlerë të paracaktuar. ${UV_DEPLOY:-unset} e mban skriptin funksional për klientët që nuk e dërgojnë kurrë fushën, që është gjendja normale gjatë një vendosjeje të fazuar. Mos derdhni të gjithë mjedisin në një regjistër për të gjetur emrin; përmban shumë më tepër sesa etiketa, duke përfshirë vlera që nuk kishit ndërmend t'i mbani.

Ekzekutoni skriptin me dorë dhe ai do të raportojë unset për gjithçka, sepse një shell me dorë nuk e mbart mjedisin e lidhjes. Ky nuk është një defekt në skript dhe nuk është provë që fusha mungon. Testojeni përmes një lidhjeje reale, i vetmi kontekst ku ndryshorja ekziston.

Verifikoni çfarë mbërriti vërtet

Lidhni një klient me etiketë dhe një pa të, pastaj lexoni skedarin. Çifti është testi: një rresht duhet të mbajë vlerën dhe tjetri të paracaktuarën, dhe të dy duhet të emërtojnë të njëjtin identitet të autentikuar që prisni.

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

Ato rreshta komentesh janë forma e daljes, jo një transkript nga serveri juaj; lexoni skedarin tuaj. Nëse edhe klienti i dytë tregon një vlerë, ndryshorja është vendosur diku tjetër në mjedis, dhe po lexoni një konfigurim të vjetër në vend të fushës së peerit.

Kontrolloni edhe regjistrin e serverit për lidhjen. Informacioni për peera mund të shfaqet atje, gjë që është e përshtatshme për korrigjimin e gabimeve dhe një arsye për t'i mbajtur vlerat të mërzitshme: pa emra njerëzish, pa numra biletash, asgjë që nuk do të dëshironit të shihte një lexues i regjistrit.

Trajtojeni etiketën si pretendim, jo si identitet

Kushdo që mund të redaktojë profilin e klientit mund të ndryshojë etiketën, dhe fakti që tuneli është i autentikuar nuk e bën etiketën autoritative. Transporti mbron vlerën gjatë rrugës; ai nuk e vërteton pretendimin. Autorizimi vazhdon t'i përkasë identitetit të autentikuar dhe një regjistri regjistrimi që zotërohet nga serveri, me etiketën që krahasohet me atë regjistër kur ka rëndësi.

Ky dallim përcakton se ku mund të përdoret etiketa. Përdorime të mira janë drejtimi i një sesioni në skedarin e duhur të regjistrit, zgjedhja e një grupi shfaqjeje në një panel ose etiketimi i një sesioni mbështetjeje që një person ta gjejë më vonë. Përdorime të këqija janë pranimi i një pajisjeje në një nënrrjet, zgjedhja e një politike muri zjarri ose vendosja se të dhënat e cilit klient mund t'i lexojë sesioni.

Validoni vlerën përpara se të arrijë në një shteg, një pyetës ose një komandë shell. Një listë e lejuar me vargje të pritura mjafton për një etiketë vendosjeje, dhe nuk kushton asgjë. Mos e futni kurrë një varg të furnizuar nga peeri në një rresht komande shell, dhe kufizoni çdo vëzhgim të ruajtur në sesion dhe jo në një adresë tuneli që klienti tjetër do ta ripërdorë.

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

Kthejeni pastër

Heqja e funksionit janë dy fshirje dhe një verifikim. Hiqni rreshtat setenv dhe push-peer-info nga profili i klientit, pastaj hiqni ose çaktivizoni grepin dhe destinacionin e tij të regjistrit në server.

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

Rilidhni një klient më pas dhe konfirmoni që rreshti i regjistrit ndalon së shfaquri. Një grep që vazhdon të aktivizohet pas ndryshimit të profilit është zakonisht një profil i dytë ende i vendosur në një pajisje testuese, dhe gjetja e tij tani kushton më pak sesa gjatë një auditimi.

Ajo që mbetet në fund është një pjesë e vogël dhe e kufizuar e meta të dhënave të sesionit me origjinë të dokumentuar: klienti e pretendon atë, serveri e regjistron, dhe asgjë për aksesin nuk varet prej saj. Kjo është versioni i dobishëm i funksionit, dhe nuk kërkon kredenciale të reja për të arritur atje.

Artikuj të ngjashëm