Mae cais sy’n cyrraedd eich cymhwysiad yn cario dau fath o dystiolaeth gyfeiriad: y cyfoed a agorodd y cysylltiad rhwydwaith, a maes HTTP sy’n honni cyfeiriad cleient cynharach. Maent yn ateb gwahanol gwestiynau. Arsylwir y cyfoed soced, tra bo’r pennawd yn cael ei honni gan pwy bynnag a’i hysgrifennodd, ac ni ddylai’r naill na’r llall ddisodli’r llall yn dawel mewn cofnod na rheol mynediad. Mae’r gymhariaeth isod yn eu cadw ar wahân, ac yna’n dangos yr un trefniant lle mae’r pennawd yn dod yn ddefnyddiadwy.

Disgrifiwch y llwybr cyn cymharu unrhyw beth:

Client -> approved reverse proxy -> application origin

Yn y trefniant hwnnw, cyfoed soced y tarddiad yw’r dirprwy fel arfer, a gall pennawd anfon gario honiad y dirprwy am y cleient. Daw ei werth o’r berthynas reoledig â’r dirprwy hwnnw, nid o enw’r pennawd.

Dau fath o dystiolaeth gyfeiriad

Mae’r cyfoed soced yn ffaith am un cysylltiad TCP: rhywbeth a gwblhaodd ysgwyd llaw o’r cyfeiriad hwnnw. Nid yw o reidrwydd yr unigolyn, y ddyfais na’r cyfrif rydych yn poeni amdano, oherwydd gall VPN neu allanfa Tor fod yn ffynhonnell y mae gwasanaeth yn ei harsylwi yn gyfreithlon. Er hynny, dyma’r unig gyfeiriad a wiriwyd gan y gwesteiwr ei hun, ac mae hynny’n holl werth y peth.

Mae maes anfon yn metadata am gadwyn. X-Forwarded-For, X-Real-IP a’r maes safonedig Forwarded gall unrhyw gleient ei ysgrifennu sy’n cyrraedd pwynt terfyn sy’n eu hadleisio, felly mae eu hygrededd yn dibynnu’n llwyr ar bwy a gafodd ganiatâd i’w gosod.

Cadwch y ddau yng nghyd-destun y cais o dan enwau gwahanol. Mae cymhwysiad sy’n trosysgrifo’r cyfoed â’r pennawd yn colli’r gallu i ailadeiladu gwall ymddiriedaeth yn nes ymlaen, a dyna’n union pryd y bydd ei angen arnoch.

Nid yw pennawd byth yn ailgyfeirio’r cysylltiad

Nid yw ysgrifennu cyfeiriad mewn maes anfon yn newid ffynhonnell y cysylltiad TCP sy’n cyrraedd y gweinydd, ac nid yw’n newid y llwybro yn unman ar hyd y llwybr. Mae llwybro VPN cyffredin neu NAT ffynhonnell yn danfon traffig heb unrhyw bennawd HTTP o gwbl. Yr un modd, nid yw porth tramwy yn ailysgrifennu cyfnewid HTTPS a warchodir yn briodol heb newid trefniant pwynt terfyn TLS.

Mae’r camgymeriad gwrthwyneb yr un mor gyffredin: nid yw HTTPS yn gwneud pennawd anfon a ddarperir gan y cleient yn wir. Mae’n gwarchod cludiant honiad ffug yr un mor dda ag un gwir.

Os bydd cydweithiwr yn cynnig newid pennawd i drwsio problem llwybro, mae’r diagnosis eisoes wedi mynd o’i le. Trwsiwch y llwybr, neu trwsiwch ffurfweddiad y dirprwy sy’n ysgrifennu’r pennawd.

Enwch y dirprwy a ganiateir i honni

Mae dwy reol yn gwneud maes anfon yn ddefnyddiadwy, ac mae’r ddwy yn ffurfweddiad yn hytrach na chod. Mae’r ymyl yn normaleiddio neu’n gollwng beth bynnag sy’n dod o’r tu allan, yn ôl ei ymddygiad dogfennol ei hun ar gyfer y meysydd hynny. Yna mae’r tarddiad yn cymryd cyfeiriad amnewid o lwybr y dirprwy a enwoch ac o ddim byd arall. Dim ond tra na all cleientiaid gyrraedd y tarddiad mewn ffordd arall y mae’r ail reol honno’n dal, gan nad oes gan darddiad sy’n ateb ceisiadau uniongyrchol a cheisiadau trwy ddirprwy unrhyw syniad pa un y mae’n ei wasanaethu.

