Pozastavit jednoho klienta OpenVPN: proč je odvolání špatná páka
Zabití relace je vratné; odvolání certifikátu ne. Rozhodněte, kterou páku případ potřebuje, a CRL znovu sestavte jen tehdy, když to sedí.
Pozastavení přístupu jednoho klienta a jeho trvalé odstranění vypadají jako stejný úkol, dokud se nepokusíte jeden z nich vrátit. Odvolání certifikátu zapíše záznam, který server považuje za konečný, a jeho zvrácení znamená ruční úpravu databáze vydavatele. Shození živého tunelu je příkaz správy, který na důvěře nic nemění. Páku vybírejte podle toho, zda je klíč stále důvěryhodný, ne podle toho, jak naléhavě žádost působí.
Přesvědčení: odvolaný a pozastavený je totéž
Dodavateli se pozastaví přístup na týden a reflexem je odvolat, protože odvolání zní jako vypnutí něčeho. Vypadá to uklizeně, trvá to deset sekund a jako jedinou cestu zpět nechává úpravu databáze. Reflex je pochopitelný a má blíž ke spálení pasu než k zavření dveří. Pozastavené zařízení a kompromitovaný klíč potřebují jiné zacházení a jen jedno z toho jde levně vrátit.
Rozdíl je v pověření, ne v člověku. Klíč, který je stále ve správných rukou, lze pozastavit a obnovit bez jakékoli ztráty důvěry. Klíč, který mohl být zkopírován, by se neměl nikdy obnovovat, protože obnovení tvrdí, že kopie neexistuje.
Odpověď zapište dřív, než se dotknete kteréhokoli ze systémů. Pokud neumíte říct, zda je klíč vystaven, konzervativní odpověď je výměna.
Shoďte živou relaci pomocí rozhraní pro správu
OpenVPN nabízí rozhraní pro správu, které umí vypsat relace a jednu z nich zabít podle společného jména. Zapněte ho na localhost, držte ho dál od veřejného rozhraní a pošlete příkaz k zabití, když má relace zmizet hned. Příkaz zavře jen ten tunel a každý další klient dál funguje.
Tohle je reakce na aktivní problém, ne politika pozastavování. Stejný profil se může do minuty znovu připojit, protože na jeho pověření se nic nezměnilo. Použijte to, když relace musí zmizet a trvalé rozhodnutí se ještě dělá.
Potvrďte, že relace byla připojená, než ji zabijete, abyste nelovili klienta, který se nikdy nepřipojil. Příkaz pro stav níže vypíše, co je právě připojené.
printf 'status 2\nquit\n' | nc 127.0.0.1 7506
printf 'kill kiosk-14\nquit\n' | nc 127.0.0.1 7506Pokud zabití ohlásí, že takový klient neexistuje, společné jméno v certifikátu není řetězec, který jste napsali. Čtěte výstup stavu, ne název souboru profilu.
Co CRL skutečně řídí
Server nezkoumá příznak odvolání uložený v certifikátu. Čte seznam odvolaných certifikátů pojmenovaný v crl-verify při každém novém připojení a odmítá certifikát, jehož sériové číslo je v tomto seznamu. Plynou z toho dva důsledky a oba jsou provozně důležité. Soubor musí být čitelný pro účet, na který server snižuje oprávnění, a už připojený klient běží dál, dokud se znovu nepřipojí.
Druhý důsledek lidi při incidentech překvapuje. Odvolání certifikátu nezavře tunel, který ho právě používá. Pokud relace musí skončit okamžitě, spojte odvolání se zabitím přes správu a berte obě akce jako samostatné kroky v postupu.
Prohlédněte si seznam, abyste viděli, co server skutečně vynutí, místo abyste věřili časovému razítku posledního zkopírovaného souboru. Důležitá je část s počtem sériových čísel.
openssl crl -in /etc/openvpn/server/crl.pem -noout -text | sed -n '1,14p'
ls -l /etc/openvpn/server/crl.pemSeznam bez položek a seznam se správnými položkami vypadají ve výpisu adresáře stejně, proto se počet sériových čísel vyplatí vypsat. Řádek s oprávněními je stejně důležitý, protože soubor, který démon nepřečte, vyvolá selhání, jež vypadá jako odmítnutý klient.
Obnovení záznamu, opatrně
Obnovit certifikát znamená obrátit záznam v databázi vydávání a publikovat nový seznam. easy-rsa 3 drží tuto databázi jako index.txt v adresáři PKI, zatímco starší uspořádání používala jiné řešení. Řádek začíná písmenem stavu a datem expirace. Odvolaný řádek vkládá časové razítko odvolání, než pokračuje sériovým číslem, názvem souboru certifikátu a rozlišujícím jménem. Vrátit řádek na místo znamená to razítko smazat a písmeno obrátit, zatímco vše ostatní zůstane nedotčené.
Nejdřív soubor zálohujte a úpravu udělejte skriptem, místo abyste psali v textovém editoru. Překlep, který změní počet polí v řádku, rozbije vydávání každého certifikátu přidaného potom. Proto se změna vyplatí automatizovat a soubor před dotykem zkopírovat.
Druhé odvolání stejného jména často také selže, protože první běh přesunul ten certifikát a jeho klíč z adresářů, kde je nástroj očekává. Nástroj pak nenajde to, co měl odvolat, a chybová zpráva ne vždy jasně řekne proč.
cp /etc/easy-rsa/pki/index.txt /root/index.txt.$(date +%F-%H%M)
grep -c '^R' /etc/easy-rsa/pki/index.txt
easyrsa gen-crlPublikujte nový seznam, opravte jeho vlastnictví a přimějte server, aby ho přečetl. Na většině instalací stačí znovu načíst, ale potvrzení musí přijít z nového připojení, protože stávající relace nic znovu neověřovala.
Zkontrolujte, kterou páku si případ zaslouží
Položte jednu otázku, která rozhodne celý postup: je soukromý klíč stále jen tam, kde má být. Pokud ano, zabití relace plus zdokumentované pozastavení případ pokryje a nezanechá trvalý záznam. Pokud ne, jediná bezpečná odpověď je nový klíč a starý certifikát zůstane odvolaný.
Výsledek pak ověřte pokusem o připojení, ne rozdílem v konfiguraci. Rozdíl vám řekne, co jste zamýšleli, a připojení vám řekne, co server vynucuje.
openssl crl -in /etc/openvpn/server/crl.pem -noout -text | grep -c 'Serial Number'
printf 'status 2\nquit\n' | nc 127.0.0.1 7506Když se obnovený klient připojí a objeví ve výstupu stavu, úprava záznamu zabrala. Když je odvolaný klient odmítnut a log jmenuje CRL, odvolání zabralo. Cokoli mezi tím je problém oprávnění nebo znovunačtení a vyplatí se to opravit dřív, než dorazí další žádost.