Vyhrává první relace: omezení přihlášení OpenVPN před vytlačením
Odmítnout pozdější přihlášení není totéž jako nahradit to staré. Rozhodnutí musí padnout před vytlačením stejnojmenné relace a kontrola slotu musí být atomická.
Zásada, která povoluje jednu relaci na účet, vypadá vyřešeně, dokud nepřijde druhé přihlášení. Možné jsou dva výsledky: nováček nahradí stávající relaci, nebo si stávající relace podrží slot a nováček je odmítnut. Jen druhý výsledek je zásada vyhrává první relace. Klientská volba, po níž většina lidí sáhne, zapíná souběžnost, a proto ho neprodukuje.
Za jedním nastavením se skrývají dvě smlouvy
Při vypnuté souběžnosti může druhé připojení se stejným názvem certifikátu vytlačit již běžící relaci. Zapnutí souběžnosti povolí několik relací najednou, což je opak omezení. Ani jeden stav není zásada odmítání, takže rozhodnutí musí padnout úplně jinde.
Smlouvu sepište dřív, než cokoli implementujete: komu se odmítá, jaký důkaz identifikuje stávající relaci a co se stane, když relace zemře bez čistého odpojení. Zásadu, kterou nikdo takto nevyslovil, nelze později otestovat.
Vytlačení nastává dřív než váš hook připojení
V kódové cestě serveru 2.6 raná příprava nového klienta odstraňuje existující instance se stejným názvem, když je souběžnost vypnutá. Odstranění proběhne dřív, než se spustí řetězec obsluhy připojení. Skript, který duplikát rozpozná a vrátí chybu, proto odmítne nováčka poté, co už byla stávající relace vyhozena - přesně výsledek, kterému měla zásada zabránit. Pořadí zpětných volání v upstream implementaci je jediná spolehlivá odpověď pro 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 |
Dotazování stavového souboru také není branou. Dva pokusy, které přijdou současně, mohou oba vidět prázdný slot dřív, než ho některý obsadí, a oba pokračují.
Přesuňte rozhodnutí do autentizace
Rozhraní pro správu může převzít rozhodnutí o autentizaci po ověření certifikátu. V tomto uspořádání není kontroler pozorovatelem: přijímá každou připojující se instanci klienta a odpovídá, zda tato instance může pokračovat. Protože odpověď přichází před navázáním, odmítnutí ponechá stávající relaci nedotčenou. Stejný kanál hlásí odpojení, a tak se kontroler dozví, že slot byl legitimně uvolněn.
Každá nová instance musí projít touto branou, včetně opětovných připojení a jakékoli cesty, která se znovu autentizuje bez výzvy. Brána, ke které se některé instance nikdy nedostanou, nic nechrání a opomenutí zůstává neviditelné, dokud někdo nevyzkouší obejití.
Tokeny mohou projít kolem brány
Jakmile je token vydán, server jej může ověřit interně a pro toto připojení přeskočit externí autentizaci. Volání správy nikdy neproběhne, takže kontrola slotu implementovaná jen tam novou instanci nikdy neuvidí. Takové chování je pohodlí pro uživatele a díra pro zásadu souběžnosti. Přinuťte připojení ověřená tokenem projít ekvivalentní závaznou kontrolou, nebo vypněte cestu tokenu, když zásada vyžaduje rozhodnutí u každého připojení.
Nekompensujte to bezpodmínečným přijetím každého tokenu. Prošlý nebo neplatný token musí stále selhat a musí selhat přes stejný rozhodovací bod jako vše ostatní.
Svažte rezervaci s instancí, ne s adresou
Adresa je slabá identita: opětovné připojení ze stejného notebooku může přijít z jiné adresy a zkopírované přihlašovací údaje mohou přijít ze stejné. Svažte rezervaci s instancí klienta, kterou server přidělí, aby se opětovná autentizace již přijaté instance poznala jako vlastník. Nový identifikátor instance musí získat svůj slot rozhodnutím vyhrává první, i když předkládá stejný token.
Uvolněte jen rezervaci patřící neúspěšnému pokusu. Zpožděná událost odpojení ze staršího pokusu nesmí vymazat slot novějšího vlastníka, a proto uvolnění jmenuje instanci, nikoli účet. Po restartu kontroleru slučte živé relace, než někoho pustíte, a uplatněte stejné pravidlo na každé bráně, která účet obsluhuje.
Zvlášť rozhodněte, jak se skutečně zastaralý slot obnovuje. Správce potřebuje zdokumentovaný způsob, jak jej vyčistit, a tato cesta nesmí být dostupná uživateli, který jen klikne na opětovné připojení.
Otestujte dvojice, na kterých záleží: dvě téměř současná přihlášení, opětovné připojení po čistém ukončení, opětovnou autentizaci stávající relace, odmítnutého nováčka a restart kontroleru. V každém případě musí stávající relace zůstat použitelná a nováček musí být odmítnut bez vedlejších škod na jiných účtech.