Segwi talba waħda minn telefon fi tren sal-backend li teżisti biss ġewwa netwerk privat. It-telefon jissolvi isem pubbliku, jgħaqqad ma' indirizz pubbliku fuq il-port 443 u jtemm handshake TLS normali. Nginx jaċċetta dik il-konnessjoni u mbagħad jiftaħ it-tieni waħda, kompletament separata, lejn indirizz li jasal għalih biss permezz ta' interface VPN. Xejn fuq it-telefon ma jinbidel, u t-telefon qatt ma jsir jaf li kien involut tunnel.

Is-segwitu ta' talba waħda permezz ta' żewġ konnessjonijiet

Is-segment tad-dħul huwa transazzjoni HTTP pubblika. Għandu isem pubbliku, ċertifikat pubbliku u mogħdija ta' tweġiba li trid taħdem għal kwalunkwe indirizz li jkollu l-viżitatur f'dak il-mument. Kwalunkwe bidla li tfixkel dik il-mogħdija tkisser lill-viżitaturi kollha f'daqqa. Huwa għalhekk li s-segment pubbliku huwa dak li l-inqas trid tesperimenta fuqu.

Is-segment tal-ħruġ huwa privat. Nginx isir klijent, jissolvi isem intern jew juża indirizz fiss, u jasal għal servizz li kieku jirrifjuta konnessjoni mill-internet.

Public client  -> frontend public address:443   (TLS, public name)
Frontend       -> VPN private backend 10.40.0.20:8443  (TLS, private name)

Żommhom separati f'moħħok u l-konfigurazzjoni ssir ovvja. Jekk tgħaqqadhom, fl-aħħar tispiċċa tipprova tagħmel klijent pubbliku jipparteċipa f'tunnel, u minn hemm ġej il-biċċa l-kbira tal-konfużjoni f'dan id-disinn. Is-segment privat jista' jkun fraġli. Dak pubbliku le.

Qabel tibni xi ħaġa minn dan, ikkonferma li l-pubblikazzjoni tal-applikazzjoni hija intenzjonata. Proxy li jaħdem huwa wkoll espożizzjoni li taħdem, u l-mudell ta' awtentikazzjoni għandu jkun deċiżjoni, mhux effett sekondarju.

L-isem tal-gateway irid jgħix it-tunnel

Hemm nassa sottili fis-soluzzjoni tal-ismijiet. Jekk DNS privat jissostitwixxi l-istess isem li l-profil VPN juża għall-gateway tiegħu stess, konnessjoni mill-ġdid tista' tispiċċa tipprova tilħaq dak il-gateway permezz tat-tunnel li suppost għandha tibni hija stess. Il-klijent jeħtieġ li dak l-isem jiġi solvut qabel ma jeżisti t-tunnel. Ladarba jiġi solvut ġewwa t-tunnel, il-konnessjoni qatt ma tista' tinbena.

Uża ismijiet approvati distinti għall-gateway u l-backend, u illimita l-politika tas-solvatur sabiex kull isem jiġi solvut fl-indirizz li jeħtieġ il-konsumatur tiegħu. Il-bidla tal-header Host ta' applikazzjoni ma tgħin xejn hawn, għax il-klijent VPN huwa dak li jagħmel it-tfittxija.

Imbagħad aħseb dwar l-ambitu. Il-frontend jeħtieġ rotta lejn l-indirizz tal-backend, u wkoll irid jibqa' jwieġeb lill-klijenti pubbliċi. Tunnel sħiħ fuq dak il-host jista' jissodisfa l-ewwel rekwiżit u jkisser it-tieni.

Fejn il-politika tippermetti, tunnel lejn destinazzjoni speċifika huwa d-disinn aktar nadif. Fejn il-politika timponi tunnel sħiħ, il-frontend jappartjeni għal kuntest tan-netwerk separat minflok ma jiġi mgħotti b'rotot ad hoc għall-viżitaturi magħrufa.

Ikteb il-blokk tas-server sabiex iż-żewġ segmenti jivverifikaw

Ejja ngħidu li l-backend jippreżenta ċertifikat għal dan l-isem: backend.corp.example u jwieġeb fuq indirizz privat. Il-konnessjoni ma' indirizz waqt li jiġi vverifikat isem hija eżattament l-iskop tal-għażliet SNI u tal-isem tal-modulu proxy.

