Delovanje prehoda za strežnikom IIS ali drugim posredniškim strežnikom
Če je pred prehodom IIS, izenačevalnik obremenitve ali drug posredniški strežnik, prehod najprej vidi le njegov naslov. Da bi pravila izvora, pravilnik prijave in obveznost HTTPS pravilno delovali, mora prehod posredniškemu strežniku izrecno zaupati.
Pregled rešitve
Posredniški strežnik naslov klicatelja sporoči v X-Forwarded-For, shemo v X-Forwarded-Proto,
gostitelja, ki ga je klicatelj naslovil, pa v X-Forwarded-Host. Prehod tem glavam verjame le, če
prihajajo z naslova pod Gateway:Security:TrustedProxies. Brez tega vnosa bi vsakega klicatelja videl z
naslovom posredniškega strežnika; če je ta v omrežju podjetja, bi vsak klicatelj veljal za
„notranjega“.
Izvedba
- Prehod naj posluša le na
127.0.0.1(ali na naslovu, ki ga doseže le posredniški strežnik), na primer zKestrel:Endpoints:Http:Url=http://127.0.0.1:8434. Posredniški strežnik vpišite kot zaupanja vrednega:
"Security": { "TrustedProxies": [ "127.0.0.1", "::1" ] }- Posredniški strežnik naj nastavi
X-Forwarded-For,X-Forwarded-Proto: httpsinX-Forwarded-Host. ČeX-Forwarded-Formanjka, vsaka zahteva velja, kot da prihaja od samega posredniškega strežnika – pri IIS na istem računalniku torej kot127.0.0.1: notranja, zaščitena, izvzeta iz vsakega omrežnega pravila. Zato po nastavitvi v revizijski sledi preverite, ali so tam navedeni dejanski izvori. Iz sheme in gostitelja prehod sestavi absolutne naslove v svojih odgovorih: dokument storitve in naslednje strani vmesnika OData,Locationpo ustvarjanju ter enkratne povezave skrbništva. BrezX-Forwarded-Hostkažejo na127.0.0.1in od zunaj niso dosegljivi. Prehod iz vsake glave vzame zadnji vnos, ki ga je dodal najbližji posredniški strežnik, pri gostitelju pa samo ime računalnika ali naslov z vrati. Z IIS: namestitveni paket z
GW_MODE=iisopravi 1. in 2. korak ter v programsko mapo zapiše predlogoiis\web.config. Ta preusmerihttpnahttps, vsako zahtevo posreduje nahttp://127.0.0.1:<GW_PORT>, nastaviX-Forwarded-Proto: httpsinX-Forwarded-Hostter dovoli naslove do 8 192 znakov. Z njo ustvarite spletno mesto IIS s svojim potrdilom. Predloga potrebuje modula IIS URL Rewrite in Application Request Routing. V upravitelju IIS pod „URL Rewrite“ > „View Server Variables“ dovolite spremenljivkiHTTP_X_FORWARDED_PROTOinHTTP_X_FORWARDED_HOST; brez tega dovoljenja IIS zavrne pravilo, ki nastavi glavi, in odgovori s500.
Pravili predloge pod URL Rewrite (nemška različica upravitelja IIS).
Dovoljeni strežniški spremenljivki.
Rezultat: revizijska sled navaja naslov klicatelja, ne posredniškega strežnika; zahteva prek
https na posredniškem strežniku velja za zaščiteno povezavo, naslovi v odgovorih pa navajajo
posredniški strežnik s https.
Napotki
- Prijava Windows samo brez skupnih povezav. Prijava Windows velja za povezavo, na kateri je potekla. Posredniški strežnik, ki zahteve različnih uporabnikov vodi prek ene povezave do prehoda, bi drugemu uporabniku dal pravice prvega. IIS z Application Request Routing zahteve posreduje prek skupnih povezav. Zato
setup-host --mode iisnastaviAuthModenaPersonalKey, brez prijave Windows; osebe se prijavijo z osebnim ključem. Če jeWindowskljub temu vAuthModein je vpisan zaupanja vreden posredniški strežnik, prehod ob zagonu v dnevnik zapiše opozorilo. - Branje izvora: prehod
X-Forwarded-Forbere od najbližjega člena naprej; velja prvi naslov, ki sam ni zaupanja vreden posredniški strežnik. Vnosa, ki ga odjemalec sam vpiše na začetek, tako ne upošteva. Če podatka ni mogoče prebrati, je izvor neznan; neznan izvor ne odpravi nobene zavrnitve. - Glava
Server: prehod sam ne razkriva programske opreme strežnika. Za IIS doda IIS glavoServer: Microsoft-IIS/10.0. Od IIS 10 naprej jo odstraniremoveServerHeader="true"na elementurequestFilteringv predlogi:<requestFiltering removeServerHeader="true">. Starejše različice IIS atributa ne poznajo in z njim javijo napako 500.19, zato ga predloga ne nastavi. - Dolgi naslovi: IIS in http.sys brez predloge dopuščata le 2 KB poizvedbenega niza; odjemalci lahko dolge pogoje tako ali tako pošljejo v telesu, glejte HTTP: dolge poizvedbe.