Pirmoji sesija laimi: OpenVPN prisijungimų ribojimas prieš išstūmimą
Atmesti vėlesnį prisijungimą nėra tas pats, kas pakeisti senąjį. Sprendimas turi būti priimtas prieš to paties vardo išstūmimą, o lizdo patikra turi būti atominė.
Vieną sesiją vienai paskyrai leidžianti politika atrodo išspręsta, kol ateina antras prisijungimas. Galimi du rezultatai: naujokas pakeičia veikiančią sesiją arba veikianti sesija išlaiko lizdą, o naujokui atsisakoma. Tik antrasis yra pirmoji sesija laimi politika. Daugumos pasirenkama kliento parinktis įjungia lygiagretumą ir todėl šio rezultato neduoda.
Už vieno nustatymo slypi dvi sutartys
Išjungus lygiagretumą, antras ryšys su tuo pačiu sertifikato vardu gali išstumti jau veikiančią sesiją. Įjungus lygiagretumą leidžiama kelios sesijos vienu metu, o tai yra priešingybė ribojimui. Nė viena būsena nėra atsisakymo politika, todėl sprendimas turi būti priimtas visai kitur.
Užrašykite sutartį prieš ką nors diegdami: kam atsisakoma, koks įrodymas nustato veikiančią sesiją ir kas nutinka, kai sesija miršta be švaraus atsijungimo. Politika, kurios niekas taip nesuformulavo, vėliau negali būti patikrinta.
Išstūmimas įvyksta prieš jūsų prisijungimo kabliuką
2.6 serverio kodo kelyje ankstyvas naujo kliento paruošimas pašalina esamus to paties vardo egzempliorius, kai lygiagretumas išjungtas. Tas pašalinimas įvyksta prieš paleidžiant prisijungimo apdorotojų grandinę. Todėl scenarijus, kuris pastebi dublikatą ir grąžina klaidą, atsisako naujoko po to, kai veikianti sesija jau buvo išmesta - būtent tas rezultatas, kurį politika turėjo užkirsti kelią. Upstream įgyvendinimo atgalinių iškvietimų tvarka yra vienintelis patikimas atsakymas jūsų rinkiniui.
| Stage | Who can still refuse | Effect on the incumbent |
|---|---|---|
| Certificate check | Server trust configuration | None |
| Authentication decision | The authentication controller | None, because establishment has not run |
| Connect handler | A profile script | Already evicted in the same-name case |
| Post-establishment | Status tooling, monitoring | Both sessions already exist or one is gone |
Būsenos failo apklausa taip pat nėra vartai. Dvi vienu metu atėjusios pastangos gali abi matyti tuščią lizdą prieš kuriai nors jį užimant, ir abi tęsiasi.
Perkelkite sprendimą į autentifikavimą
Valdymo sąsaja gali perimti autentifikavimo sprendimą po sertifikato patikros. Šioje tvarkoje valdiklis nėra stebėtojas: jis priima kiekvieną besijungiančią kliento egzempliorių ir atsako, ar tas egzempliorius gali tęsti. Kadangi atsakymas ateina prieš nustatymą, atsisakymas palieka veikiančią sesiją nepaliestą. Tas pats kanalas praneša apie atsijungimus, ir taip valdiklis sužino, kad lizdas buvo teisėtai atlaisvintas.
Kiekvienas naujas egzempliorius turi praeiti šiuos vartus, įskaitant pakartotinius prisijungimus ir bet kokį kelią, kuris iš naujo autentifikuojasi be užklausos. Vartai, kurių kai kurie egzemplioriai niekada nepasiekia, nieko neapsaugo, o ši spraga lieka nematoma, kol kas nors nepabando apėjimo.
Žetonai gali praeiti pro vartus
Kai žetonas išduotas, serveris gali jį patikrinti viduje ir praleisti išorinę autentifikaciją tam ryšiui. Valdymo iškvietimas niekada neįvyksta, todėl tik ten įdiegta lizdo patikra niekada nemato naujo egzemplioriaus. Toks elgesys yra patogumas naudotojams ir skylė lygiagretumo politikai. Priverskite žetonu autentifikuotus ryšius praeiti lygiavertę įgaliotą patikrą arba išjunkite žetono kelią, kai politika reikalauja sprendimo dėl kiekvieno ryšio.
Nekompensuokite to besąlygiškai priimdami kiekvieną žetoną. Pasibaigęs ar negaliojantis žetonas vis tiek turi žlugti, ir jis turi žlugti per tą patį sprendimo tašką kaip ir visa kita.
Susiekite rezervaciją su egzemplioriumi, o ne su adresu
Adresas yra silpna tapatybė: pakartotinis prisijungimas iš to paties nešiojamojo kompiuterio gali ateiti iš kito adreso, o nukopijuoti prisijungimo duomenys gali ateiti iš to paties. Susiekite rezervaciją su kliento egzemplioriumi, kurį priskiria serveris, kad jau priimto egzemplioriaus pakartotinė autentifikacija būtų atpažįstama kaip savininkas. Naujas egzemplioriaus identifikatorius turi įgyti savo lizdą per pirmas laimi sprendimą, net kai pateikia tą patį žetoną.
Atlaisvinkite tik nepavykusiai pastangai priklausančią rezervaciją. Vėlyvas atsijungimo įvykis iš senesnės pastangos neturi išvalyti naujesnio savininko lizdo, todėl atlaisvinimas įvardija egzempliorių, o ne paskyrą. Po valdiklio paleidimo iš naujo suderinkite gyvas sesijas prieš ką nors priimdami ir taikykite tą pačią taisyklę kiekvienuose vartuose, kurie aptarnauja paskyrą.
Atskirai nuspręskite, kaip atkuriamas tikrai pasenęs lizdas. Administratoriui reikia dokumentuoto būdo jį išvalyti, ir tas kelias neturėtų būti pasiekiamas naudotojui, kuris tiesiog spusteli prisijungti iš naujo.
Išbandykite poras, kurios svarbios: du beveik vienalaikiai prisijungimai, pakartotinis prisijungimas po švaraus atsijungimo, veikiančios sesijos pakartotinė autentifikacija, atmestas naujokas ir valdiklio paleidimas iš naujo. Kiekvienu atveju veikianti sesija turi likti naudinga, o naujokui turi būti atsisakyta be šalutinės žalos kitoms paskyroms.