Vyhodenie jedného klienta OpenVPN: kill, deny alebo odvolanie certifikátu?
Tri akcie OpenVPN odstránia klienta, ale každá ukončí niečo iné: živú reláciu, jeden pokus o prihlásenie alebo právo znova sa pripojiť. Vyberajte podľa identity.
V poznámkach máte common name a adresu a tri príkazy, ktoré všetky vyzerajú, že odstránia klienta. Len jeden robí to, čo chcete, a voľba závisí od toho, či potrebujete ukončiť reláciu, ktorá práve beží, odmietnuť ďalšie prihlásenie, alebo vziať právo pripojiť sa vôbec. Predtým, než sa čohokoľvek dotknete, prečítajte si identitu, ktorú skutočne máte, pretože pool OpenVPN neskôr pridelí rovnakú tunelovú adresu inej relácii.
Akú identitu skutočne máte
Súbor stavu verzie 3 je obvyklý východiskový bod. Sekcia CLIENT_LIST nesie common name, skutočnú adresu, počítadlá bajtov a čas pripojenia; sekcia ROUTING TABLE mapuje virtuálnu adresu na common name s časovou značkou poslednej referencie. Common name je stabilná identita. Virtuálna adresa je pridelenie a skutočná adresa za NAT sa môže medzi reláciami zmeniť, pričom na serveri sa nič nemení.
Rozhranie na správu zobrazuje podobný pohľad cez svoj príkaz status a pridáva ID klienta pre každú reláciu. To je ID, ktoré očakáva client-kill, a nie je to tunelová adresa. Ak potrebujete vedieť, ktorý common name dostal pri pripojení ktorú adresu, prostredie skriptu client-connect má oboje spolu s dôveryhodnou vonkajšou adresou, ale tento skript beží ako používateľ OpenVPN a potrebuje zapisovateľnú cestu k logu.
| What you hold | Where it came from | What it can act on |
|---|---|---|
| Common name | CLIENT_LIST, or the auth hook | kill, and credential revocation |
| Client ID | status on the management socket | client-kill, that one session |
| Tunnel address | ROUTING TABLE, client-connect environment | Nothing durable, the address is recycled |
Zabiť hneď, odmietnuť pri prihlásení, odvolať navždy
Oba príkazy na odstránenie v rozhraní na správu sú akcie relácie. kill prijíma common name alebo skutočnú adresu a port; client-kill prijíma ID klienta a okamžite ukončí danú inštanciu. Ani jeden nie je blok: vyhodený klient s platným certifikátom a heslom sa za pár sekúnd pripojí znova, čo je v poriadku, keď recyklujete testovací peer, a zbytočné, keď bol ukradnutý notebook.
client-deny je iný druh rozhodnutia. Zvyčajne sa vydáva z autentifikačného hooku alebo hooku client-connect a odmieta reláciu s dôvodom, takže sa hodí pre politiku, ktorá odmieta prihlásenie, nie pre tú, ktorá prerušuje spojenie. Dokumentácia tiež varuje, že odmietnutie vydané počas renegociácie TLS zneplatní renegociovaný kľúč, zatiaľ čo existujúca relácia môže bežať až do zatvorenia prechodového okna. Ak je požiadavkou, aby klient okamžite zmizol, dokumentovanou odpoveďou je client-kill.
Trvalé odstránenie leží pod týmto všetkým. Odvolajte certifikát a uistite sa, že crl-verify ukazuje na zoznam, ktorý server skutočne znova načíta, zakážte konfiguračný súbor špecifický pre klienta v adresári ccd alebo zakážte účet v tom backende, na ktorý sa autentifikačný hook pýta. Ani odvolanie nie je okamžité: s predvolenými nastaveniami reneg-sec môže zavedená relácia bežať ďalej, kým nerenegociuje, takže akcia relácie a akcia prihlasovacích údajov sa dopĺňajú, nie sú alternatívami.
Je socket na správu voľný?
Rozhranie na správu obsluhuje jedného klienta naraz. Ak pripojenie už drží GUI alebo monitorovací démon, váš skript sa vedľa neho nepripojí, a v závislosti od klienta môžete existujúce spojenie vytlačiť namiesto čistého zlyhania. Jeho heslo putuje týmto socketom v čistom texte, takže patrí na lokálnu adresu alebo unixový socket, nikdy na verejné rozhranie.
Keď socket nemôžete prevziať, stále máte možnosti, a všetky sú pomalšie. Najprv uvoľnite reláciu GUI, ak ju ovládate, alebo prijmite cestu cez vrstvu prihlasovacích údajov a počkajte na ďalšiu renegociáciu. Čo by ste nemali robiť, je reštartovať službu, aby ste sa zbavili jedného klienta, pretože to ukončí aj všetky ostatné relácie a zničí dôkazy zo súboru stavu pre túto reláciu.
Postup, ktorý spúšťam na živom serveri
Pripojte sa, prečítajte aktuálny stav, konajte podľa ID, ktoré ste práve prečítali, a potom ho prečítajte znova. Hodnoty skopírované z dokumentu sú najčastejším spôsobom, ako zabiť nesprávneho človeka.
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 goneMeno a číslo vyššie sú zástupné symboly a ID sa po odpojení iných klientov znova používajú. Predtým, než niečo zapíšete ako hotové, potvrďte, že riadok chýba, a skontrolujte, že počet pripojených klientov sa posunul o jeden, nie o niekoľko.
Potvrďte, že už sa nevrátil
Zapíšte common name, tunelovú adresu, vonkajšiu adresu a minútu odstránenia. Ak sa to isté common name o minútu objaví znova, akcia relácie fungovala a vrstva prihlasovacích údajov nie, čo je úplne iná oprava než pri príkaze, ktorý nikdy nezačal platiť.
Potom testujte zo strany klienta. Odvolaný certifikát by mal zlyhať pri ďalšom handshake; ak sa stále pripája, CRL sa vôbec nečíta, a to je zistenie, ktoré stojí za nahlásenie. Vyberte akciu podľa toho, čo potrebujete ukončiť, potvrďte druhým status a opravte vrstvu prihlasovacích údajov, keď odpoveď musí vydržať dlhšie ako relácia.