Выгнанне аднаго кліента OpenVPN: kill, deny ці адкліканне сертыфіката?
Тры дзеянні OpenVPN выдаляюць кліента, але кожнае завяршае нешта іншае: жывую сесію, адну спробу ўваходу або права падключыцца зноў. Выбірайце па ідэнтычнасці.
У нататках у вас ёсць 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 hold | Where it came from | What it can act on |
|---|---|---|
| Common name | CLIENT_LIST, or the auth hook | kill, and credential revocation |
| Client ID | status on the management socket | client-kill, that one session |
| Tunnel address | ROUTING TABLE, client-connect environment | Nothing 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 і выпраўце пласт уліковых даных, калі адказ мусіць трымацца даўжэй за сесію.