Kva PHPs REMOTE_ADDR eigentleg fortel deg bak ein VPN
Det er ein verdi nettenaren din leverte, ikkje eit oppslag i tunnelen. Gå gjennom vegen til førespurnaden, kontroller kven som kan skrive han om, og hald identiteten i applikasjonen.
Nokon spør kvifor ein VPN-brukar dukkar opp i applikasjonsloggen med ei adresse som høyrer til gatewayen, eller med ei adresse som endra seg etter lunsj. Svaret byrjar med kva verdien er: ei oppføring som nettenaren la i førespurnadsmiljøet. Det er ikkje eit oppslag i tunnelen, ikkje ein sertifikatidentitet og ikkje eit løfte om at nummeret høyrer til éin person. Å lese det som ein av dei tre gir sjølvsikre svar som er feil på ulike måtar.
Verdien kjem frå tenaren, ikkje frå tunnelen
PHP får førespurnadsmiljøet frå det som køyrde skriptet. PHP-referansen for tenarvariablar skildrar desse oppføringane som laga av nettenaren, med ein tilgjenge som avheng av korleis førespurnaden kom inn.
Eit skript som køyrer som kommandolinje-hook i VPN-en, er ein heilt annan køyringskontekst. Det har ingen webførespurnad, ingen klientssocket og ingen REMOTE_ADDR, og difor gir kopiert webkode i ein hook tomme verdiar i staden for feil. Hooken har sitt eige miljø, fylt av daemonen, og det er dokumentert separat. Å strekkje seg etter REMOTE_ADDR der er å strekkje seg etter ein variabel som aldri vart sett.
Hald den skilnaden i tankane før du samanliknar to loggar. Du samanliknar kanskje ein sideførespurnad med ein hook, og det er ikkje nokon samanlikning i det heile. Kontroller køyringskonteksten fyrst og adressa etterpå.
Gå vegen til førespurnaden før du stolar på nummeret
Den rapporterte adressa er peer for den tilkoplinga nettenaren såg. Set noko mellom klienten og den tenaren, og peeren endrar seg. Omsetjing, terminering og lastbalansering flyttar kvar observasjonen eitt hopp lenger vekk frå brukaren.
Fire vanlege vegar gir fire ulike observasjonar.
| Path to the listener | What can be reported |
|---|---|
| Client routed straight to the private listener, no translation | The client's tunnel address |
| Gateway translates the source before forwarding | The gateway's translated address |
| Reverse proxy terminates the client and opens its own backend connection | The proxy's backend address |
| Load balancer in front of two proxies | Whichever hop the server treats as its peer |
Skriv ned vegen med destinasjonsnamnet, adressefamilien og kvart omsetjingspunkt. Utan det kartet ser ein riktig og ein feil verdi like ut i ei logglinje. To linjer diagram sparar ein ettermiddag med diskusjon.
Erstatning skjer berre der ho er konfigurert
Ein tenar eller eit rammeverk kan med vilje erstatte klientadressa. Apaches remote-IP-modul og NGINX' real-IP-modul gjer begge dette, og verdien PHP får avheng av den konfigurasjonen pluss parametrane som vert sende til skripthandteraren.
REMOTE_ADDR er altså ikkje universelt den urørte TCP-peeren. Det er peeren slik tenaren valde å rapportere han etter å ha brukt sin eigen policy. Den skilnaden avgjer om verdien er bevis eller dekorasjon.
Spør tenareigaren kva felt som er autoritativt i denne installasjonen, og korleis den opphavlege peeren vert halden når erstatning skjer. Om ingen kan svare, er loggen enno ikkje bevis for noko.
Ikkje les videresendingshovud på tillit
Ein kallande part kan sende videresendingshovud sjølv. Å handsame den fyrste kommaseparerte oppføringa som ei verifisert brukaradresse er å velje å tru på kven som helst som koplar til, som er det motsette av kva hovudet er til for. Hovudet skildrar ei kjede, og berre eit klarert lag kan gå god for den kjedja.
Bruk støtta for klarerte proxyar i tenaren eller rammeverket med den faktiske proxykjedja konfigurert, og lat ho forkaste verdiar frå kjelder utanfor den kjedja. Handskriven parsing er der dei fleste interessante feila bur.
Ei proxyrapportert adresse endrar heller ikkje pakkekjelda som ein brannmur lenger oppe ser. Hald HTTP-metadata og nettverksfiltrering som separate observasjonar, fordi dei svarar på ulike spørsmål.
Bruk identiteten til applikasjonen til avgjerder
For tilgang til postane til ein brukar må du stole på den autentiserte principalen og autorisasjonsreglane i applikasjonen. Ei intern adresse kan tildelast på nytt, og éi omsett adresse kan stå for hundrevis av samtidige brukarar. Ingen av desse eigenskapane kan ein adressekontroll reparere.
Om drift treng å knyte ein førespurnad til ein VPN-økt, kople den observerte adressa og tidsstempelet til autoritative øktpostar etter omsetjingsmodellen du har dokumentert. Det gir ein assosiasjon du kan forsvare; ei adresse åleine gjer det ikkje.
Logg for diagnostikk dei få felta du treng i staden for heile tenararrayet, som kan bere hovud og autentiseringsmateriale. Den nyttige konklusjonen seier kva denne verdien tyder i denne installasjonen, ikkje kva verdi som liknar mest på ein klient.