Паузирање једног OpenVPN клијента: зашто је опозив погрешна полуга
Убијање сесије је повратно; опозив сертификата није. Одлучите која је полуга потребна случају, и поново изградите CRL само када одговара.
Паузирање приступа једног клијента и његово трајно уклањање изгледају као исти задатак све док не покушате да поништите једно од тога. Опозив сертификата уписује запис који сервер третира као коначан, а његово поништавање значи ручно уређивање базе издаваоца. Одбацивање живог тунела је управљачка наредба која ништа не мења у поверењу. Изаберите полугу питајући да ли је кључ још увек поуздан, а не питајући колико захтев делује хитно.
Уверење: опозван и суспендован су исто
Извођач се паузира на недељу дана и рефлекс је опозив, јер опозив звучи као искључивање нечега. Изгледа уредно, траје десет секунди и оставља уређивање базе као једини пут назад. Рефлекс је разумљив и ближи је спаљивању пасоша него затварању врата. Паузиран уређај и компромитован кључ траже другачији третман, и само је једно од тога јефтино поништити.
Разлика је у акредитиву, а не у особи. Кључ који је још у правим рукама може се паузирати и наставити без икаквог губитка поверења. Кључ који је можда копиран не треба никада враћати, јер враћање тврди да копија не постоји.
Запишите одговор пре него што дотакнете било који од два система. Ако не можете да кажете да ли је кључ изложен, конзервативан одговор је замена.
Одбаците живу сесију помоћу управљачког интерфејса
OpenVPN нуди управљачки интерфејс који може да излиста сесије и убије једну од њих по заједничком имену. Омогућите га на localhost, држите га даље од јавног интерфејса и пошаљите наредбу за убијање када сесија мора да нестане одмах. Наредба затвара само тај тунел, и сваки други клијент наставља да ради.
Ово је одговор на активан проблем, а не политика суспензије. Исти профил може поново да се повеже за минут, јер се ништа у његовом акредитиву није променило. Користите га када сесија мора да нестане, а трајна одлука се тек доноси.
Потврдите да је сесија била повезана пре него што је убијете, да не ловите клијента који се никада није повезао. Наредба за статус испод исписује шта је тренутно повезано.
printf 'status 2\nquit\n' | nc 127.0.0.1 7506
printf 'kill kiosk-14\nquit\n' | nc 127.0.0.1 7506Ако убијање пријави да такав клијент не постоји, заједничко име у сертификату није онај низ који сте откуцали. Читајте излаз статуса, а не назив датотеке профила.
Шта CRL заправо контролише
Сервер не консултује ознаку опозива сачувану у сертификату. Он чита листу опозваних сертификата наведену у crl-verify, при свакој новој вези, и одбија сертификат чији се серијски број појављује на тој листи. Из тога следе две последице, а обе су оперативно важне. Датотека мора бити читљива рачуну на који сервер спушта привилегије, а већ повезан клијент наставља да ради док се поново не повеже.
Та друга последица изненађује људе током инцидената. Опозив сертификата не затвара тунел који га тренутно користи. Упарите опозив са управљачким убијањем ако сесија мора да се заврши одмах, и третирајте те две радње као одвојене кораке у процедури.
Прегледајте листу да видите шта ће сервер заиста да спроведе, уместо да верујете временској ознаци последње датотеке коју сте копирали. Број серијских бројева је део који је важан.
openssl crl -in /etc/openvpn/server/crl.pem -noout -text | sed -n '1,14p'
ls -l /etc/openvpn/server/crl.pemЛиста без уноса и листа са правим уносима изгледају идентично у испису директоријума, зато је број серијских бројева вредан исписа. Ред са дозволама је једнако важан, јер датотека коју демон не може да прочита производи квар који изгледа као одбијен клијент.
Враћање записа, пажљиво
Вратити сертификат значи преокренути запис у бази издавања и објавити нову листу. easy-rsa 3 држи ту базу као index.txt у PKI директоријуму, док су старији распореди користили други поредак. Ред почиње словом статуса и датумом истека. Опозван ред убацује временску ознаку опозива пре него што настави са серијским бројем, називом датотеке сертификата и разликовним именом. Вратити ред на место значи избрисати ту временску ознаку и преокренути слово, а све остало оставити на миру.
Прво направите копију датотеке, а измену изведите скриптом уместо куцањем у уређивачу текста. Грешка у куцању која промени број поља у реду квари издавање за сваки сертификат додат после. Зато промену треба аутоматизовати и копирати датотеку пре него што је дотакнете.
Други опозив истог имена често такође не успева, јер је прво покретање преместило тај сертификат и његов кључ из директоријума у којима алат очекује да их нађе. Алат тада не може да пронађе оно што је замљено да опозове, а порука о грешци није увек јасна о разлогу.
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-crlОбјавите нову листу, поправите њено власништво и натерајте сервер да је прочита. Поновно учитавање је довољно на већини инсталација, али потврда мора да дође са свеже везе, јер постојећа сесија никада ништа није поново проверила.
Проверите коју полугу случај заслужује
Поставите једно питање које одлучује целу процедуру: да ли је приватни кључ још увек само тамо где треба да буде. Ако јесте, убијање сесије плус документована пауза покривају случај и не остављају трајан запис. Ако није, једини сигуран одговор је нови кључ, а стари сертификат остаје опозван.
Затим проверите исход покушајем повезивања, а не разликом у конфигурацији. Разлика вам каже шта сте намеравали, а веза вам каже шта сервер спроводи.
openssl crl -in /etc/openvpn/server/crl.pem -noout -text | grep -c 'Serial Number'
printf 'status 2\nquit\n' | nc 127.0.0.1 7506Када се враћени клијент повеже и појави у излазу статуса, измена записа је успела. Када опозвани клијент буде одбијен и дневник наведе CRL, опозив је успео. Све између је проблем са дозволама или поновним учитавањем, и вреди га поправити пре него што стигне следећи захтев.