Адзін радок у дакуменце з патрабаваннямі — «гэтая праграма можа выкарыстоўваць VPN, і нічога іншага» — ціха патрабуе двух механізмаў, якіх не дае ніводзін перамыкач. Трафіку патрэбен шлях праз патрэбны тунель, а трафік, які пайшоў бы наўпрост, павінен быць адхілены. Інструменты, якія добра робяць адно з гэтага і зусім не робяць другое, сустракаюцца часта, таму параўнанне, якое пытае толькі, ці можа нешта блакаваць, упэўнена адказвае на палову пытання. Спачатку запішыце мяжу, а потым выберыце кампаненты, якія пакрываюць абедзве яе паловы.

Два патрабаванні, схаваныя ў адным сказе

Кіраванне — гэта частка, якая змяшчае злучэнне ў тунель або праксі. Адмова — гэта частка, якая не дае таму ж злучэнню выйсці любым іншым маршрутам. Іх рэалізуюць розныя кампаненты, яны збаўляюць па-рознаму, і прадукт можа быць выдатным у адным і нічога не казаць пра другое:

ApproachSteers trafficRefuses direct egressKnows the app identity
Per-app VPN profileYes, for the apps it namesOnly if a filter or firewall also blocksYes, within its own rules
Application proxy settingPartly, for requests that honour itNoNo
Content filterNoYesYes, if the filter is written that way
Local PF rulesetNoYes, by address and portNot reliably

Чытайце табліцу як кантрольны спіс, а не як рэйтынг. Ніводзін радок не запаўняе абодва сярэднія слупкі, а радкі, якія іх пакрываюць, — гэта два кампаненты, што супрацоўнічаюць: адзін валодае шляхам, другі — адмовай. Слупок ідэнтычнасці важны з іншай прычыны, бо правіла, якое не можа назваць праграму, не можа выканаць правіла пра гэтую праграму. Што б вы ні разгортвалі, яно павінна адказваць на ўсе тры, інакш мяжа ў дакуменце з патрабаваннямі — не мяжа на машыне.

Адно кіраванне пакідае выхад

Налада праксі для праграмы — самы ясны прыклад кіравання без адмовы. Яна можа накіроўваць запыты праграмы, якая паважае сістэмнае праксі, і не пакрывае нічога іншага: дапаможны працэс, абнаўляльнік, фонавая служба або іншы пратакол могуць ісці сваім шляхам, нават не чытаючы гэтую наладу. Таму выбар канчатковага пункта SOCKS у адной панэлі не стварае палітыкі забароны прамога выхаду для праграмы. Калі патрабаванне датычыцца праграмы ў цэлым, спытайце, якія кампаненты правіла сапраўды вызначае.

Профіль VPN для асобнай праграмы кіруе лепш за праксі, бо платформа вырашае, якія праграмы ўваходзяць у тунель замест таго, каб кожная праграма вырашала сама. І ўсё ж ён нічога не адхіляе: профіль дае шлях, а трафік, які не адпавядае яму, ідзе звычайным маршрутам. Менавіта гэтая прага — месца, дзе другі кампанент апраўдвае сябе, і менавіта таму прадукты, што выглядаюць як адзін перамыкач, звычайна ёсць два.

Адна адмова ламае праграму

Дакументацыя Apple пра фільтры змесціва апісвае рашэнне «дазволіць або заблакаваць» для трафіку, калі ён праходзіць праз сеткавы стек. Гэта рашэнне не тунель і не праксі-злучэнне, бо яно вырашае, ці можа нешта працягвацца, а не куды яно ідзе. Фільтр сам па сабе ідэальна выконвае адмову і пакідае праграму непрыдатнай, з чыстымі журналамі і без тлумачэння. Рашэнне фільтра можа спыніць злучэнне, але ніколі не дае тунель, таму спалучэнне яго з кіраваннем — гэта рашэнне праекта, а не дадатковая опцыя.

Лакальна кіраваны набор правілаў PF стаіць на іншым канцы гэтага спектра. Гэта законнае рашэнне падтрымкі на машыне, якой валодае адміністратар, і яно не аўтаматычна аснова прадукту, які можна распаўсюджваць, бо той, хто валодае наборам правілаў, валодае таксама яго ўзаемадзеяннем з іншымі карыстальнікамі файрвола, шляхам абнаўлення і аднаўленнем, калі правіла памылковае. Даданне PF у прадукт не здымае гэтае пытанне ўласнасці; яно яго вызначае.

Разгортванне вырашае, ці будзе правіла існаваць заўтра

Тое, як Network Extension разгортваецца на платформах Apple, залежыць ад тыпу пастаўшчыка, упакоўкі і версіі АС перад вамі. Пашырэнне праграмы на macOS працуе ў кантэксце карыстальніка і сканчаецца, калі гэты карыстальнік выходзіць, а сістэмнае пашырэнне мае глабальны кантэкст, які не залежыць ад сеансу. Калі абарона павінна перажыць выхад, гэтая розніца — увесь дызайн, а не зноска. Пацвердзіце шлях разгортвання, перш чым абяцаць паводзіны, бо той жа код лажыцца па-рознаму ў залежнасці ад тыпу пашырэння.

Даступнасць крыніцы — асобнае пытанне ад выканання. Чытанне сховішча кажа, як нешта рэалізавана, а не што ўсталяваны бінарны файл мае права рабіць на гэтай машыне. Подпіс, усталяванне і аўтарызацыя па-ранейшаму дзейнічаюць, а інструкцыі вакол састарэлага пашырэння ядра або трук з ін’екцыяй бібліятэкі апісваюць іншую платформу і іншую моц рызыкі, як бы добра яны ні працавалі.

Прыклад прыёмкі, які называе праграму

Выберыце адно дзеянне, якое праграма выконвае сама, адзначце адрас, якога яна павінна дасягнуць, і ці гэты адрас IPv4 або IPv6, затым паўтарыце тое ж дзеянне ў зацверджаным стане без тунеля. Другі запуск павінен даць абвешчаную адмову, а не ціхую прамую спробу. Гэта тая палова, якую людзі пакідаюць неазначанай, і адзіная палова, якая даказвае, што адмова ўвогуле існуе. Спачатку выканайце яго пры даступным тунелі, каб розніца паміж двума вынікамі магла ўзнікнуць толькі з-за адсутнага тунеля.

Затым прайдзіце пераходы, названыя ў патрабаванні: перазапуск праграмы, запуск дапаможнага працэсу, перападключэнне тунеля, змена сетак машынай і выхад або перазагрузка там, дзе гэта дастасавальна. Старонка публічнага IP у браўзеры не з’яўляецца тэстам сокетаў іншай праграмы, таму яна не можа замяніць гэты. Там, дзе ніводнае падтрыманае разгортванне не пакрывае рэальных паводзін праграмы, аўтарызаванае ізаляванае асяроддзе з яўным шлюзам і без альтэрнатыўнага выхаду — гэта рашэнне аб стрыманні з уласнымі выдаткамі на кіраванне, а не замена сцяжка ў наладах.

Завяршыце, запісаўшы чатыры пункты: з якіх кампанентаў складаецца праграма, хто валодае кіраваннем, хто валодае адмовай і ў якіх станах правіла павінна яшчэ дзейнічаць. Публічнае сховішча можа быць адным крытэрыем выбару, але ён не адзін з чатырох, і менавіта гэтыя пункты вырашаюць, ці адпавядае дадзены інструмент патрабаванню да сеткі.

Падобныя артыкулы