Een HTTPS-site die alleen via VPN bereikbaar is, bereiken via een SSH-doorschakeling
Verbind één alleen via VPN beschikbare HTTPS-dienst met een lokale SSH-doorschakeling, behoud de echte hostnaam met --connect-to en weet wat één TCP-doorschakeling niet kan dekken.
Eén machine heeft al goedgekeurde VPN-toegang, een tweede machine heeft precies één private HTTPS-dienst nodig, en een lokale SSH-doorschakeling kan dat gat overbruggen zonder de tweede machine een tunnel te geven. De doorschakeling vervoert één TCP-bestemming in plaats van het hele netwerk, en juist die beperking is het punt. Doorloop de vijf stappen hieronder in volgorde, want elk faalt om een andere reden en een latere stap kan een eerder gat niet redden. Ontbreekt er een voorwaarde, dan lost dit ontwerp het niet op en geen enkele commandotuning helpt.
Stap één: bevestig de drie voorwaarden
Drie dingen moeten al waar zijn voordat welk commando dan ook iets betekent. U hebt toestemming nodig om de eerste machine als doorschakelhost te gebruiken, werkende SSH-toegang ernaartoe en een serverbeleid dat de bedoelde bestemming toestaat. Een SSH-account dat voor bestandsoverdracht is aangemaakt, kan doorschakeling uitgeschakeld hebben, en een server die doorschakeling toestaat, kan nog steeds beperken welke bestemmingen erdoor bereikbaar zijn. Vraag het voordat u test, want het werkstation van een collega zonder afspraak als springpunt gebruiken is een beleidsprobleem, zelfs wanneer het commando vlekkeloos werkt.
Twee commando's beslechten de technische helft van die lijst. Het eerste bewijst dat het account en de sleutel zonder interactieve prompt werken, en het tweede drukt het werkelijke serverbeleid af in plaats van het uitgecommentarieerde voorbeeld in het configuratiebestand.
ssh -o BatchMode=yes [email protected] 'echo ok'
sudo sshd -T | grep -E 'allowtcpforwarding|permitopen'
Stap twee: bind een loopback-poort en houd de sessie in leven
Open op de machine die de clienttoepassing uitvoert een lokale doorschakeling naar de private dienst. Bind die expliciet aan loopback zodat hij niet op het lokale netwerk wordt gepubliceerd, en kies een hoge poort die geen enkele lokale dienst al bezet. Houd de sessie actief terwijl u werkt, want sluiten ervan sluit de luisteraar. ExitOnForwardFailure maakt van een geweigerde binding of een bezette poort een onmiddellijke afsluiting in plaats van een sessie die zonder doorschakeling blijft staan, en dat is de foutmodus die de meeste tijd verspilt.
De private verbinding wordt vanaf de springhost gemaakt, dus de DNS, routes, VPN-beleid en diensttoegang van die host moeten allemaal werken. De SSH-sessie creëert geen bereikbaarheid die de springhost niet heeft, en kan geen route repareren die de VPN nooit heeft doorgestuurd. Bevestig de luisteraar waar hij werkelijk is in plaats van op de stilte van het commando te vertrouwen.
ssh -N -o ExitOnForwardFailure=yes -L 127.0.0.1:9443:portal.lab.example:443 [email protected]
ss -ltn '( sport = :9443 )'
Stap drie: behoud de HTTPS-naam wanneer de socket lokaal is
Naar https://127.0.0.1:9443/ browsen verandert de TLS-servernaam en het applicatiegezag. Een certificaat dat voor portal.lab.example is uitgegeven, valideert niet tegen een loopback-adres, en de resulterende fout ziet eruit als een kapot certificaat in plaats van een doorschakelingssluipweg. Behoud voor een commandoregel-test de echte URL en wijzig alleen de socketbestemming. Dat is wat --connect-to doet, en de curl-handleiding documenteert de vierveldenvorm die hieronder wordt gebruikt.
curl --noproxy portal.lab.example --connect-to portal.lab.example:443:127.0.0.1:9443 https://portal.lab.example/
De naam blijft in de URL, in de TLS-handshake en in de Host-header, terwijl de TCP-verbinding naar de lokale luisteraar gaat. De optie zonder proxy houdt de test op deze doorschakeling in plaats van een geconfigureerde HTTP-proxy hem te laten onderscheppen, en certificaatverificatie aan laten staan is wat het resultaat betekenisvol maakt.
Stap vier: weet wat één doorschakeling niet kan dekken
Eén TCP-doorschakeling dekt één bestemmingspoort. Een pagina die naar een tweede hostnaam doorverwijst, middelen van een host binnen het private netwerk laadt of naar een andere poort post, heeft zijn eigen doorschakeling nodig, en elk daarvan vraagt dezelfde beleidscontrole als de eerste. Browserworkflows voegen eigen eisen toe, omdat de browser moet worden verteld de echte naam naar de lokale poort te sturen via een proxyconfiguratie of een lokale toewijzing. Een geslaagde commandoregel-test bewijst dus niet dat de browser het zal halen, ook al bewijst hij het pad.
UDP, SMB-detectie en domeinaanmelding reizen helemaal niet door een TCP-doorschakeling. Is de werkelijke behoefte algemene netwerktoegang, dan is dit ontwerp het verkeerde gereedschap en een ondersteunde gateway voor toegang op afstand het juiste.
Stap vijf: ruim op en leg het vast
Stop de sessie wanneer de test klaar is en bevestig dat de luisteraar weg is. Was de gekozen poort al bezet, kies dan een andere ongebruikte loopback-poort en werk de URL, het testcommando en de notitie samen bij, in plaats van een ongerelateerde lokale dienst te stoppen om het nummer vrij te maken. Een doorschakeling open laten staan op een laptop maakt van een diagnose een onbeheerde dienst.
Noteer de springhost, de doorgeschakelde bestemming, de lokale poort en wie de regeling heeft goedgekeurd. Een doorschakeling die alleen in iemands shell-geschiedenis bestaat, is één herstart verwijderd van een herhaald onderzoek, en de volgende persoon weet niet welke van de drie voorwaarden al is gecontroleerd.