Mae modiwl IP real NGINX yn dangos y rhaniad yn glir. set_real_ip_from yn enwi’r anfonwyr y mae eu honiad yn cyfrif, a real_ip_header yn dweud pa faes sy’n ei gario; mae’r cyntaf yn gwneud yr ymddiriedaeth, a’r ail yn dweud yn unig ble i edrych.

set_real_ip_from 10.20.0.0/24;
real_ip_header X-Forwarded-For;
# real_ip_recursive off - take the rightmost value in the field
# real_ip_recursive on  - walk the list back past every trusted address

Nid yw gorchymyn dewis pennawd ar ei ben ei hun yn sefydlu dim eto ynglŷn â phwy a anfonodd y gwerth.

Rhaid i ddiogelwch cludiant redeg yr holl ffordd rhwng y cydrannau rydych yn ymddiried ynddynt. Mae ymyl sy’n normaleiddio’n gywir yn colli’r gwerth hwnnw yr eiliad y bydd naid heb ei warchod i lawr y llwybr yn gadael i rywun arall olygu’r honiad wrth iddo deithio.

Delio’n fwriadol â chadwyni â sawl naid

Mae angen model cadwyn clir ar fwy nag un dirprwy. Peidiwch â chymryd y gwerth chwithaf neu’r ddeafaf wedi’i wahanu gan goma oherwydd bod rhyw flogyn wedi gwneud hynny; darganfyddwch pa un o’ch dirprwyon sy’n atodi, pa un sy’n disodli a pha un sy’n cadw’r maes sy’n dod i mewn. Gall NGINX, er enghraifft, gerdded y rhestr tuag yn ôl yn erbyn ei set ymddiried ac aros ar y cyfeiriad cyntaf nad yw’n berchen arno, a rheol y cynnyrch hwnnw yw hynny yn hytrach na chyfraith y mae pob fframwaith yn ei dilyn. Darllenwch ddogfennau eich dirprwy ei hun gyda’r un dau gwestiwn: pa werth y mae’n ei ddewis, a pha anfonwyr y mae’n credu?

Ysgrifennwch y gadwyn: trefn y naid, pa naid sy’n gosod y maes, a pha naid sy’n tynnu copïau sy’n dod i mewn. Yna cadwch y nodyn hwnnw wrth ffurfweddiad y dirprwy, nid yn y tocyn yn unig. Yna profwch ef trwy anfon cais â phennawd ffug trwy’r broses ddilysu a gymeradwywyd a chadarnhau bod y tarddiad yn ei anwybyddu.

Pan fyddwch yn ychwanegu naid, ailymwelwch â’r ddogfen honno. Gall cydbwysydd llwyth newydd a fewnosodwyd o flaen y dirprwy ymddiried newid pa gyfeiriad sy’n ennill heb i neb olygu’r cymhwysiad.

Cadwch y ddau arsylwad yn y cofnod

Lle mae diagnosteg wedi’i awdurdodi, cofnodwch gyfoed y cysylltiad a chyfeiriad y cleient wedi’i normaleiddio fel dau faes ar wahân, ac ychwanegwch yn unig y metadata anfon y mae’r pwrpas yn ei angen mewn gwirionedd. Yna profwch y defnyddiad â dau gais: un trwy ddirprwy a ddylai gofnodi’r ddau werth yn synhwyrol, ac un ymgais yn uniongyrchol i’r tarddiad y mae’n rhaid ei gwrthod.

Cofiwch beth mae’r pâr yn ei olygu. Mae’r pennawd yn ychwanegu cyd-destun a ddarperir gan gydran a ddewisoch i ymddiried ynddi; y cyfoed yw’r unig gyfeiriad a welodd eich gwesteiwr mewn gwirionedd. Nid yw’r naill na’r llall yn brawf o hunaniaeth unigol, a bydd dyluniad sy’n trin y naill neu’r llall fel prawf yn anghywir am rywun.

Erthyglau cysylltiedig