Yhden OpenVPN-asiakkaan tauottaminen: miksi peruutus on väärä vipu
Istunnon tappaminen on peruttavissa; varmenteen peruuttaminen ei ole. Päättäkää, minkä vivun tapaus tarvitsee, ja rakentakaa CRL uudelleen vain silloin kun se sopii.
Yhden asiakkaan pääsyn tauottaminen ja sen lopullinen poistaminen näyttävät samalta tehtävältä, kunnes yrittää perua toisen niistä. Varmenteen peruuttaminen kirjoittaa tietueen, jota palvelin pitää lopullisena, ja sen peruminen tarkoittaa myöntäjän tietokannan muokkaamista käsin. Käynnissä olevan tunnelin pudottaminen on hallintakomento, joka ei muuta luottamuksessa mitään. Valitse vipu kysymällä, onko avain yhä luotettava, älä kysymällä, kuinka kiireelliseltä pyyntö tuntuu.
Uskomus: peruutettu ja keskeytetty ovat sama asia
Urakoitsija pannaan viikoksi tauolle ja refleksi on peruuttaa, koska peruutus kuulostaa jonkin sammuttamiselta. Se näyttää siistiltä, kestää kymmenen sekuntia ja jättää tietokannan muokkauksen ainoaksi tieksi takaisin. Refleksi on ymmärrettävä ja se on lähempänä passin polttamista kuin oven sulkemista. Tauotettu laite ja vaarantunut avain tarvitsevat erilaista kohtelua, ja vain toinen niistä on halpa perua.
Ero koskee valtuustietoa, ei henkilöä. Avain, joka on yhä oikeissa käsissä, voidaan tauottaa ja jatkaa ilman minkäänlaista luottamuksen menetystä. Avainta, joka on saatettu kopioida, ei pitäisi koskaan palauttaa, koska palauttaminen väittää, ettei kopiota ole olemassa.
Kirjoita vastaus muistiin ennen kuin kosket kumpaakaan järjestelmään. Jos et osaa sanoa, onko avain paljastunut, konservatiivinen vastaus on vaihtaminen.
Pudota käynnissä oleva istunto hallintaliittymällä
OpenVPN tarjoaa hallintaliittymän, joka voi listata istuntoja ja tappaa yhden niistä yleisnimellä. Ota se käyttöön localhostissa, pidä se poissa julkisesta liittymästä ja lähetä tappokäsky, kun istunnon on kadottava heti. Käsky sulkee vain sen tunnelin, ja kaikki muut asiakkaat jatkavat toimintaansa.
Tämä on vastaus aktiiviseen ongelmaan, ei keskeytyskäytäntö. Sama profiili voi yhdistää uudelleen minuutissa, koska mikään sen valtuustiedossa ei muuttunut. Käytä sitä, kun istunnon on lähdettävä ja pysyvä päätös on vielä tekemättä.
Varmista, että istunto oli yhdistetty ennen kuin tapat sen, jotta et metsästä asiakasta, joka ei koskaan yhdistänyt. Alla oleva tilakäsky tulostaa, mikä on parhaillaan yhdistettynä.
printf 'status 2\nquit\n' | nc 127.0.0.1 7506
printf 'kill kiosk-14\nquit\n' | nc 127.0.0.1 7506Jos tappaminen ilmoittaa, ettei tällaista asiakasta ole, varmenteen yleisnimi ei ole se merkkijono, jonka kirjoitit. Lue tilaraportti profiilitiedoston nimen sijaan.
Mitä CRL oikeastaan ohjaa
Palvelin ei kysy varmenteelle tallennettua peruutuslippua. Se lukee crl-verifyssä nimetyn varmenteiden peruutuslistan jokaisella uudella yhteydellä ja hylkää varmenteen, jonka sarjanumero esiintyy listalla. Siitä seuraa kaksi asiaa, ja molemmat ovat toiminnallisesti tärkeitä. Tiedoston on oltava luettavissa siltä tililtä, jolle palvelin laskee oikeuksiaan, ja jo yhdistetty asiakas jatkaa toimintaansa, kunnes se yhdistää uudelleen.
Toinen seuraus yllättää ihmiset tapahtumien aikana. Varmenteen peruuttaminen ei sulje tunnelia, joka käyttää sitä juuri nyt. Yhdistä peruutus hallinnolliseen tappoon, jos istunnon on loputtava heti, ja käsittele molempia toimia erillisinä askelina ohjeessa.
Tarkastele listaa nähdäksesi, mitä palvelin tosiasiassa valvoo, sen sijaan että luottaisit viimeksi kopioimasi tiedoston aikaleimaan. Tärkeä osa on sarjanumeroiden määrä.
openssl crl -in /etc/openvpn/server/crl.pem -noout -text | sed -n '1,14p'
ls -l /etc/openvpn/server/crl.pemLista ilman merkintöjä ja lista oikeilla merkinnöillä näyttävät hakemistolistauksessa samanlaisilta, siksi sarjanumeroiden määrä kannattaa tulostaa. Oikeusrivillä on yhtä suuri merkitys, koska tiedosto, jota daemon ei voi lukea, tuottaa virheen, joka näyttää hylätyltä asiakkaalta.
Tietueen palauttaminen, varovasti
Varmenteen palauttaminen tarkoittaa tietueen kääntämistä myöntötietokannassa ja uuden listan julkaisemista. easy-rsa 3 pitää tätä tietokantaa index.txt:nä PKI-hakemistossa, kun taas vanhemmat asettelut käyttivät muuta järjestelyä. Rivi alkaa tilakirjaimella ja päättymispäivällä. Peruutettu rivi lisää peruutuksen aikaleiman ennen kuin jatkaa sarjanumerolla, varmenteen tiedostonimellä ja erottavalla nimellä. Rivin palauttaminen tarkoittaa aikaleiman poistamista ja kirjaimen kääntämistä, kun taas kaikki muu jätetään rauhaan.
Varmuuskopioi tiedosto ensin ja tee muutos skriptinä sen sijaan että kirjoittaisit tekstieditorissa. Kirjoitusvirhe, joka muuttaa rivin kenttien määrää, rikkoo myönnön jokaiselle myöhemmin lisätylle varmenteelle. Siksi muutos kannattaa automatisoida ja tiedosto kopioida ennen koskemista.
Saman nimen toinen peruutus epäonnistuu usein myös, koska ensimmäinen ajo siirsi varmenteen ja sen avaimen hakemistoista, joista työkalu odottaa löytävänsä ne. Silloin työkalu ei löydä sitä, mitä sen pyydettiin peruuttavan, eikä virheilmoitus aina kerro selvästi miksi.
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-crlJulkaise uusi lista, korjaa sen omistus ja saa palvelin lukemaan se. Uudelleenlataus riittää useimmissa asennuksissa, mutta vahvistuksen on tultava tuoreesta yhteydestä, koska olemassa oleva istunto ei tarkistanut mitään uudelleen.
Tarkista, minkä vivun tapaus ansaitsee
Esitä yksi kysymys, joka ratkaisee koko ohjeen: onko yksityinen avain yhä vain siellä, missä sen kuuluu olla. Jos on, istunnon tappo ja dokumentoitu tauko kattavat tapauksen eikä pysyvää tietuetta jää. Jos ei, ainoa turvallinen vastaus on uusi avain ja vanha varmenne jätetään peruutetuksi.
Tarkista sitten lopputulos yhteysyrityksellä, et konfiguraatioerolla. Ero kertoo, mitä aioit, ja yhteys kertoo, mitä palvelin valvoo.
openssl crl -in /etc/openvpn/server/crl.pem -noout -text | grep -c 'Serial Number'
printf 'status 2\nquit\n' | nc 127.0.0.1 7506Kun palautettu asiakas yhdistää ja näkyy tilaraportissa, tietueen muokkaus toimi. Kun peruutettu asiakas hylätään ja loki nimeää CRL:n, peruutus toimi. Kaikki siltä väliltä on oikeus- tai uudelleenlatausongelma, ja se kannattaa korjata ennen kuin seuraava pyyntö saapuu.