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

Значэнне прыходзіць ад сервера, а не з тунеля

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

Скрыпт, запушчаны як hook каманднага радка VPN, — цалкам іншы кантэкст выканання. У яго няма вэб-запыту, няма кліенцкага сокета і няма REMOTE_ADDR, таму скапіяваны вэб-код у hook дае пустыя значэнні, а не памылковыя. У hook ёсць уласнае асяроддзе, якое запаўняе дэман, і яно дакументавана асобна. Цягнуцца там да REMOTE_ADDR — гэта цягнуцца да зменнай, якую ніколі не задавалі.

Трымайце гэтую розніцу ў галаве, перш чым параўноўваць два журналы. Магчыма, вы параўноўваеце запыт старонкі з hook, а гэта зусім не параўнанне. Спачатку праверце кантэкст выканання, а потым адрас.

Прайдзіце шлях запыту, перш чым давяраць нумару

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

Чатыры звычайныя шляхі даюць чатыры розныя назіранні.

Path to the listenerWhat can be reported
Client routed straight to the private listener, no translationThe client's tunnel address
Gateway translates the source before forwardingThe gateway's translated address
Reverse proxy terminates the client and opens its own backend connectionThe proxy's backend address
Load balancer in front of two proxiesWhichever hop the server treats as its peer

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

Замена адбываецца толькі там, дзе яна наладжана

Сервер або фрэймворк можа наўмысна падмяніць адрас кліента. Модуль remote-IP у Apache і модуль real-IP у NGINX робяць менавіта гэта, а значэнне, якое атрымлівае PHP, залежыць ад гэтай канфігурацыі і параметраў, перададзеных апрацоўшчыку скрыпта.

Такім чынам, REMOTE_ADDR — не заўсёды некрануты TCP-peer. Гэта peer у тым выглядзе, у якім сервер вырашыў яго паведаміць, прымяніўшы ўласную палітыку. Гэтая розніца вырашае, ці з'яўляецца значэнне доказам ці упрыгожаннем.

Спытайце ўладальніка сервера, якое поле аўтарытэтнае ў гэтым разгортванні і як захоўваецца зыходны peer, калі адбываецца падмена. Калі ніхто не можа адказаць, журнал пакуль нічога не даказвае.

Не чытайце загалоўкі перасылкі на веру

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

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

Адрас, паведамлены проксі, таксама не змяняе крыніцу пакетаў, якую бачыць вышэйшы міжсеткавы экран. Трымайце метаданыя HTTP і сеткавую фільтрацыю як асобныя назіранні, бо яны адказваюць на розныя пытанні.

Для рашэнняў выкарыстоўвайце ідэнтычнасць праграмы

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

Калі эксплуатацыі трэба звязаць запыт з сесіяй VPN, злучыце назіраны адрас і метку часу з аўтарытэтнымі запісамі сесій па задокументаванай мадэлі трансляцыі. Гэта дае сувязь, якую можна абараніць; адзін адрас — не.

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

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