OpenVPN push-peer-info: klientide märgistamine ilma juurdepääsu andmata
UV_ väli sõidab autenditud tunnelis, kuid väärtus on endiselt kliendi väide. Ühendage see, kontrollige, mis kohale jõudis, ja jätke autoriseerimine serveripoolseks.
Juurutussildid on tavaline põhjus, miks inimesed selle funktsiooni järele haaravad: iga ühendus peaks kandma midagi saidi või rolli taolist ja server peaks seda lugema, ilma et leiutaks teist volituste vormingut. Kogukonna OpenVPN-il on see mehhanism juba olemas ja see on väike. Valus osa on ootused. Tavalise muutuja seadmine kliendi profiilis ei tee serveris midagi ja kohale jõudev väärtus tõestab ainult seda, et klient selle saatis.
See on juhend töötava tee, kontrollisammu, mis näitab, mis tegelikult kohale jõudis, ja tagasipööramise jaoks, mis ei jäta maha pooleldi seadistatud konksu. Miski siin ei vaja uut sertifikaati, uut pistikprogrammi ega protokollilaiendit.
Määrake muutuja ja lubage tee
Kliendi profiilis teevad töö kaks rida ja mõlemad on vajalikud. Ilma esimeseta pole midagi saata; ilma teiseta ei paku klient üldse partneriteavet. Järjekord ei loe ja seda tasub teada, sest need kaks rida satuvad sageli genereeritud profiili erinevatesse osadesse. Tähtis on, et mõlemad jääksid püsima ükskõik mis profiili enne kliendi lugemist ümber kirjutab.
setenv UV_DEPLOY field-support
push-peer-info
Prefiks UV_ ei ole kaunistus. Tavaline muutuja DEPLOY jääb kliendi protsessis kohalikuks ega edastata kunagi, samas kui prefiksiga vorm on nimeruum, mille protokoll jätab kasutaja määratud väljadele. Jätke ülejäänud kinnitatud profiil puutumata ja enne juurutamist veenduge, et juurutatav kliendi build toetab mõlemat direktiivi.
Üks praktiline kontroll kuulub siia, mitte lõppu: veenduge, et direktiiv jõuab kliendi binaarfailini ega jää mõne mähise alla. Graafiline klient, mis genereerib oma käsurea, või haldusliides, mis laeb salvestatud profiili uuesti, võib ära visata ridu, mida see ei tunne. Kui server ei näe midagi, on see esimene koht, kuhu vaadata.
Lugege välja serveri konksust
Serveri poolel valideeritakse saadud partneriteave ja sisestatakse ühenduse töövoo keskkonda, ja just see teeb selle konksust loetavaks ilma teiepoolse protokollitööta. Server ei pea juhtkanalit parsima ega teie eest midagi salvestama; väärtus on lihtsalt kohal, kui ühendust luuakse. Minimaalne skript client-connect, mis märgib sildi autenditud nime kõrvale, näeb välja selline.
#!/bin/sh
# /etc/openvpn/server/hooks/label.sh
printf '%s %s\n' "$common_name" "${UV_DEPLOY:-unset}" \
>> /var/log/openvpn/deploy-labels.log
Lugege muutujat keskkonna kaudu, mitte logi parsides, ja andke sellele alati vaikeväärtus. ${UV_DEPLOY:-unset} hoiab skripti töös klientide jaoks, kes välja kunagi ei saada, mis on etapiviisilise juurutamise ajal tavaline seis. Ärge valage kogu keskkonda logisse, et nime leida; see sisaldab palju enamat kui silt, sealhulgas väärtusi, mida te ei kavatsenud säilitada.
Käivitage skript käsitsi ja see teatab kõige kohta unset, sest käsitsi shell ei kanna ühenduse keskkonda. See ei ole skripti viga ega tõestus, et väli puudub. Testige seda tegeliku ühenduse kaudu, mis on ainus kontekst, kus muutuja eksisteerib.
Kontrollige, mis tegelikult kohale jõudis
Ühendage üks klient sildiga ja üks ilma, seejärel lugege faili. Paar ongi test: üks rida peaks kandma väärtust ja teine vaikeväärtust ning mõlemad peaksid nimetama sama autenditud identiteeti, mida ootate.
tail -n 5 /var/log/openvpn/deploy-labels.log
# field-support deployed-client-07
# unset legacy-laptop-02
Need kommentaariread on väljundi kuju, mitte transkript teie serverist; lugege oma faili. Kui ka teine klient näitab väärtust, on muutuja seatud mujal keskkonnas ja te loete aegunud seadet, mitte partneri välja.
Kontrollige ka serveri logi ühenduse kohta. Partneriteave võib seal esineda, mis on silumiseks mugav ja põhjus hoida väärtused igavaid: ei inimeste nimesid, ei piletinumbreid, ei midagi, mida te ei tahaks logilugeja näha lasta.
Käsitlege silti väitena, mitte identiteedina
Igaüks, kes saab kliendi profiili muuta, saab silti muuta, ja see, et tunnel on autenditud, ei muuda silti autoriteetseks. Transport kaitseb väärtust teel; see ei tõesta väidet. Autoriseerimine kuulub endiselt autenditud identiteedile ja serveri omanduses olevale registreerimiskirjele, kusjuures silti võrreldakse selle kirjega siis, kui see loeb.
See erinevus otsustab, kus silti tohib kasutada. Head kasutused on sessiooni suunamine õigesse logifaili, kuvagrupi valimine armatuurlaual või tugisessiooni märgistamine, et inimene leiaks selle hiljem. Halvad kasutused on seadme lubamine alamvõrku, tulemüürireegli valimine või otsustamine, millise kliendi andmeid sessioon tohib lugeda.
Valideerige väärtus enne, kui see jõuab tee, päringu või shellikäsuni. Oodatavate stringide lubatud loend on juurutussildi jaoks piisav ja ei maksa midagi. Ärge kunagi sisestage partneri esitatud stringi shelli käsureale ja piiritlege mis tahes salvestatud vaatlus sessioga, mitte tunneliaadressiga, mida järgmine klient uuesti kasutab.
case "${UV_DEPLOY:-}" in
field-support|field-qa|lab) : ;;
*) UV_DEPLOY=unknown ;;
esac
Võtke see puhtalt tagasi
Funktsiooni eemaldamine on kaks kustutamist ja üks kontroll. Eemaldage kliendi profiilist read setenv ja push-peer-info, seejärel eemaldage või lülitage välja konks ja selle logisiht serveris.
grep -rn 'UV_DEPLOY\|push-peer-info' /etc/openvpn/
tail -n 3 /var/log/openvpn/deploy-labels.log
Ühendage pärast üks klient uuesti ja kinnitage, et logirida enam ei ilmu. Konks, mis jätkab profiilimuudatuse järel töötamist, on tavaliselt teine profiil, mis on endiselt testseadmesse juurutatud, ja selle leidmine praegu on odavam kui auditi ajal.
Lõpuks jääb alles väike, piiratud tükk sessiooni metaandmeid, mille päritolu on dokumenteeritud: klient väidab seda, server salvestab selle ja miski juurdepääsus ei sõltu sellest. See on funktsiooni kasulik versioon ja sinna jõudmiseks pole uut volitust vaja.