Паставіць на паузу аднаго кліента 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, адкліканне спрацавала. Усё паміж гэтым праблема правоў або перазагрузкі, і яе варта выправіць, перш чым прыйдзе наступны запыт.