Darbalaukio grafinė sąsaja laiko valdymo ryšį, todėl stebėjimo scenarijus, bandantis atidaryti savo, nieko neperskaito arba, dar blogiau, sąsaja nustoja atsakyti į užklausas. Įprasta išvada, kad demonas yra nepatikimas. Bendruomenės demone apribojimas yra tyčinis: valdymo sąsaja aptarnauja vieną prisijungusį valdymo klientą vienu metu, ir tas skaičius neturi nieko bendra su tuo, kiek naudotojų VPN gali pervežti.

Vienas socketas, vienas savininkas

Valdymo kanalas priima vieną prisijungusį klientą. Kai antrasis atvyksta pirmajam esant aktyviam, jis laukia arba yra atmetamas, ir nėra jokio lygiagretaus prenumeratoriaus režimo, paslėpto už parinkties. Atjungus dabartinį savininką, demonas gali priimti kitą, ir tai yra perdavimas, o ne antras kanalas.

Tai paverčia kiekvieną papildomą įrankį konkurentu. Jei sąsaja turi ryšį, apklausos scenarijus arba neprisijungia, arba tai pavyksta tik po to, kai sąsaja pasiduoda, ir seka kartojasi kitą kartą prisijungus. Jei scenarijus prisijungia pirmas, sąsaja praranda savo valdymo kelią ir jos užklausos nustoja veikti. Nė vienas įrankis nepraneša apie konfliktą, nes kiekvienas mato tik savo nepavykusią komandą.

What you needMechanism that fitsWhat it cannot do
Periodic list of connected clientsStatus file written on an intervalDeliver events as they happen
Interactive prompts and session controlThe single management connectionServe two controllers at once
Multiple consumers of eitherOne owner process that fans outExist without you writing it

Nuspręskite, kuris komponentas valdo

Pasirinkite vieną interaktyvaus kanalo savininką ir leiskite jam būti vieninteliu, kuris jungiasi. Sąsaja, kuri tvarko ryšį, scenarijus, kuris atsako į autentifikavimo užklausas, ir valdiklis, kuris baigia sesijas, visi laikomi savininkais, ir tik vienas gali atlikti šį vaidmenį.

Kai sąsaja turi ryšį, naudokite integraciją, kurią ji siūlo, o ne kovokite su ja. Lenktyniavimas su savininku dėl socketo sukelia protarpinius gedimus, kurie naudotojams atrodo atsitiktiniai, o derintojas paprastai mato tik antrąją lenktynių pusę. Užsirašykite, kuris procesas prisijungia pirmas po perkrovimo, nes ta tvarka kiekvieną kartą nulemia, kas laimi. Monitorius, paleistas prieš sąsają, laikys kanalą, kol sąsaja pasiduos.

Naudokite būsenos momentines kopijas rinkėjams

Daugumai stebėjimo reikia sąrašo, o ne pokalbio. Periodinis būsenos failas atsako į tai neliesdamas valdymo kanalo, ir jis toliau veikia, kol sąsaja lieka prisijungusi.

status /run/openvpn/server.status 10
management /run/openvpn/server.sock unix

Intervalas yra šviežumo biudžetas, todėl nustatykite jį pagal tai, ko skydelis iš tikrųjų reikia, o ne pagal mažiausią saugią atrodančią reikšmę. Momentinė kopija, rašoma kas kelias sekundes, yra pigi; scenarijus, kuris kas kelias sekundes iš naujo prisijungia prie valdymo socketo, nėra, nes kiekvienas prisijungimas konkuruoja su savininku.

Momentinė kopija nėra istorija ir neįvykių srautas. Ryšiai, kurie ateina ir išeina per vieną intervalą, niekada nepasirodo, todėl audito reikalavimo negalima įvykdyti apklausinėjant failą, kuris perrašo pats save. Jei jums reikia žinoti, ar naudotojas apskritai prisijungė, momentinė kopija yra netinkamas įrankis.

Paskirstymas yra projektas, o ne režimas

Jei keli vartotojai tikrai reikia tiesioginių valdymo duomenų, pastatykite vieną patikimą komponentą prieš socketą ir leiskite jam skelbti griežtai atrinktus stebėjimus kitiems. Tas komponentas turi prisijungimą iš naujo, autentifikavimo užklausas ir sprendimą, ką saugu atskleisti.

Kurkite jį sąmoningai: apibrėžkite, kurie užklausimai leidžiami, registruokite, kas klausė, ir venkite netyčia paversti paskirstymo sluoksnio nuotolinio valdymo pultu. Demonas neturi kelių klientų režimo, kurį būtų galima įjungti, ir jokia konfigūracijos eilutė jo nesukuria. Laikykite savininką saugumo ribos dalimi, nes jis turi sąsają, galinčią atjungti žmones. Jo perkrovimas turėtų būti įprasta operacija su dokumentuotu atkūrimo keliu.

Laikykite socketą privilegija, o ne metrika

Valdymo sąsaja gali atjungti naudotojus, keisti būseną ir skaityti įvykius, kuriuose įvardijami žmonės. Jos slaptažodis autentifikuoja klientą ir neužšifruoja transporto, todėl tinklo klausytojas atskleidžia pokalbį kiekvienam, kuris gali jį stebėti.

Pirmenybę teikite vietiniam socketui arba griežtai apribotam klausytojui ir patikrinkite, į kurį procesą jūsų rinkėjas iš tikrųjų kreipiasi, nes serverių produktai pateikia savo valdymo API, kurie elgiasi kitaip. Rinkėjas, nukreiptas į netinkamą demoną, pateikia tvirtas ir klaidingas išvadas. Patvirtinkite kelią ir savininko procesą prieš derinant užklausą, kuri nieko negrąžina.

Susiję straipsniai