Niekto sa pýta, prečo sa používateľ VPN objavuje v logu aplikácie s adresou, ktorá patrí bráne, alebo s adresou, ktorá sa po obede zmenila. Odpoveď začína tým, čo tá hodnota je: záznam, ktorý webový server vložil do prostredia požiadavky. Nie je to dotaz do tunela, nie je to identita certifikátu a nie je to sľub, že číslo patrí jednej osobe. Čítať ju ako ktorúkoľvek z tých troch vecí dáva sebavedomé odpovede, ktoré sú nesprávne rôznymi spôsobmi.

Hodnota pochádza zo servera, nie z tunela

PHP dostáva prostredie požiadavky od toho, čo spustilo skript. Referenčná príručka premenných servera v PHP opisuje tieto záznamy ako vytvorené webovým serverom, s dostupnosťou, ktorá závisí od toho, ako požiadavka dorazila.

Skript spustený ako hook príkazového riadka VPN je úplne iný kontext vykonávania. Nemá webovú požiadavku, klientsky socket ani REMOTE_ADDR, a preto kopírovaný webový kód v hooku dáva prázdne hodnoty namiesto chybných. Hook má vlastné prostredie, plnené démonom, a je dokumentovaný osobitne. Siahať tam po REMOTE_ADDR znamená siahať po premennej, ktorá nebola nikdy nastavená.

Majte ten rozdiel na pamäti, kým začnete porovnávať dva logy. Možno porovnávate požiadavku stránky s hookom, a to nie je žiadne porovnanie. Skontrolujte najprv kontext vykonávania a až potom adresu.

Prejdite cestu požiadavky, kým číslu uveríte

Hlásená adresa je protiľahlá strana toho spojenia, ktoré webový server videl. Vložte čokoľvek medzi klienta a ten server a protiľahlá strana sa zmení. Preklad, ukončenie a vyvažovanie záťaže posúvajú každé pozorovanie o jeden skok ďalej od používateľa.

Štyri bežné cesty dávajú štyri rôzne pozorovania.

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

Zapíšte cestu s názvom cieľa, rodinou adries a každým prekladovým bodom. Bez tej mapy vyzerá správna a chybná hodnota v riadku logu rovnako. Dva riadky diagramu ušetria popoludnie hádky.

Nahradenie prebieha len tam, kde je nakonfigurované

Server alebo framework môže adresu klienta zámerne nahradiť. Modul remote-IP Apache a modul real-IP NGINX to oba robia a hodnota, ktorú PHP dostane, závisí od tejto konfigurácie a od parametrov odovzdaných obsluhe skriptu.

REMOTE_ADDR teda nie je univerzálne nedotknutá TCP protiľahlá strana. Je to protiľahlá strana tak, ako sa ju server rozhodol hlásiť po uplatnení vlastných pravidiel. Ten rozdiel rozhoduje, či je hodnota dôkaz, alebo dekorácia.

Opýtajte sa správcu servera, ktoré pole je v tomto nasadení smerodajné a ako sa pôvodná protiľahlá strana uchováva, keď dôjde k nahradeniu. Ak to nikto nevie odpovedať, log zatiaľ nič nedokazuje.

Nečítajte preposielacie hlavičky na dôveru

Volajúci môže preposielacie hlavičky poslať sám. Považovať prvý čiarkou oddelený záznam za overenú adresu používateľa znamená rozhodnutie veriť každému, kto sa pripojí, čo je opak toho, na čo hlavička slúži. Hlavička opisuje reťazec a len dôveryhodná vrstva môže za ten reťazec ručiť.

Použite podporu dôveryhodných proxy servera alebo frameworku s nakonfigurovaným skutočným reťazcom proxy a nechajte ju zahodiť hodnoty zo zdrojov mimo tohto reťazca. Ručne písaný parser je miesto, kde býva väčšina zaujímavých zlyhaní.

Adresa hlásená proxy tiež nemení zdroj paketov, ktorý vidí firewall vyššie. Držte metadáta HTTP a sieťové filtrovanie ako oddelené pozorovania, pretože odpovedajú na rôzne otázky.

Na rozhodovanie používajte identitu aplikácie

Pri prístupe k záznamom používateľa sa spolahnite na overený principal a autorizačné pravidlá aplikácie. Vnútorná adresa môže byť pridelená znova a jedna preložená adresa môže zastupovať stovky súbežných používateľov. Ani jednu z týchto vlastností kontrola adresy nespraví.

Ak prevádzka potrebuje spojiť požiadavku s reláciou VPN, spojte pozorovanú adresu a časovú pečiatku so smerodajnými záznamami relácií podľa dokumentovaného modelu prekladu. To dáva asociáciu, ktorú môžete obhájiť; samotná adresa nie.

Pre diagnostiku logujte tých niekoľko potrebných polí namiesto celého poľa servera, ktoré môže niesť hlavičky a autentizačný materiál. Užitočný záver hovorí, čo táto hodnota v tomto nasadení znamená, nie ktorá hodnota vyzerá najviac ako klient.

Súvisiace články