Vyhráva prvá relácia: obmedzenie prihlásení OpenVPN pred vytlačením
Odmietnuť neskoršie prihlásenie nie je to isté ako nahradiť to staré. Rozhodnutie musí padnúť pred vytlačením rovnomennej relácie a kontrola slotu musí byť atomická.
Zásada, ktorá povoľuje jednu reláciu na účet, vyzerá vyriešene, kým nepríde druhé prihlásenie. Možné sú dva výsledky: nováčik nahradí existujúcu reláciu, alebo si existujúca relácia ponechá slot a nováčik je odmietnutý. Iba druhý je zásada prvá relácia vyhráva. Klientska voľba, po ktorej siaha väčšina, zapína súbežnosť, a preto ho neprodukuje.
Za jedným nastavením sa skrývajú dve zmluvy
Pri vypnutej súbežnosti môže druhé pripojenie s rovnakým názvom certifikátu vytlačiť už bežiacu reláciu. Zapnutie súbežnosti povoľuje viac relácií naraz, čo je opak obmedzenia. Ani jeden stav nie je zásada odmietania, takže rozhodnutie musí padnúť úplne inde.
Zmluvu napíšte skôr, než čokoľvek implementujete: komu sa odmieta, aký dôkaz identifikuje existujúcu reláciu a čo sa stane, keď relácia zomrie bez čistého odpojenia. Zásadu, ktorú nikto takto nevyslovil, neskôr nemožno otestovať.
Vytlačenie nastáva skôr ako váš hook pripojenia
V kódovej ceste servera 2.6 skorá príprava nového klienta odstraňuje existujúce inštancie s rovnakým názvom, keď je súbežnosť vypnutá. Odstránenie prebehne skôr, než sa spustí reťazec obsluhy pripojenia. Skript, ktorý duplikát rozpozná a vráti chybu, preto odmietne nováčika po tom, čo už bola bežiaca relácia vyhodená - presne výsledok, ktorému mala zásada zabrániť. Poradie spätných volaní v upstream implementácii je jediná spoľahlivá odpoveď pre váš build.
| 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 |
Dopytovanie stavového súboru tiež nie je bránou. Dva pokusy, ktoré prídu súčasne, môžu oba vidieť prázdny slot skôr, než ho niektorý obsadí, a oba pokračujú.
Presuňte rozhodnutie do autentizácie
Rozhranie správy môže prevziať rozhodnutie o autentizácii po overení certifikátu. V tomto usporiadaní nie je kontrolér pozorovateľom: prijíma každú pripájajúcu sa klientsku inštanciu a odpovedá, či táto inštancia môže pokračovať. Keďže odpoveď prichádza pred nadviazaním, odmietnutie ponechá bežiacu reláciu nedotknutú. Ten istý kanál hlási odpojenia, a tak sa kontrolér dozvie, že slot bol legitímne uvoľnený.
Každá nová inštancia musí prejsť touto bránou, vrátane opätovných pripojení a akejkoľvek cesty, ktorá sa znova autentizuje bez výzvy. Brána, ku ktorej sa niektoré inštancie nikdy nedostanú, nič nechráni a opomenutie zostáva neviditeľné, kým niekto nevyskúša obchádzku.
Tokeny môžu prejsť okolo brány
Keď je token vydaný, server ho môže overiť interne a pre toto pripojenie preskočiť externú autentizáciu. Volanie správy nikdy neprebehne, takže kontrola slotu implementovaná len tam novú inštanciu nikdy neuvidí. Takéto správanie je pohodlie pre používateľov a diera pre zásadu súbežnosti. Prinúťte pripojenia overené tokenom prejsť ekvivalentnou záväznou kontrolou, alebo vypnite cestu tokenu, keď zásada vyžaduje rozhodnutie pri každom pripojení.
Nekompensujte to bezpodmienečným prijatím každého tokenu. Expirovaný alebo neplatný token musí stále zlyhať a musí zlyhať cez ten istý rozhodovací bod ako všetko ostatné.
Zviažte rezerváciu s inštanciou, nie s adresou
Adresa je slabá identita: opätovné pripojenie z toho istého notebooku môže prísť z inej adresy a skopírované prihlasovacie údaje môžu prísť z tej istej. Zviažte rezerváciu s klientskou inštanciou, ktorú pridelí server, aby sa opätovná autentizácia už prijatej inštancie rozpoznala ako vlastník. Nový identifikátor inštancie musí získať svoj slot rozhodnutím prvý vyhráva, aj keď predkladá ten istý token.
Uvoľnite len rezerváciu patriacu neúspešnému pokusu. Oneskorená udalosť odpojenia zo staršieho pokusu nesmie vymazať slot novšieho vlastníka, a preto uvoľnenie pomenúva inštanciu, nie účet. Po reštarte kontroléra zosúlaďte živé relácie, než niekoho pustíte, a uplatnite rovnaké pravidlo na každej bráne, ktorá účet obsluhuje.
Samostatne rozhodnite, ako sa obnovuje skutočne zastaraný slot. Správca potrebuje zdokumentovaný spôsob, ako ho vyčistiť, a táto cesta nesmie byť dostupná používateľovi, ktorý len klikne na opätovné pripojenie.
Otestujte dvojice, na ktorých záleží: dve takmer súčasné prihlásenia, opätovné pripojenie po čistom ukončení, opätovnú autentizáciu bežiacej relácie, odmietnutého nováčika a reštart kontroléra. V každom prípade musí bežiaca relácia zostať použiteľná a nováčik musí byť odmietnutý bez vedľajších škôd na iných účtoch.