Pam mae Port-Share yn gwneud i bob ymwelydd â'r we ymddangos fel localhost
Mae'r backend yn gweld naid yr anfon, nid y porwr. Gwiriwch ble mae'r cyfeiriad ffynhonnell yn cael ei golli, yna penderfynwch pa gydran sy'n cael bod yn warant iddo.
Mae pob llinell yn y log mynediad yn dangos yr un cyfeiriad loopback, tra bod y dudalen ei hun yn llwytho ac mae'r dystysgrif yn gwirio'n iawn. Nid oes dim wedi torri yn yr ystyr o fod yn anghyraeddadwy, a dyna pam mae hyn yn goroesi am fisoedd. Yr hyn a dorrwyd yw priodoli: mae'r backend gwe yn cofnodi cyfeiriad y naid a anfonodd y cysylltiad ymlaen, ac mae pob penderfyniad diweddarach a ymddiriedodd yn y log wedi etifeddu'r un ateb anghywir.
Mae'r gwiriadau isod yn mynd o'r wifren i mewn. Stopiwch ar yr un cyntaf sy'n esbonio'r gwerth rydych chi'n ei weld, oherwydd mae pob cam diweddarach yn tybio bod y rhai blaenorol eisoes yn wir. Nid oes yr un ohonynt yn gofyn i chi ddyfalu cyfluniad y blaen.
Dilynwch y ddau gysylltiad, nid y llinell log
Mae Port-Share yn amlblethu dau brotocol ar un gwrandawr TCP. Mae OpenVPN yn archwilio'r bytau cyntaf o gysylltiad sy'n dod i mewn, yn ei gadw pan mae'n edrych fel ei brotocol ei hun, ac yn trosglwyddo unrhyw beth arall i ail gyrchfan. Mae'r gyrchfan honno fel arfer yn weinydd gwe ar yr un gwesteiwr, felly mae gan soced a dderbyniwyd y gweinydd gwe y broses OpenVPN fel ei bartner.
ss -ltnp 'sport = :443'
ss -tnp 'dport = :8080'
Mae'r gorchymyn cyntaf yn dangos pwy sy'n berchen ar y gwrandawr cyhoeddus. Mae'r ail yn dangos y cysylltiadau sy'n cyrraedd porth y backend, a'u cyfeiriad partner yw'r un y bydd y log mynediad yn ei argraffu. Os yw'r partner hwnnw'n loopback, mae'r log yn gywir ac mae'r wybodaeth wedi'i cholli haen yn gynt. Ni fydd ailenwi'r maes log na galluogi modiwl IP cleient yn adfer cyfeiriad na chludodd y cysylltiad erioed.
Dyma'r gwiriad sy'n penderfynu popeth arall. Os partner y backend yw cyfeiriad y porwr, nid rhannu porth yw eich problem chi, ond fformat y log.
Nid yw anfon cludiant yn chwistrellu pennawd
Mae'r anfonwr yn symud bytau. Nid yw'n dosrannu HTTP, felly ni all fewnosod pennawd mewn cais nad yw byth yn ei ddarllen fel cais, ac ni all ychwanegu dim at ffrwd TLS y mae'n ei throsglwyddo'n ddianaf. Bydd modiwl sy'n disgwyl pennawd procsi yn parhau i ddisgwyl un nad oes unrhyw gydran yn ei gynhyrchu.
Gall dau fecanwaith gludo'r cyfeiriad gwreiddiol, ac mae'r ddau yn gofyn am gytundeb ar y ddau ben. Mae protocol PROXY yn rhagddodi pennawd bach i'r cysylltiad, ac mae'n rhaid i'r backend gael ei gyflunio i'w ddisgwyl; bydd backend nad yw'n ei ddisgwyl yn trin y bytau hynny fel dechrau'r cais ac yn methu mewn ffordd ddryslyd. Mae penawdau procsi ymddiriededig fel X-Forwarded-For yn gweithio pan fydd procsi sy'n deall HTTP yn eu gosod ac yn dweud wrth y backend pa bartneriaid sy'n cael eu datgan.
Nid oes yr un ohonynt yn awtomatig, ac nid oes yr un yn ddiogel yn ddiofyn. Mae backend sy'n credu unrhyw bennawd a anfonwyd sy'n dod i mewn yn caniatáu i gleient ddewis ei gyfeiriad ei hun, sy'n troi anghywirdeb yn y log yn ffordd o osgoi rheolaeth mynediad. Rhedewch y ddangosiad unwaith ar westeiwr llwyfannu cyn ymddiried mewn unrhyw bennawd ar lwybr cynhyrchu.
curl -sS -H 'X-Forwarded-For: 127.0.0.1' https://site.example.com/health
grep -F '127.0.0.1' /var/log/nginx/access.log | tail -n 3
Y cyfeiriadur mapio ffynhonnell dewisol
Mae gan rannu porth ddadl cyfeiriadur dewisol sy'n cofnodi mapio rhwng y cyfeiriad ffynhonnell gwreiddiol a'r cysylltiad anfon, ar lwyfannau lle mae'r nodwedd wedi'i gweithredu. Disgwylir i'r ochr we ymgynghori â'r mapio hwnnw; nid pennawd yw e, ac nid yw'n cael ei chwistrellu i'r cais.
Mae'r dyluniad hwnnw'n werth ei wybod oherwydd mae'n esbonio pam mae rhai gosodiadau'n adrodd cyfeiriadau go iawn ac eraill ddim, gyda chyfluniad blaen sy'n ymddangos yn union yr un fath. Mae'r gwahaniaeth ar yr ochr sy'n derbyn, ac fel arfer mae'n byw mewn modiwl neu glwt nad yw'r rhan fwyaf o weinyddion gwe wedi'u pecynnu yn ei alluogi yn ddiofyn. Darllenwch ddogfennaeth eich gweinydd gwe am yr union fachyn y mae'n ei gynnig, a chadarnhewch fod y modiwl wedi'i lwytho yn hytrach na thybio hynny.
Os ewch y ffordd hon, triniwch ef fel integreiddiad o ddau hanner: y mapio a ysgrifennir gan yr anfonwr a'r chwiliad a wneir gan y backend. Gwirwch y ddau, a chadarnhewch fod y cyfeiriadur yn goroesi ailgychwyn ac nad yw'n tyfu'n ddiderfyn ar wrandawr prysur.
Penderfynwch pa gydran sy'n warantu'r cyfeiriad
Cyn newid y cyfluniad, enwch y gydran y caniateir iddi ddatgan cyfeiriad cleient a'r cydrannau y caniateir iddynt ei chredu. Mae un ateb wedi'i ysgrifennu i lawr yn atal y drifft arferol, lle mae tair haen wahanol yn ymddiried mewn gwahanol ffynhonnell.
Mae tri dyluniad yn cwmpasu'r rhan fwyaf o anghenion. Cadwch y gwrandawr cyhoeddus a'r gwrandawr gwe ar wahân, fel bod y gweinydd gwe yn gweld partneriaid go iawn ac nad oes problem priodoli. Rhowch brocsi gwrthdro sy'n deall HTTP o flaen, terfynwch neu ddadansoddwch y cais yno, a gadewch iddo osod pennawd anfon ar gyfer backend sy'n ymddiried yn y procsi hwnnw'n unig. Neu cadwch rannu porth a derbyn bod logiau'n dangos y naid, gyda rheolau mynediad wedi'u hysgrifennu yn erbyn hunaniaeth y cymhwysiad yn hytrach na chyfeiriad.
Yr hyn nad yw'n gweithio yw trin cyfeiriad loopback a anfonwyd fel tystiolaeth bod y cais wedi tarddu ar y peiriant hwn. Mae'r casgliad hwnnw yn union o chwith: mae'r cyfeiriad yn bresennol yn union oherwydd bod cydran leol wedi gwneud y cysylltiad. Mae rheol wedi'i hysgrifennu felly'n derbyn unrhyw un sy'n gallu cyrraedd y gwrandawr.
Profwch y rheol, nid y dudalen
Mae tudalen sy'n llwytho yn profi bod y llwybr anfon yn gweithio ac yn dweud dim am briodoli. Profwch ddefnyddiwr y cyfeiriad: y rheol fynediad, y terfyn cyfradd, y cofnod archwilio, y chwiliad geo.
curl -sS -o /dev/null -w '%{http_code}\n' https://site.example.com/
tail -n 5 /var/log/nginx/access.log
grep -c '' /var/log/nginx/access.log
Cymharwch gais allanol awdurdodedig â chofnodion y blaen a'r backend ill dau, a chadarnhewch fod rheol a ddylai wrthod yn dal i wrthod ac un a ddylai dderbyn yn dal i dderbyn. Os yw'r llinell log yn gywir ond mae'r rheol yn dal i ymddwyn fel petai pawb yn lleol, mae'r rheol yn darllen maes gwahanol i'r un a wnaethoch chi ei drwsio.
Gorffenwch trwy ysgrifennu'r gadwyn briodoli yn y nodiadau defnyddio: pa wrandawr, pa anfonwr, pa bennawd neu fapio, a pha backend sydd wedi'i gyflunio i ymddiried ynddo. Bydd angen y pedwar ar y person nesaf sy'n darllen llinell log, a hiraeth y nodyn hwnnw yw sut mae'r un tocyn yn ailagor flwyddyn yn ddiweddarach. Cadwch ef wrth ymyl y cyfluniad yn hytrach nag mewn edefyn sgwrs.