upstream private_app {
    server 10.40.0.20:8443;
}

server {
    listen 443 ssl;
    server_name app.example.com;

    ssl_certificate     /etc/nginx/tls/app-fullchain.pem;
    ssl_certificate_key /etc/nginx/tls/app-key.pem;

    location / {
        proxy_pass https://private_app;
        proxy_ssl_server_name on;
        proxy_ssl_name backend.corp.example;
        proxy_ssl_trusted_certificate /etc/nginx/trust/backend-ca.pem;
        proxy_ssl_verify on;
        proxy_ssl_verify_depth 3;

        proxy_set_header Host app.example.com;
        proxy_set_header X-Forwarded-Proto https;
        proxy_set_header X-Forwarded-For $remote_addr;
    }
}

Kull mogħdija u indirizz hawn fuq huma placeholder. Il-partijiet importanti huma dawk li jżommu l-verifika mixgħula: isem x'jiġi kkontrollat, bundle ta' fiduċja li miegħu jiġi kkontrollat, u fond li jaqbel mal-katina approvata.

proxy_set_header Host app.example.com huwa intenzjonat. Il-backend għandu jiġi kkonfigurat biex jaċċetta dik l-oriġini pubblika, u għandu jafda l-headers mgħoddija biss minn dan il-frontend. Li tikteb fuq X-Forwarded-For bl-indirizz tal-klijent hija korretta għal proxy wieħed u ħażina għal katina, għalhekk implimentazzjoni b'ħafna proxy teħtieġ l-arranġament tagħha stess ta' indirizzi fiduċja.

Ġġiegħel l-oriġini pubblika tġib ruħha bħala oriġini pubblika

L-applikazzjoni għandha toħroġ URL assoluti, ridirezzjonijiet u cookies għall-oriġini pubblika. Jekk iddawwar viżitatur lejn backend.corp.example, dak il-viżitatur jintbagħat lejn isem li ma jistax jissolvi.

Sejjaħ dan permezz tas-setting tal-URL estern appoġġat mill-applikazzjoni u politika ta' ridirezzjoni riveduta, mhux billi tikteb mill-ġdid l-ismijiet tal-host fil-korpi tat-tweġiba. Is-sostituzzjoni tal-istrings f'kontenut arbitrarju tkisser il-payloads iffirmati u toħloq bugs diffiċli biex jiġu traċċati.

Il-cookies jixirqilhom l-istess attenzjoni. Cookie limitata għall-isem privat qatt mhi se tintbagħat minn browser li jaf biss dak pubbliku.

Ikkonferma wkoll li Nginx jista' verament ikollu s-socket pubbliku. Servizz web eżistenti fuq 443 irid jiċċaqlaq jew il-frontend irid jgħix x'imkien ieħor, għax żewġ proċessi ma jistgħux jorbtu l-istess indirizz u port.

Iċċekkja kull segment fejn fil-fatt jaħdem

Ivvalida l-konfigurazzjoni bil-parser installat qabel kull rikarigu, sabiex żball tat-tajping ma jwaqqax lis-semmiegħa li qed iservi bħalissa.

Imbagħad ittestja s-segment tal-backend mill-host tal-frontend innifsu, fl-istess kuntest tan-netwerk li juża Nginx. Ping mit-tunnel jipprova l-aċċessibilità u xejn dwar TLS, awtorizzazzjoni jew l-applikazzjoni.

Fl-aħħar agħmel talba pubblika ġdida lejn l-isem reali tal-host b'verifika normali taċ-ċertifikat, u osserva l-mogħdija tat-tweġiba mhux biss il-korp.

Żomm iż-żewġ osservazzjonijiet mal-konfigurazzjoni implimentata, u rreġistra x'jiġri meta t-tunnel mhux disponibbli. Il-frontend għandu jirritorna żball upstream ikkontrollat, mhux jaqa' bil-kwiet fuq backend ieħor li ħadd ma ddokumenta. 502 b'linja tal-log ċara hija riżultat tajjeb. Paġna maħżuna fil-cache minn oriġini mhux intenzjonata mhijiex.

Artikli relatati