Спирането на достъпа на един клиент и премахването му завинаги изглеждат като една и съща задача, докато не опитате да отмените едното от двете. Отнемането на сертификат записва запис, който сървърът приема за окончателен, а обръщането му означава ръчна редакция на базата данни на издателя. Изхвърлянето на живия тунел е команда за управление, която не променя нищо в доверието. Изберете лоста, като питате дали ключът все още заслужава доверие, а не като питате колко спешна изглежда заявката.

Вярването: отнет и спрян са едно и също

Изпълнител се спира за седмица и рефлексът е да се отнеме, защото отнемането звучи като изключване на нещо. Изглежда подредено, отнема десет секунди и оставя редакция на базата данни като единствения път назад. Рефлексът е разбираем и е по-близо до изгаряне на паспорт, отколкото до затваряне на врата. Спряното устройство и компрометираният ключ изискват различно отношение и само едното от тях е евтино за обръщане.

Разликата е в удостоверението, а не в човека. Ключ, който все още е в правилните ръце, може да бъде спрян и възстановен без загуба на доверие. Ключ, който може да е бил копиран, никога не бива да се възстановява, защото възстановяването твърди, че копието не съществува.

Запишете отговора, преди да докоснете която и да е от двете системи. Ако не можете да кажете дали ключът е разкрит, консервативният отговор е подмяна.

Изхвърлете живата сесия с интерфейса за управление

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, отнемането е проработило. Всичко между тях е проблем с права или презареждане и си струва да се поправи, преди да пристигне следващата заявка.

Подобни статии