Имате common name и адрес в бележките си и три команди, които всички изглеждат като премахване на клиент. Само една прави това, което искате, и изборът зависи от това дали трябва да прекратите сесията, която тече сега, да откажете следващото влизане или да отнемете правото да се свързвате изобщо. Прочетете идентичността, която наистина имате, преди да докоснете нещо, защото пулът на OpenVPN дава същия тунелен адрес на друга сесия по-късно.

Каква идентичност всъщност имате

Файлът за състоянието от версия 3 е обичайната отправна точка. Секцията CLIENT_LIST носи common name, реалния адрес, броячи на байтове и време на свързване; секцията ROUTING TABLE съпоставя виртуален адрес на common name с времева марка на последната референция. Common name е стабилната идентичност. Виртуалният адрес е назначение, а реалният адрес зад NAT може да се промени между сесиите, без нищо на сървъра да се промени.

Интерфейсът за управление показва подобен изглед чрез командата status и добавя ID на клиента за всяка сесия. Точно този ID очаква client-kill и той не е тунелният адрес. Ако трябва да знаете кой common name е получил кой адрес при свързването, средата на скрипт client-connect има и двете, заедно с доверения външен адрес, но този скрипт се изпълнява като потребител на OpenVPN и се нуждае от записваем път за журнал.

What you holdWhere it came fromWhat it can act on
Common nameCLIENT_LIST, or the auth hookkill, and credential revocation
Client IDstatus on the management socketclient-kill, that one session
Tunnel addressROUTING TABLE, client-connect environmentNothing durable, the address is recycled

Убий сега, откажи при влизане, отнеми завинаги

И двете команди за премахване в интерфейса за управление са действия на сесията. kill приема common name или реален адрес и порт; client-kill приема ID на клиента и прекратява тази инстанция веднага. Нито една не е блокировка: изгонен клиент с валиден сертификат и парола се свързва отново за секунди, което е добре, когато рециклирате тестов peer, и е безполезно, когато е откраднат лаптоп.

client-deny е друг вид решение. Обикновено се издава от кука за удостоверяване или client-connect и отхвърля сесията с причина, затова пасва на политика, която отказва влизане, а не на такава, която прекъсва връзка. Документацията също предупреждава, че отказ, издаден по време на TLS преговаряне, обезсилва преговорения ключ, докато съществуващата сесия може да работи до затварянето на преходния прозорец. Ако изискването е клиентът да го няма сега, документираният отговор е client-kill.

Трайното премахване е под всичко това. Отнемете сертификата и се уверете, че crl-verify сочи към списък, който сървърът наистина презарежда, деактивирайте конфигурационния файл, специфичен за клиента, в директорията ccd или деактивирайте акаунта в онзи backend, който куката за удостоверяване пита. И отнемането не е мигновено: с настройките по подразбиране на reneg-sec установена сесия може да продължи, докато не преговаря отново, така че действието върху сесията и действието върху идентификационните данни се допълват, а не са алтернативи.

Свободен ли е сокетът за управление?

Интерфейсът за управление обслужва един клиент наведнъж. Ако GUI или демон за наблюдение вече държи връзката, вашият скрипт не може да се прикачи до нея и в зависимост от клиента може да изтласкате съществуващия, вместо да се провалите чисто. Паролата му пътува в открит текст по този сокет, затова мястото ѝ е на локален адрес или unix сокет, никога на публичен интерфейс.

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

Последователността, която изпълнявам на работещ сървър

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

status                     # note the client ID and common name
client-kill 3              # end that session now
kill Test-Client           # alternative: by common name
status                     # confirm the session is gone

Името и номерът по-горе са заместители, а ID се използват повторно, след като други клиенти се разкачат. Потвърдете, че редът липсва, преди да запишете нещо като готово, и проверете, че броят на свързаните клиенти се е преместил с един, а не с няколко.

Потвърдете, че е останал навън

Запишете common name, тунелния адрес, външния адрес и минутата на премахването. Ако същият common name се появи отново минута по-късно, действието върху сесията е проработило, а слоят с идентификационни данни не, което е съвсем различен ремонт от този на команда, която така и не е влязла в сила.

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

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