Pozastaviť jedného klienta OpenVPN: prečo je odvolanie nesprávna páka
Zabiť reláciu je vratné; odvolať certifikát nie. Rozhodnite, ktorú páku prípad potrebuje, a CRL znovu zostavte len vtedy, keď to sedí.
Pozastavenie prístupu jedného klienta a jeho trvalé odstránenie vyzerajú ako rovnaká úloha, kým sa nepokusíte jeden z nich vrátiť. Odvolanie certifikátu zapíše záznam, ktorý server považuje za konečný, a jeho zvrátenie znamená ručnú úpravu databázy vydavateľa. Zhodenie živej tunelovej relácie je príkaz správy, ktorý na dôvere nič nemení. Páku vyberajte podľa toho, či je kľúč stále dôveryhodný, nie podľa toho, ako naliehavo žiadosť pôsobí.
Presvedčenie: odvolaný a pozastavený je to isté
Dodávateľovi sa pozastaví prístup na týždeň a reflexom je odvolať, pretože odvolanie znie ako vypnutie niečoho. Vyzerá to upratane, trvá to desať sekúnd a ako jedinú cestu späť necháva úpravu databázy. Reflex je pochopiteľný a má bližšie k spáleniu pasu než k zatvoreniu dverí. Pozastavené zariadenie a kompromitovaný kľúč potrebujú iné zaobchádzanie a iba jedno z toho sa dá lacno vrátiť.
Rozdiel je v poverení, nie v človeku. Kľúč, ktorý je stále v správnych rukách, možno pozastaviť a obnoviť bez akejkoľvek straty dôvery. Kľúč, ktorý mohol byť skopírovaný, by sa nemal nikdy obnoviť, pretože obnovenie tvrdí, že kópia neexistuje.
Odpoveď zapíšte skôr, než sa dotknete ktoréhokoľvek zo systémov. Ak neviete povedať, či je kľúč vystavený, konzervatívna odpoveď je výmena.
Zhoďte živú reláciu pomocou rozhrania na správu
OpenVPN ponúka rozhranie na správu, ktoré vie vypísať relácie a jednu z nich zabiť podľa spoločného mena. Zapnite ho na localhost, držte ho ďalej od verejného rozhrania a pošlite príkaz na zabitie, keď má relácia zmiznúť hneď. Príkaz zavrie len ten tunel a každý ďalší klient funguje ďalej.
Toto je reakcia na aktívny problém, nie politika pozastavovania. Ten istý profil sa môže do minúty znova pripojiť, pretože na jeho poverení sa nič nezmenilo. Použite ho, keď relácia musí zmiznúť a trvalé rozhodnutie sa ešte prijíma.
Potvrďte, že relácia bola pripojená, než ju zabijete, aby ste nelovili klienta, ktorý sa nikdy nepripojil. Príkaz na stav nižšie vypíše, čo je práve pripojené.
printf 'status 2\nquit\n' | nc 127.0.0.1 7506
printf 'kill kiosk-14\nquit\n' | nc 127.0.0.1 7506Ak zabitie ohlási, že taký klient neexistuje, spoločné meno v certifikáte nie je reťazec, ktorý ste napísali. Čítajte výstup stavu, nie názov súboru profilu.
Čo CRL skutočne riadi
Server neskúma príznak odvolania uložený v certifikáte. Číta zoznam odvolaných certifikátov pomenovaný v crl-verify pri každom novom pripojení a odmieta certifikát, ktorého sériové číslo je v tomto zozname. Vyplývajú z toho dva dôsledky a oba sú prevádzkovo dôležité. Súbor musí byť čitateľný pre účet, na ktorý server znižuje oprávnenia, a už pripojený klient beží ďalej, kým sa znova nepripojí.
Druhý dôsledok ľudí pri incidentoch prekvapí. Odvolanie certifikátu nezavrie tunel, ktorý ho práve používa. Ak relácia musí skončiť okamžite, spojte odvolanie so zabitím cez správu a obe akcie berte ako samostatné kroky v postupe.
Prezrite si zoznam, aby ste videli, čo server skutočne vynúti, namiesto toho, aby ste verili časovej pečiatke posledného skopírovaného súboru. Dôležitá je časť s počtom sériových čísel.
openssl crl -in /etc/openvpn/server/crl.pem -noout -text | sed -n '1,14p'
ls -l /etc/openvpn/server/crl.pemZoznam bez položiek a zoznam so správnymi položkami vyzerajú vo výpise adresára rovnako, preto sa počet sériových čísel oplatí vypísať. Riadok s oprávneniami je rovnako dôležitý, pretože súbor, ktorý démon neprečíta, vyvolá zlyhanie, ktoré vyzerá ako odmietnutý klient.
Obnovenie záznamu, opatrne
Obnoviť certifikát znamená obrátiť záznam v databáze vydávania a publikovať nový zoznam. easy-rsa 3 drží tú databázu ako index.txt v adresári PKI, zatiaľ čo staršie usporiadania používali iné riešenie. Riadok začína písmenom stavu a dátumom expirácie. Odvolaný riadok vkladá časovú pečiatku odvolania, než pokračuje sériovým číslom, názvom súboru certifikátu a rozlišujúcim menom. Vrátiť riadok na miesto znamená tú pečiatku zmazať a písmeno obrátiť, zatiaľ čo všetko ostatné zostane nedotknuté.
Najprv súbor zálohujte a úpravu urobte skriptom, namiesto písania v textovom editore. Preklep, ktorý zmení počet polí v riadku, pokazí vydávanie každého certifikátu pridaného potom. Preto sa zmena oplatí automatizovať a súbor pred dotykom skopírovať.
Druhé odvolanie rovnakého mena často tiež zlyhá, pretože prvý beh presunul ten certifikát a jeho kľúč z adresárov, kde ich nástroj očakáva. Nástroj potom nenájde to, čo mal odvolať, a chybová správa nie vždy jasne povie prečo.
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ý zoznam, opravte jeho vlastníctvo a prinúťte server, aby ho prečítal. Na väčšine inštalácií stačí znova načítať, ale potvrdenie musí prísť z nového pripojenia, pretože existujúca relácia nič znova neoverovala.
Skontrolujte, ktorú páku si prípad zaslúži
Položte jednu otázku, ktorá rozhodne celý postup: je súkromný kľúč stále len tam, kde má byť. Ak áno, zabitie relácie plus zdokumentované pozastavenie prípad pokryje a nezanechá trvalý záznam. Ak nie, jediná bezpečná odpoveď je nový kľúč a starý certifikát zostane odvolaný.
Výsledok potom overte pokusom o pripojenie, nie rozdielom v konfigurácii. Rozdiel vám povie, čo ste zamýšľali, a pripojenie vám povie, čo 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 7506Keď sa obnovený klient pripojí a objaví sa vo výstupe stavu, úprava záznamu zabrala. Keď je odvolaný klient odmietnutý a log vymenuje CRL, odvolanie zabralo. Čokoľvek medzi tým je problém oprávnení alebo znova načítania a oplatí sa to opraviť pred príchodom ďalšej žiadosti.