Некој прашува зошто корисник на 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

Запишете ја патеката со името на одредиштето, фамилијата адреси и секоја точка на превод. Без таа карта исправна и погрешна вредност изгледаат исто во ред од дневникот. Два реда дијаграм штедат попладне расправа.

Замената се случува само таму каде што е конфигурирана

Сервер или framework може намерно да ја замени адресата на клиентот. Модулот remote-IP на Apache и модулот real-IP на NGINX го прават токму тоа, а вредноста што ја прима PHP зависи од таа конфигурација и параметрите предадени на ракувачот на скриптата.

Значи, REMOTE_ADDR не е универзално недопрениот TCP peer. Тоа е peer-от како што серверот одлучил да го пријави откако ја применил сопствената политика. Таа разлика одлучува дали вредноста е доказ или украс.

Прашајте го сопственикот на серверот кое поле е меродавно во оваа инсталација и како се чува оригиналниот peer кога доаѓа до замена. Ако никој не може да одговори, дневникот сѐ уште не докажува ништо.

Не читајте ги заглавјата за проследување на доверба

Повикувачот може сам да испрати заглавја за проследување. Третирањето на првиот запис одделен со запирка како проверена корисничка адреса значи одлука да се верува на секој што ќе се поврзе, што е спротивно на целта на заглавјето. Заглавјето опишува ланец и само доверлив слој може да гарантира за тој ланец.

Користете ја поддршката за доверливи proxy сервери на серверот или framework-от со конфигуриран вистински ланец на proxy и дозволете да ги отфрли вредностите од извори надвор од тој ланец. Рачно напишаното парсирање е местото каде живеат повеќето интересни дефекти.

Адреса пријавена од proxy исто така не го менува изворот на пакетите што го гледа заштитниот ѕид повисоко. Држете ги HTTP метаподатоците и мрежното филтрирање како одделни набљудувања, зашто одговараат на различни прашања.

За одлуки користете го идентитетот на апликацијата

За пристап до записите на корисникот потпрете се на автентицираниот principal и правилата за авторизација на апликацијата. Внатрешна адреса може повторно да се додели, а една преведена адреса може да претставува стотици истовремени корисници. Ниту едно од тие својства не може да го поправи проверка на адреса.

Ако операциите треба да го поврзат барањето со VPN сесија, поврзете ја набљудуваната адреса и временската ознака со меродавните записи за сесии според документираниот модел на превод. Тоа дава асоцијација што можете да ја браните; самата адреса не.

За дијагностика запишете ги тие неколку потребни полиња наместо целиот масив на серверот што може да носи заглавја и материјал за автентикација. Корисниот заклучок кажува што значи оваа вредност во оваа инсталација, а не која вредност најмногу личи на клиент.

Поврзани статии