V poznámkách máte common name a adresu a tři příkazy, které všechny vypadají, že klienta odstraní. Jen jeden z nich udělá, co chcete, a volba závisí na tom, zda potřebujete ukončit relaci, která běží teď, odmítnout příští přihlášení, nebo vzít právo připojit se vůbec. Než se čehokoli dotknete, přečtěte si identitu, kterou skutečně máte, protože pool OpenVPN předá stejnou tunelovou adresu později jiné relaci.

Jakou identitu skutečně máte

Status soubor verze 3 je obvyklý výchozí bod. Sekce CLIENT_LIST nese common name, skutečnou adresu, počítadla bajtů a dobu připojení; sekce ROUTING TABLE mapuje virtuální adresu na common name s časovým razítkem posledního odkazu. Common name je stabilní identita. Virtuální adresa je přiřazení a skutečná adresa za NAT se může mezi relacemi změnit, aniž by se na serveru cokoli změnilo.

Management rozhraní vystavuje podobný pohled pomocí svého příkazu status a přidává ID klienta pro každou relaci. To je ID, které očekává client-kill, a není to tunelová adresa. Pokud potřebujete vědět, které common name dostalo při připojení kterou adresu, prostředí skriptu client-connect má obojí spolu s důvěryhodnou vnější adresou, ale tento skript běží jako uživatel OpenVPN a potřebuje zapisovatelnou cestu k logu.

What you holdWhere it came fromWhat it can act on
Common nameCLIENT_LIST, or the auth hookkill, and credential revocation
Client IDstatus on the management socketclient-kill, that one session
Tunnel addressROUTING TABLE, client-connect environmentNothing durable, the address is recycled

Zabít hned, odmítnout při přihlášení, revokovat natrvalo

Oba příkazy pro odstranění v management rozhraní jsou akce relace. kill bere common name nebo skutečnou adresu a port; client-kill bere ID klienta a ukončí danou instanci okamžitě. Ani jeden není blok: vyhozený klient s platným certifikátem a heslem se za pár sekund připojí znovu, což je v pořádku, když recyklujete testovací peer, a k ničemu, když byl ukraden notebook.

client-deny je jiný druh rozhodnutí. Obvykle se vydává z autentizačního hooku nebo hooku client-connect a odmítá relaci s důvodem, takže se hodí pro politiku, která odmítá přihlášení, ne pro tu, která přerušuje spojení. Dokumentace také varuje, že deny vydaný během renegociace TLS zneplatní vyjednaný klíč, zatímco stávající relace může běžet až do zavření přechodového okna. Pokud je požadavkem, aby klient okamžitě zmizel, dokumentovanou odpovědí je client-kill.

Trvalé odstranění leží pod tím vším. Revokujte certifikát a ujistěte se, že crl-verify ukazuje na seznam, který server skutečně znovu načítá, zakažte konfigurační soubor specifický pro klienta v adresáři ccd, nebo zakažte účet v backendu, na který se autentizační hook dotazuje. Ani revokace není okamžitá: s výchozím nastavením reneg-sec může zavedená relace běžet dál, dokud nerenegociuje, takže akce relace a akce přihlašovacích údajů se doplňují, nejsou alternativami.

Je management socket volný?

Management rozhraní obsluhuje jednoho klienta najednou. Pokud připojení už drží GUI nebo monitorovací démon, váš skript se vedle něj nepřipojí, a podle klienta můžete stávající spojení spíš vytlačit, než čistě selhat. Jeho heslo putuje tím socketem v čistém textu, takže patří na lokální adresu nebo unix socket, nikdy na veřejné rozhraní.

Když socket nemůžete převzít, stále máte možnosti, a všechny jsou pomalejší. Nejprve pusťte relaci GUI, pokud ji ovládáte, nebo přijměte cestu přes vrstvu přihlašovacích údajů a počkejte na další renegociaci. Co dělat nemáte, je restartovat službu, abyste se zbavili jednoho klienta, protože to ukončí i všechny ostatní relace a zničí důkazy ve status souboru pro tuto relaci.

Postup, který spouštím na živém serveru

Připojte se, přečtěte aktuální stav, jednejte podle ID, které jste právě přečetli, a pak je přečtěte znovu. Hodnoty zkopírované z dokumentu jsou nejčastější způsob, jak zabít špatného člověka.

status                     # note the client ID and common name
client-kill 3              # end that session now
kill Test-Client           # alternative: by common name
status                     # confirm the session is gone

Jméno a číslo výše jsou zástupné symboly a ID se po odpojení jiných klientů znovu používají. Než něco zapíšete jako hotové, potvrďte, že řádek chybí, a zkontrolujte, že se počet připojených klientů posunul o jeden, ne o několik.

Potvrďte, že už se nevrátil

Zapište common name, tunelovou adresu, vnější adresu a minutu odstranění. Pokud se stejné common name o minutu později objeví znovu, akce relace fungovala a vrstva přihlašovacích údajů ne, což je úplně jiná oprava než příkaz, který nikdy nezačal platit.

Poté testujte ze strany klienta. Revokovaný certifikát by měl selhat při příštím handshake; pokud se stále připojuje, CRL se vůbec nečte, a to je zjištění, které stojí za nahlášení. Vyberte akci podle toho, co potřebujete ukončit, potvrďte druhým status a opravte vrstvu přihlašovacích údajů, když odpověď musí vydržet déle než relace.

Související články