Pasiekti HTTPS svetainę, pasiekiamą tik per VPN, naudojant SSH persiuntimą
Sujunkite vieną HTTPS paslaugą, pasiekiamą tik per VPN, su vietiniu SSH persiuntimu, išsaugokite tikrąjį hosto pavadinimą su --connect-to ir žinokite, ko vienas TCP persiuntimas negali apimti.
Vienas kompiuteris jau turi patvirtintą VPN prieigą, antram kompiuteriui reikia tiksliai vienos privačios HTTPS paslaugos, o vietinis SSH persiuntimas gali užpildyti šią spragą nesuteikdamas antram kompiuteriui tunelio. Persiuntimas perduoda vieną TCP paskirties vietą, o ne visą tinklą, ir būtent šis apribojimas yra esmė. Atlikite penkis toliau pateiktus veiksmus iš eilės, nes kiekvienas nepavyksta dėl kitos priežasties, o vėlesnis veiksmas negali išgelbėti ankstesnės spragos. Jei trūksta bet kurios išankstinės sąlygos, šis sprendimas jos neišsprendžia ir joks komandų derinimas nepadės.
Pirmas veiksmas: patvirtinkite tris išankstines sąlygas
Trys dalykai turi būti jau tiesa, kol bet kuri komanda įgaus prasmę. Reikia leidimo naudoti pirmąjį kompiuterį kaip persiuntimo hostą, veikiančios SSH prieigos prie jo ir serverio politikos, leidžiančios numatytą paskirties vietą. SSH paskyra, sukurta failų perdavimui, gali turėti išjungtą persiuntimą, o serveris, leidžiantis persiuntimą, vis tiek gali apriboti, kurios paskirties vietos pasiekiamos per jį. Klauskite prieš testuodami, nes kolegos darbo stoties naudojimas kaip šuolio taško be susitarimo yra politikos problema, net kai komanda veikia nepriekaištingai.
Dvi komandos išsprendžia techninę to sąrašo pusę. Pirmoji įrodo, kad paskyra ir raktas veikia be interaktyvaus raginimo, o antroji išspausdina faktinę serverio politiką, o ne konfigūracijos faile pakomentuotą pavyzdį.
ssh -o BatchMode=yes [email protected] 'echo ok'
sudo sshd -T | grep -E 'allowtcpforwarding|permitopen'
Antras veiksmas: susiekite loopback prievadą ir palaikykite sesiją gyvą
Kompiuteryje, kuriame veikia kliento programa, atidarykite vietinį persiuntimą į privačią paslaugą. Susiekite jį aiškiai su loopback, kad jis nebūtų skelbiamas vietiniame tinkle, ir pasirinkite aukštą prievadą, kurio dar neužima jokia vietinė paslauga. Palaikykite sesiją veikiančią, kol dirbate, nes ją uždarius uždaromas ir klausytojas. ExitOnForwardFailure atmestą susiejimą ar užimtą prievadą paverčia nedelsiamu išėjimu, o ne sesija, kuri lieka be persiuntimo, ir būtent šis gedimo režimas praranda daugiausia laiko.
Privatus ryšys užmezgamas iš šuolio hosto, todėl jo DNS, maršrutai, VPN politika ir prieiga prie paslaugos turi visi veikti. SSH sesija nesukuria pasiekiamumo, kurio šuolio hostas neturi, ir negali sutaisyti maršruto, kurio VPN niekada nenusiuntė. Patvirtinkite klausytoją ten, kur jis iš tikrųjų yra, o ne pasitikėdami komandos tyla.
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:9443:portal.lab.example:443 [email protected]
ss -ltn '( sport = :9443 )'
Trečias veiksmas: išsaugokite HTTPS pavadinimą, kai lizdas yra vietinis
Naršymas į https://127.0.0.1:9443/ pakeičia TLS serverio pavadinimą ir programos įgaliojimą. Sertifikatas, išduotas portal.lab.example, nebus patvirtintas prieš loopback adresą, o gaunama klaida atrodo kaip sugadintas sertifikatas, o ne persiuntimo trumpinys. Komandinės eilutės testui išsaugokite tikrąjį URL ir pakeiskite tik lizdo paskirties vietą. Tai daro --connect-to, o curl vadove aprašyta toliau naudojama keturių laukų forma.
curl --noproxy portal.lab.example --connect-to portal.lab.example:443:127.0.0.1:9443 https://portal.lab.example/
Pavadinimas lieka URL, TLS rankos paspaudime ir Host antraštėje, o TCP ryšys eina į vietinį klausytoją. Parinktis be tarpinio serverio išlaiko testą šiame persiuntime, o ne leidžia sukonfigūruotam HTTP tarpiniam serveriui jį perimti, ir sertifikato tikrinimo palaikymas įjungtu daro rezultatą prasmingą.
Ketvirtas veiksmas: žinokite, ko vienas persiuntimas negali apimti
Vienas TCP persiuntimas apima vieną paskirties prievadą. Puslapis, kuris nukreipia į antrą hosto pavadinimą, įkelia išteklius iš hosto privačiame tinkle arba siunčia į kitą prievadą, turi savo persiuntimą, ir kiekvienam iš jų reikia tos pačios politikos patikros kaip ir pirmajam. Naršyklės darbo eigoms pridedami savi reikalavimai, nes naršyklei reikia nurodyti siųsti tikrąjį pavadinimą į vietinį prievadą per tarpinio serverio konfigūraciją arba vietinį susiejimą. Todėl sėkmingas komandinės eilutės testas neįrodo, kad naršyklė taip pat pavyks, nors įrodo kelią.
UDP, SMB aptikimas ir prisijungimas prie domeno visiškai neina per TCP persiuntimą. Jei tikrasis poreikis yra bendra prieiga prie tinklo, šis sprendimas yra netinkamas įrankis, o palaikomas nuotolinės prieigos šliuzas yra tinkamas.
Penktas veiksmas: sutvarkykite ir užsirašykite
Sustabdykite sesiją, kai testas baigtas, ir patvirtinkite, kad klausytojas dingo. Jei pasirinktas prievadas jau buvo užimtas, pasirinkite kitą nenaudojamą loopback prievadą ir atnaujinkite URL, testo komandą ir pastabą kartu, o ne sustabdykite nesusijusią vietinę paslaugą, kad atlaisvintumėte numerį. Paliktas atidarytas persiuntimas nešiojamajame kompiuteryje paverčia diagnostiką nevaldoma paslauga.
Užsirašykite šuolio hostą, persiųstą paskirties vietą, vietinį prievadą ir kas patvirtino susitarimą. Persiuntimas, egzistuojantis tik kažkieno shell istorijoje, yra vienas perkrovimas nuo pakartotinio tyrimo, o kitas žmogus nežinos, kuri iš trijų išankstinių sąlygų jau patikrinta.