Хук падлучэння — гэта палітыка сеансу, а не фільтр пакетаў
Хук client-connect спрацоўвае адзін раз за сеанс і ніколі не бачыць карысную нагрузку. Дапушчэнне — там, дзе ёсць сеансы, а змена змесціва — там, дзе ёсць запыты.
Нехта хоча паглядзець, што кліенты перадаюць праз тунель, знаходзіць у дакументацыі хук падлучэння і пачынае пісаць скрыпт, які ніколі не атрымае ніводнага пакета. Хук сапраўдны і карысны, але адзінка яго працы — сеанс, а не байт. Выбар правільнага кампанента — гэта параўнанне трох месцаў, дзе можа адбывацца праца, і вырашальнае пытанне ў тым, якую адзінку кожнае з іх насамрэч бачыць.
Што хук атрымлівае і чаго ён не атрымлівае ніколі
Хук client-connect запускаецца адзін раз, калі аўтэнтыфікаваны кліент усталёўвае сеанс, у кантэксце працэсу сервера, з дакументаванымі аргументамі і значэннямі асяроддзя, такімі як агульнае імя і прызначаны адрас. Ён можа запісаць канфігурацыю для кліента, прыняць рашэнне аб допуску, выдзеліць знешні рэсурс або зафіксаваць, што злучэнне адбылося. Чаго ён не можа — назіраць за трафікам, бо да таго моманту, як першы пакет перасякае тунель, хук ужо вярнуўся.
Гэта не абмежаванне, якое трэба абыходзіць. Сеансавы зваротны выклік, які спрабаваў бы апрацоўваць плынь, мусіў бы працаваць увесь час існавання злучэння, а кантракт сцэнарыяў дэмана не разлічаны на такую форму. Спытайцеся, для чаго патрэбны хук, перш чым вырашыць, што ён вам перашкаджае.
Перападключэнні таксама важныя. Кліент, які адваліўся і падключыўся зноў, — гэта новы сеанс, таму ўсё, што выдзяляе хук, павінна быць ідэмпатэнтным або спалучаным з падзеяй адключэння, якая прыбірае за сабой. Стан, які церушыць пры кожным перападключэнні, — звычайная першая памылка ў дызайне на аснове хука.
Палітыка сеансу належыць хуку
Допуск — натуральная праца хука. Вы ведаеце, хто падключыўся, адкуль і з якім сертыфікатам, і можаце вырашыць, ці працягваць гэты сеанс, ці адмовіць. Гэтае рашэнне таннае, прымаецца адзін раз і не патрабуе позірку на байт нагрузкі.
Прызначэнне канфігурацыі мае тую ж форму. Хук можа выбраць адрас кліента, выдаць параметры, якія адпавядаюць гэтай асобе, або запісаць фрагмент, які сервер чытае для гэтага кліента. Паколькі рашэнне за сеанс, яно застаецца зразумелым, калі нешта ідзе не так і нехта мусіць патлумачыць, чаму пэўны кліент атрымаў пэўны адрас.
Запіс — трэцяя адпаведнасць. Запіс аўдыту, які сведчыць, што сеанс быў дапушчаны, з яго асобай і часам, належыць менавіта сюды. Гэта не журнал трафіку і не павінен ім прыкідвацца. Калі потым нехта спытае, што кліент рабіў унутры тунеля, адказ мусіць прыйсці з іншага месца.
Праца з пакетамі належыць шляху пакетаў
Калі патрабаванне — бачыць або змяняць байты ў руху, кампанент мусіць быць у шляху перасылання: правіла файрвола з чаргой, хук кіравання трафікам або перасыльнік у прасторы карыстальніка. Гэтыя механізмы бачаць пакеты і маюць уласны стан, уласныя рэжымы адмовы і ўласны профіль прадукцыйнасці.
Рэдагаваць нагрузку на гэтым узроўні складаней, чым чытаць яе. Змена байта можа зрабіць несапраўдным поле даўжыні, кантрольную суму або машыну станаў пратакола, і тунель трэцяга ўзроўню ад гэтага не бароніць. Ён толькі значыць, што вы праўдзіце не знешнія загалоўкі. Прадугледзьце гэтую рамонтную працу, перш чым абяцаць камусьці перапісванне змесціва.
Перахоп на інтэрфейсе — самы танны інструмент гэтай катэгорыі, і гэта назіранне, а не рэдактар. Людзі блытаюць адно з другім, бо абое апісваюцца як бачанне трафіку, але перахоп дае файл, а шлях пакетаў дае рашэнне.
Змены праграмы належаць праграме
Калі мэта — змяніць тое, што змяшчае запыт, або як фармуецца адказ, правільнае месца — сам сэрвіс або проксі, які наўмысна завяршае пратакол. Гэтыя кампаненты ўжо разумеюць запыты, адказы і аўтэнтыфікацыю, якую чакае праграма, і гэта менавіта той кантэкст, якога не хапае фільтру пакетаў.
Трансляцыя адрасоў стаіць унізе гэтага спіса нездарма. Яна перапісвае адрасы і порты і пакідае нагрузку нязменнай, таму гэта не інструмент змесціва, як бы часта яна ні з'яўлялася ў рэцэпце, дзе згадваецца і змесціва.
Менавіта адасабленне гэтых межаў робіць дызайн тлумачальным. Палітыка сеансу ў хуку, апрацоўка пакетаў на шляху пакетаў і змена праграмы там, дзе пратакол наўмысна завяршаецца: тры сказы, якія служаць і кантрольным спісам для рэв'ю.
Дзе TLS усё яшчэ завяршае размову
Адно перажывае ўсё вышэйпералічанае: трафік унутры тунеля, які нясе HTTPS, захоўвае ўласнае шыфраванне транспарту. Валоданне ключамі VPN дае вам унутраны IP-пакет і не дае ключоў сеансу для сайта на другім канцы.
Менавіта таму хук не можа аглядаць змесціва нават у прынцыпе, і таму шлях пакетаў бачыць шыфратэкст, калі разгортванне наўмысна не завяршае ўнутраны TLS. кантракт сцэнарыяў апісвае, што хуку даюць; ён нічога не кажа пра нагрузку, бо няма чаго даваць.