Някой пита защо потребител на VPN се появява в журнала на приложението с адрес, който принадлежи на шлюза, или с адрес, който се е сменил след обяда. Отговорът започва с това какво е тази стойност: запис, който уеб сървърът е поставил в средата на заявката. Това не е заявка към тунела, не е идентичност на сертификат и не е обещание, че номерът принадлежи на един човек. Ако го четем като което и да е от тези три, получаваме уверени отговори, които са грешни по различни начини.

Стойността идва от сървъра, не от тунела

PHP получава средата на заявката от това, което е изпълнило скрипта. Справочникът за сървърните променливи в PHP описва тези записи като създадени от уеб сървъра, с наличност, която зависи от това как е пристигнала заявката.

Скрипт, изпълняван като hook от командния ред на VPN, е напълно различен контекст на изпълнение. Той няма уеб заявка, няма клиентски сокет и няма REMOTE_ADDR, затова копиран уеб код в hook дава празни стойности вместо грешни. Hook-ът има собствена среда, запълвана от демона, и е документиран отделно. Да търсите REMOTE_ADDR там означава да търсите променлива, която никога не е била задавана.

Дръжте тази разлика в ума, преди да сравнявате два журнала. Възможно е да сравнявате заявка за страница с hook, а това изобщо не е сравнение. Проверете първо контекста на изпълнение и после адреса.

Извървете пътя на заявката, преди да се доверите на номера

Съобщеният адрес е партньорът на връзката, която уеб сървърът е видял. Поставете каквото и да е между клиента и този сървър и партньорът се променя. Транслацията, терминирането и балансирането на натоварването местят всяко наблюдение с една стъпка по-далеч от потребителя.

Четири обичайни пътя дават четири различни наблюдения.

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 партньор. Той е партньорът такъв, какъвто сървърът е избрал да го съобщи след прилагане на собствената си политика. Тази разлика решава дали стойността е доказателство, или украшение.

Попитайте собственика на сървъра кое поле е авторитетно в тази инсталация и как се запазва оригиналният партньор, когато се извършва заместване. Ако никой не може да отговори, журналът все още не доказва нищо.

Не четете заглавките за препращане на доверие

Извикващият може сам да изпрати заглавки за препращане. Да третирате първия запис, разделен със запетая, като проверен адрес на потребител означава решение да вярвате на всеки, който се свърже, което е точно обратното на предназначението на заглавката. Заглавката описва верига и само доверен слой може да гарантира за тази верига.

Използвайте поддръжката за доверени прокси сървъри на сървъра или framework-а с конфигурирана реалната верига от проксита и я оставете да изхвърля стойности от източници извън тази верига. Ръчно написаният анализ е мястото, където живеят повечето интересни откази.

Адрес, съобщен от прокси, също не променя източника на пакетите, който вижда firewall по-нагоре. Дръжте HTTP метаданните и мрежовата филтрация като отделни наблюдения, защото отговарят на различни въпроси.

Използвайте идентичността на приложението за решения

За достъп до записите на потребител разчитайте на удостоверения principal и правилата за оторизация на приложението. Вътрешен адрес може да бъде преразпределен и един транслатиран адрес може да представлява стотици едновременни потребители. Нито едно от тези свойства не може да бъде поправено от проверка на адрес.

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

За диагностика журналирайте няколкото нужни полета вместо целия масив на сървъра, който може да носи заглавки и материали за удостоверяване. Полезният извод казва какво означава тази стойност в тази инсталация, а не коя стойност най-много прилича на клиент.

Подобни статии