Zmagovalna je prva seja: omejevanje prijav OpenVPN pred izrinom
Zavrniti poznejšo prijavo ni isto kot zamenjati staro. Odločitev mora pasti pred izrinom istega imena, preverjanje mesta pa mora biti atomsko.
Pravilo, ki dovoljuje eno sejo na račun, se zdi urejeno, dokler ne prispe druga prijava. Možna sta dva izida: novinec zamenja obstoječo sejo ali obstoječa seja obdrži mesto in novinec je zavrnjen. Samo drugi je pravilo, kjer zmaga prva seja. Nastavitev odjemalca, po kateri poseže večina, omogoči sočasnost in zato tega ne ustvari.
Za eno nastavitvijo se skrivata dve pogodbi
Ob izklopljeni sočasnosti lahko druga povezava z istim imenom potrdila izrine že delujočo sejo. Vklop sočasnosti dovoljuje več sej hkrati, kar je nasprotje omejitve. Nobeno od stanj ni pravilo zavračanja, zato je treba odločitev sprejeti povsem drugje.
Zapišite pogodbo, preden karkoli uvedete: kdo je zavrnjen, kateri dokaz prepozna delujočo sejo in kaj se zgodi, ko seja umre brez čiste prekinitve. Pravila, ki ga nihče ni tako oblikoval, pozneje ni mogoče preizkusiti.
Izrin se zgodi pred vašim kavljem za povezavo
Na kodni poti strežnika 2.6 zgodnja priprava novega odjemalca odstrani obstoječe primerke z istim imenom, ko je sočasnost izklopljena. Ta odstranitev se zgodi, preden se zažene veriga upravljalnikov povezave. Skript, ki opazi dvojnik in vrne napako, zato zavrne novinca potem, ko je bila delujoča seja že vržena ven - natanko izid, ki naj bi ga pravilo preprečilo. Vrstni red povratnih klicev v implementaciji upstream je edini zanesljiv odgovor za vašo gradnjo.
| 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 |
Tudi anketiranje statusne datoteke ni vrata. Dva poskusa, ki prideta hkrati, lahko oba vidita prazno mesto, preden ga eden potrdi, in oba nadaljujeta.
Premaknite odločitev v preverjanje pristnosti
Upravljalni vmesnik lahko prevzame odločitev o preverjanju pristnosti po preverjanju potrdila. V tej ureditvi krmilnik ni opazovalec: sprejme vsak primerek odjemalca, ki se povezuje, in odgovori, ali sme ta primerek nadaljevati. Ker odgovor prispe pred vzpostavitvijo, zavrnitev pusti delujočo sejo nedotaknjeno. Isti kanal poroča o prekinitvah in tako krmilnik izve, da je bilo mesto zakonito sproščeno.
Vsak nov primerek mora iti skozi ta vrata, vključno s ponovnimi povezavami in vsako potjo, ki se ponovno preveri brez poziva. Vrata, do katerih nekateri primerki nikoli ne pridejo, ne ščitijo ničesar, in izpust ostane neviden, dokler nekdo ne preizkusi obhoda.
Žetoni lahko gredo mimo vrat
Ko je žeton izdan, lahko strežnik zanj preveri interno in za to povezavo izpusti zunanje preverjanje pristnosti. Upravljalni klic se nikoli ne zgodi, zato preverjanje mesta, izvedeno samo tam, nikoli ne vidi novega primerka. Takšno vedenje je udobje za uporabnike in luknja v pravilu sočasnosti. Poskrbite, da povezave, overjene z žetonom, opravijo enakovredno verodostojno preverjanje, ali izklopite pot žetona, ko pravilo zahteva odločitev pri vsaki povezavi.
Tega ne nadomestite z brezpogojnim sprejemanjem vsakega žetona. Potekel ali neveljaven žeton mora še vedno spodleteti in mora spodleteti skozi isto odločitveno točko kot vse drugo.
Rezervacijo povežite s primerkom, ne z naslovom
Naslov je šibka identiteta: ponovna povezava z istega prenosnika lahko pride z drugega naslova, kopirane poverilnice pa z istega. Rezervacijo povežite s primerkom odjemalca, ki ga dodeli strežnik, da se ponovno preverjanje pristnosti že sprejetega primerka prepozna kot lastnik. Nov identifikator primerka si mora svoje mesto pridobiti z odločitvijo prvi zmaga, tudi ko predloži isti žeton.
Sprostite samo rezervacijo, ki pripada neuspešnemu poskusu. Zakasnjen dogodek prekinitve iz starejšega poskusa ne sme izbrisati mesta novejšega lastnika, zato sprostitev imenuje primerek in ne računa. Po ponovnem zagonu krmilnika uskladite žive seje, preden kogar koli spustite, in uporabite isto pravilo na vsakem prehodu, ki streže računu.
Ločeno odločite, kako se obnovi res zastarelo mesto. Skrbnik potrebuje dokumentiran način, da ga počisti, in ta pot ne sme biti dostopna uporabniku, ki samo klikne ponovno poveži.
Preizkusite pare, ki štejejo: dve skoraj sočasni prijavi, ponovno povezavo po čisti prekinitvi, ponovno preverjanje pristnosti delujoče seje, zavrnjenega novinca in ponovni zagon krmilnika. V vsakem primeru mora delujoča seja ostati uporabna, novinec pa mora biti zavrnjen brez posredne škode za druge račune.