Joku kysyy, miksi VPN-käyttäjä näkyy sovelluslokissa osoitteella, joka kuuluu yhdyskäytävälle, tai osoitteella, joka vaihtui lounaan jälkeen. Vastaus alkaa siitä, mikä arvo on: merkintä, jonka verkkopalvelin asetti pyynnön ympäristöön. Se ei ole kysely tunneliin, ei sertifikaatin identiteetti eikä lupaus siitä, että numero kuuluu yhdelle henkilölle. Sen lukeminen minä tahansa näistä kolmesta tuottaa varmoja vastauksia, jotka ovat eri tavoin vääriä.

Arvo tulee palvelimelta, ei tunnelista

PHP vastaanottaa pyynnön ympäristön siltä, mikä suoritti skriptin. PHP:n palvelinmuuttujien viite kuvaa nämä merkinnät verkkopalvelimen luomiksi, ja niiden saatavuus riippuu siitä, miten pyyntö saapui.

Komentorivikoukuksi VPN:ään ajettu skripti on täysin erilainen suoritusympäristö. Sillä ei ole webpyyntöä, ei asiakassocketia eikä REMOTE_ADDR:ää, ja siksi koukkuun kopioitu webkoodi tuottaa tyhjiä arvoja väärien sijaan. Koukulla on oma ympäristönsä, jonka daemon täyttää, ja se on dokumentoitu erikseen. REMOTE_ADDR:n tavoittelu siellä on sellaisen muuttujan tavoittelua, jota ei koskaan asetettu.

Pidä tämä ero mielessä ennen kuin vertaat kahta lokia. Saatat verrata sivupyyntöä koukkuun, eikä se ole vertailu lainkaan. Tarkista ensin suoritusympäristö ja vasta sitten osoite.

Käy pyynnön reitti läpi ennen kuin luotat numeroon

Raportoitu osoite on sen yhteyden päätepiste, jonka verkkopalvelin näki. Aseta mitä tahansa asiakkaan ja palvelimen väliin, ja päätepiste vaihtuu. Käännös, terminointi ja kuormantasaus siirtävät kukin havaintoa yhden hypyn kauemmaksi käyttäjästä.

Neljä tavallista reittiä tuottaa neljä erilaista havaintoa.

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

Kirjoita reitti muistiin kohteen nimellä, osoiteperheellä ja jokaisella käännöspisteellä. Ilman sitä karttaa oikea ja väärä arvo näyttävät samalta lokirivillä. Kaksi riviä kaaviota säästää iltapäivän väittelyä.

Korvaaminen tapahtuu vain siellä, missä se on määritetty

Palvelin tai kehys voi tietoisesti korvata asiakkaan osoitteen. Apachen remote-IP-moduuli ja NGINX:n real-IP-moduuli tekevät molemmat tämän, ja PHP:n vastaanottama arvo riippuu tästä kokoonpanosta sekä skriptikäsittelijälle välitetyistä parametreista.

REMOTE_ADDR ei siis ole yleisesti koskematon TCP-päätepiste. Se on päätepiste sellaisena kuin palvelin päätti sen raportoida sovellettuaan omaa käytäntöään. Tämä ero ratkaisee, onko arvo todiste vai koriste.

Kysy palvelimen omistajalta, mikä kenttä on tässä käyttöönotossa valtuuttava ja miten alkuperäinen päätepiste säilytetään, kun korvaaminen tapahtuu. Jos kukaan ei osaa vastata, loki ei vielä todista mitään.

Älä lue edelleenlähetysotsakkeita luottaen

Kutsuja voi lähettää edelleenlähetysotsakkeita itse. Ensimmäisen pilkulla erotetun merkinnän pitäminen vahvistettuna käyttäjäosoitteena on päätös uskoa ketä tahansa, joka yhdistää, eli päinvastoin kuin mihin otsake on tarkoitettu. Otsake kuvaa ketjun, ja vain luotettu kerros voi taata sen ketjun.

Käytä palvelimen tai kehyksen luotettujen välityspalvelimien tukea todellisen välitysketjun kanssa ja anna sen hylätä arvot lähteistä, jotka ovat ketjun ulkopuolella. Käsin kirjoitettu jäsennys on paikka, jossa useimmat kiinnostavat viat asuvat.

Välityspalvelimen raportoima osoite ei myöskään muuta pakettilähdettä, jonka ylempänä oleva palomuuri näkee. Pidä HTTP-metatiedot ja verkkosuodatus erillisinä havaintoina, koska ne vastaavat eri kysymyksiin.

Käytä sovelluksen identiteettiä päätöksiin

Käyttäjän tietueiden käyttöoikeuteen luota todennettuun päämieheen ja sovelluksen valtuutussääntöihin. Sisäinen osoite voidaan jakaa uudelleen, ja yksi käännetty osoite voi edustaa satoja samanaikaisia käyttäjiä. Kumpaakaan ominaisuutta osoitetarkistus ei voi korjata.

Jos ylläpito tarvitsee liittää pyynnön VPN-istuntoon, yhdistä havaittu osoite ja aikaleima valtuuttaviin istuntotietueisiin dokumentoimasi käännösmallin mukaisesti. Se tuottaa suhteen, jota voit puolustaa; pelkkä osoite ei sitä tee.

Kirjaa diagnostiikkaa varten ne harvat kentät, joita tarvitset, koko palvelinmatriisin sijaan, joka voi sisältää otsakkeita ja todennusmateriaalia. Hyödyllinen johtopäätös kertoo, mitä tämä arvo tarkoittaa tässä käyttöönotossa, ei sitä, mikä arvo näyttää eniten asiakkaalta.

Aiheeseen liittyvät artikkelit