Bereik 'n HTTPS-werf wat net via VPN beskikbaar is met 'n SSH-aanstuur
Oorbrug een HTTPS-diens wat net via VPN beskikbaar is met 'n plaaslike SSH-aanstuur, behou die regte gasheernaam met --connect-to, en weet wat 'n enkele TCP-aanstuur nie kan dek nie.
Een masjien het reeds goedgekeurde VPN-toegang, 'n tweede masjien het presies een private HTTPS-diens nodig, en 'n plaaslike SSH-aanstuur kan daardie gaping oorbrug sonder om aan die tweede masjien 'n tonnel te gee. Die aanstuur dra een TCP-bestemming eerder as die hele netwerk, en juis daardie beperking is die punt. Werk die vyf stappe hieronder in volgorde deur, want elkeen faal om 'n ander rede en 'n latere stap kan nie 'n vroeëre gaping red nie. As enige voorwaarde ontbreek, los hierdie ontwerp dit nie op nie, en geen hoeveelheid bevelinstelling sal dit regkry nie.
Stap een: bevestig die drie voorwaardes
Drie dinge moet reeds waar wees voordat enige bevel saak maak. Jy het toestemming nodig om die eerste masjien as 'n aanstuur-gasheer te gebruik, werkende SSH-toegang daarheen, en 'n bedienerbeleid wat die beoogde bestemming toelaat. 'n SSH-rekening wat vir lêeroordrag geskep is, het dalk aanstuur gedeaktiveer, en 'n bediener wat aanstuur toelaat, kan steeds beperk watter bestemmings daardeur bereikbaar is. Vra voor jy toets, want om 'n kollega se werkstasie as 'n springpunt te gebruik sonder ooreenkoms is 'n beleidsprobleem, selfs wanneer die bevel heeltemal werk.
Twee bevele beslis die tegniese helfte van daardie lys. Die eerste bewys dat die rekening en sleutel werk sonder 'n interaktiewe opdrag, en die tweede druk die effektiewe bedienerbeleid eerder as die gekommenteerde voorbeeld in die konfigurasielêer.
ssh -o BatchMode=yes [email protected] 'echo ok'
sudo sshd -T | grep -E 'allowtcpforwarding|permitopen'
Stap twee: bind 'n loopback-poort en hou die sessie lewendig
Op die masjien wat die kliëntprogram hardloop, maak 'n plaaslike aanstuur na die private diens oop. Bind dit uitdruklik aan loopback sodat dit nie aan die plaaslike netwerk bekend gemaak word nie, en kies 'n hoë poort wat geen plaaslike diens reeds beset nie. Hou die sessie aan die gang terwyl jy werk, want om dit te sluit sluit die luisteraar. ExitOnForwardFailure maak van 'n geweierde binding of 'n besette poort 'n onmiddellike afsluiting eerder as 'n sessie wat op bly sonder enige aanstuur, en dit is die foutmodus wat die meeste tyd mors.
Die private verbinding word vanaf die springgasheer gemaak, so daardie gasheer se DNS, roetes, VPN-beleid en dienstoegang moet almal werk. Die SSH-sessie skep nie bereikbaarheid wat die springgasheer nie het nie, en dit kan nie 'n roete herstel wat die VPN nooit gestuur het nie. Bevestig die luisteraar waar dit werklik is eerder as om op die bevel se stilte te vertrou.
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:9443:portal.lab.example:443 [email protected]
ss -ltn '( sport = :9443 )'
Stap drie: hou die HTTPS-naam wanneer die sokkel plaaslik is
Om na https://127.0.0.1:9443/ te blaai verander die TLS-bedienernaam en die toepassingsgesag. 'n Sertifikaat wat vir portal.lab.example uitgereik is, sal nie teen 'n loopback-adres valideer nie, en die gevolglike fout lyk soos 'n gebroke sertifikaat eerder as 'n aanstuur-kortpad. Vir 'n opdragreël-toets, hou die regte URL en verander net die sokkelbestemming. Dit is wat --connect-to doen, en die curl-handleiding dokumenteer die vierveldvorm wat hieronder gebruik word.
curl --noproxy portal.lab.example --connect-to portal.lab.example:443:127.0.0.1:9443 https://portal.lab.example/
Die naam bly in die URL, in die TLS-handdruk en in die Host-opskrif, terwyl die TCP-verbinding na die plaaslike luisteraar gaan. Die geen-proxy-opsie hou die toets op hierdie aanstuur eerder as om 'n gekonfigureerde HTTP-proxy dit te laat onderskep, en om sertifikaatverifikasie aan te hou is wat die resultaat betekenisvol maak.
Stap vier: weet wat een aanstuur nie kan dek nie
'n Enkele TCP-aanstuur dek een bestemmingspoort. 'n Bladsy wat na 'n tweede gasheernaam herlei, bates van 'n gasheer binne die private netwerk laai of na 'n ander poort pos, het sy eie aanstuur nodig, en elkeen daarvan het dieselfde beleidstoets as die eerste nodig. Blaaierwerkvloei voeg eie vereistes by, want die blaaier moet deur 'n proxy-konfigurasie of 'n plaaslike kartering aangesê word om die regte naam na die plaaslike poort te stuur. 'n Opdragreël-toets wat slaag bewys dus nie dat die blaaier sal slaag nie, al bewys dit die pad.
UDP, SMB-ontdekking en domeinaanmelding reis glad nie deur 'n TCP-aanstuur nie. As die werklike vereiste algemene netwerktoegang is, is hierdie ontwerp die verkeerde instrument en is 'n ondersteunde afstandtoegang-gateway die regte een.
Stap vyf: ruim op en teken dit aan
Stop die sessie wanneer die toets klaar is en bevestig die luisteraar is weg. As die gekose poort reeds beset was, kies 'n ander ongebruikte loopback-poort en werk die URL, die toetsbevel en die nota saam by, eerder as om 'n onverwante plaaslike diens te beëindig om die nommer vry te maak. Om 'n aanstuur op 'n skootrekenaar oop te laat, verander 'n diagnostiek in 'n onbestuurde diens.
Skryf die springgasheer, die aangestuurde bestemming, die plaaslike poort en wie die reëling goedgekeur het neer. 'n Aanstuur wat net in iemand se shell-geskiedenis bestaan, is een herlaai weg van 'n herhaalde ondersoek, en die volgende persoon sal nie weet watter van die drie voorwaardes reeds nagegaan is nie.