Неко пита зашто се корисник 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 може намерно заменити адресу клијента. Apache-ов модул remote-IP и NGINX-ов модул real-IP раде управо то, а вредност коју PHP прими зависи од те конфигурације и параметара пренетих руковаоцу скрипте.

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

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

Не читајте заглавља прослеђивања на поверење

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

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

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

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

За приступ корисничким записима ослоните се на аутентификовани principal и правила ауторизације апликације. Унутрашња адреса може се поново доделити, а једна преведена адреса може представљати стотине истовремених корисника. Ниједно од тих својстава не може поправити провера адресе.

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

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

Повезани чланци