Sådan bruges SSH-tunneling for at få adgang til begrænsede servere og gennemse sikkert

En SSH-klient opretter forbindelse til en Secure Shell-server, som giver dig mulighed for at køre terminalkommandoer, som om du sad foran en anden computer. Men en SSH-klient giver dig også mulighed for at "tunnel" en port mellem dit lokale system og en ekstern SSH-server.

Der er tre forskellige typer SSH-tunneller, og de bruges alle til forskellige formål. Hver involverer brug af en SSH-server til at omdirigere trafik fra en netværksport til en anden. Trafikken sendes over den krypterede SSH-forbindelse, så den kan ikke overvåges eller ændres under transit.

Du kan gøre dette med sshkommandoen inkluderet på Linux, macOS og andre UNIX-lignende operativsystemer. På Windows, som ikke inkluderer en indbygget ssh-kommando, anbefaler vi det gratis værktøj PuTTY til at oprette forbindelse til SSH-servere. Det understøtter også SSH-tunneling.

Lokal portvideresendelse: Gør fjernressourcer tilgængelige på dit lokale system

“Lokal portvideresendelse” giver dig adgang til lokale netværksressourcer, der ikke er udsat for Internettet. Lad os for eksempel sige, at du vil have adgang til en databaseserver på dit kontor fra dit hjem. Af sikkerhedsmæssige årsager er denne databaseserver kun konfigureret til at acceptere forbindelser fra det lokale kontornetværk. Men hvis du har adgang til en SSH-server på kontoret, og at SSH-serveren tillader forbindelser uden for kontornetværket, kan du oprette forbindelse til den SSH-server hjemmefra og få adgang til databaseserveren, som om du var på kontoret. Dette er ofte tilfældet, da det er lettere at sikre en enkelt SSH-server mod angreb end at sikre en række forskellige netværksressourcer.

For at gøre dette opretter du en SSH-forbindelse med SSH-serveren og beder klienten om at videresende trafik fra en bestemt port fra din lokale pc - for eksempel port 1234 - til adressen på databaseserveren og dens port på kontornetværket. Så når du forsøger at få adgang til databaseserveren ved port 1234 din aktuelle pc, "localhost", bliver denne trafik automatisk "tunneleret" over SSH-forbindelsen og sendt til databaseserveren. SSH-serveren sidder i midten og videresender trafik frem og tilbage. Du kan bruge enhver kommandolinje eller et grafisk værktøj til at få adgang til databaseserveren, som om den kørte på din lokale pc.

For at bruge lokal videresendelse skal du oprette forbindelse til SSH-serveren normalt, men også angive -Largumentet. Syntaksen er:

ssh -L local_port: remote_address: remote_port [email protected]

Lad os for eksempel sige, at databaseserveren på dit kontor er placeret på 192.168.1.111 på kontornetværket. Du har adgang til kontorets SSH-server på ssh.youroffice.com, og din brugerkonto på SSH-serveren er bob. I så fald vil din kommando se sådan ud:

ssh -L 8888: 192.168.1.111: 1234 [email protected]

Efter at have kørt denne kommando, vil du være i stand til at få adgang til databaseserveren ved port 8888 på localhost. Så hvis databaseserveren tilbød webadgang, kan du tilslutte // localhost: 8888 til din webbrowser for at få adgang til den. Hvis du havde et kommandolinjeværktøj, der har brug for netværksadressen til en database, ville du pege på localhost: 8888. Al trafik sendt til port 8888 på din pc vil blive tunneleret til 192.168.1.111:1234 på dit kontornetværk.

Det er lidt mere forvirrende, hvis du vil oprette forbindelse til en serverapplikation, der kører på det samme system som selve SSH-serveren. Lad os for eksempel sige, at du har en SSH-server, der kører ved port 22 på din kontorfaciliteter, men at du også har en databaseserver, der kører ved port 1234 på det samme system på samme adresse. Du vil have adgang til databaseserveren hjemmefra, men systemet accepterer kun SSH-forbindelser på port 22, og dens firewall tillader ikke andre eksterne forbindelser.

I dette tilfælde kan du køre en kommando som den følgende:

ssh -L 8888: localhost: 1234 [email protected]

Når du forsøger at få adgang til databaseserveren i port 8888 på din nuværende pc, sendes trafikken over SSH-forbindelsen. Når det ankommer til systemet, der kører SSH-serveren, sender SSH-serveren det til port 1234 på “localhost”, som er den samme pc, der kører selve SSH-serveren. Så "localhost" i kommandoen ovenfor betyder "localhost" fra fjernserverens perspektiv.

For at gøre dette i PuTTY-applikationen i Windows skal du vælge Forbindelse> SSH> Tunneller. Vælg indstillingen "Lokal". For "Source Port" skal du indtaste den lokale port. For "Destination" skal du indtaste destinationsadressen og porten i formen remote_address: remote_port.

Hvis du for eksempel vil oprette den samme SSH-tunnel som ovenfor, skal du indtaste 8888som kildeport og localhost:1234som destination. Klik på "Tilføj" bagefter, og klik derefter på "Åbn" for at åbne SSH-forbindelsen. Du bliver også nødt til at indtaste adressen og porten på selve SSH-serveren på hovedskærmen "Session", før du naturligvis opretter forbindelse.

Fjernport-videresendelse: Gør lokale ressourcer tilgængelige på et eksternt system

“Remote port forwarding” er det modsatte af lokal videresendelse og bruges ikke så ofte. Det giver dig mulighed for at gøre en ressource på din lokale pc tilgængelig på SSH-serveren. Lad os for eksempel sige, at du kører en webserver på den lokale pc, du sidder foran. Men din pc er bag en firewall, der ikke tillader indgående trafik til serversoftwaren.

Forudsat at du har adgang til en ekstern SSH-server, kan du oprette forbindelse til denne SSH-server og bruge videresendelse af fjernport. Din SSH-klient vil bede serveren om at videresende en bestemt port - f.eks. Port 1234 - på SSH-serveren til en bestemt adresse og port på din nuværende pc eller dit lokale netværk. Når nogen får adgang til port 1234 på SSH-serveren, bliver denne trafik automatisk "tunneleret" over SSH-forbindelsen. Enhver med adgang til SSH-serveren kan få adgang til webserveren, der kører på din pc. Dette er effektivt en måde at tunnelere gennem firewalls.

Brug sshkommandoen sammen med -Rargumentet for at bruge fjernvideresendelse . Syntaksen er stort set den samme som ved lokal videresendelse:

ssh -R remote_port: local_address: local_port [email protected]

Lad os sige, at du vil gøre en serverapplikation, der lytter ved port 1234 på din lokale pc, tilgængelig i port 8888 på den eksterne SSH-server. SSH-serverens adresse er, ssh.youroffice.comog dit brugernavn på SSH-serveren er bob . Du kører følgende kommando:

ssh -R 8888: localhost: 1234 [email protected]

Nogen kunne derefter oprette forbindelse til SSH-serveren ved port 8888, og den forbindelse ville blive tunneleret til serverapplikationen, der kørte ved port 1234 på den lokale pc, du oprettede forbindelsen fra.

For at gøre dette i PuTTY på Windows skal du vælge Forbindelse> SSH> Tunneler. Vælg indstillingen "Fjern". Indtast fjernporten for "Source Port". For "Destination" skal du indtaste destinationsadressen og porten i formularen local_address: local_port.

Hvis du f.eks. Vil konfigurere eksemplet ovenfor, skal du indtaste 8888som kildeport og localhost:1234som destination. Klik på "Tilføj" bagefter, og klik derefter på "Åbn" for at åbne SSH-forbindelsen. Du bliver også nødt til at indtaste adressen og porten på selve SSH-serveren på hovedskærmen "Session", før du naturligvis opretter forbindelse.

Folk kunne derefter oprette forbindelse til port 8888 på SSH-serveren, og deres trafik ville blive tunneleret til port 1234 på dit lokale system.

Som standard lytter den eksterne SSH-server kun til forbindelser fra den samme vært. Med andre ord er det kun personer på det samme system som selve SSH-serveren, der kan oprette forbindelse. Dette er af sikkerhedsmæssige årsager. Du skal aktivere indstillingen "GatewayPorts" i sshd_config på den eksterne SSH-server, hvis du vil tilsidesætte denne adfærd.

Videresendelse af dynamisk port: Brug din SSH-server som en proxy

RELATERET: Hvad er forskellen mellem en VPN og en proxy?

Der er også “dynamisk portvideresendelse”, som fungerer på samme måde som en proxy eller VPN. SSH-klienten opretter en SOCKS-proxy, som du kan konfigurere applikationer til at bruge. Al trafik, der sendes via proxyen, sendes via SSH-serveren. Dette svarer til lokal videresendelse - det tager lokal trafik sendt til en bestemt port på din pc og sender den over SSH-forbindelsen til et fjerntliggende sted.

RELATERET: Hvorfor brug af et offentligt Wi-Fi-netværk kan være farligt, selv når man får adgang til krypterede websteder

Lad os for eksempel sige, at du bruger et offentligt Wi-Fi-netværk. Du vil gennemse sikkert uden at blive snoket på. Hvis du har adgang til en SSH-server derhjemme, kan du oprette forbindelse til den og bruge dynamisk portvideresendelse. SSH-klienten opretter en SOCKS-proxy på din pc. Al trafik, der sendes til denne proxy, sendes over SSH-serverforbindelsen. Ingen, der overvåger det offentlige Wi-Fi-netværk, vil være i stand til at overvåge din browsing eller censurere de websteder, du har adgang til. Fra perspektivet på ethvert websted, du besøger, vil det være som om du sad foran din pc derhjemme. Dette betyder også, at du kunne bruge dette trick til at få adgang til websteder, der kun gælder USA, uden for USA - forudsat at du selvfølgelig har adgang til en SSH-server i USA.

Som et andet eksempel vil du muligvis få adgang til et medieserverprogram, du har på dit hjemmenetværk. Af sikkerhedsmæssige årsager kan du muligvis kun have en SSH-server udsat for Internettet. Du tillader ikke indgående forbindelser fra internettet til din medieserverapplikation. Du kan oprette dynamisk portvideresendelse, konfigurere en webbrowser til at bruge SOCKS-proxyen og derefter få adgang til servere, der kører på dit hjemmenetværk via webbrowseren, som om du sad foran dit SSH-system derhjemme. For eksempel, hvis din medieserver er placeret i port 192.168.1.123 på dit hjemmenetværk, kan du slutte adressen 192.168.1.123til enhver applikation ved hjælp af SOCKS-proxyen, og du vil få adgang til medieserveren, som om du var på dit hjemmenetværk.

For at bruge dynamisk videresendelse skal du køre kommandoen ssh med -Dargumentet som sådan:

ssh -D local_port [email protected]

Lad os for eksempel sige, at du har adgang til en SSH-server på, ssh.yourhome.comog dit brugernavn på SSH-serveren er bob. Du vil bruge dynamisk videresendelse til at åbne en SOCKS-proxy i port 8888 på den aktuelle pc. Du kører følgende kommando:

ssh -D 8888 [email protected]

Du kan derefter konfigurere en webbrowser eller et andet program til at bruge din lokale IP-adresse (127.0.01) og port 8888. Al trafik fra det program omdirigeres gennem tunnelen.

For at gøre dette i PuTTY på Windows skal du vælge Forbindelse> SSH> Tunneler. Vælg indstillingen "Dynamisk". For "Source Port" skal du indtaste den lokale port.

Hvis du f.eks. Vil oprette en SOCKS-proxy på port 8888, skal du indtaste 8888som kildeport. Klik på "Tilføj" bagefter, og klik derefter på "Åbn" for at åbne SSH-forbindelsen. Du bliver også nødt til at indtaste adressen og porten på selve SSH-serveren på hovedskærmen "Session", før du naturligvis opretter forbindelse.

Du kan derefter konfigurere et program til at få adgang til SOCKS-proxyen på din lokale pc (dvs. IP-adresse 127.0.0.1, der peger på din lokale pc) og angive den korrekte port.

RELATERET: Sådan konfigureres en proxyserver i Firefox

For eksempel kan du konfigurere Firefox til at bruge SOCKS-proxyen. Dette er især nyttigt, fordi Firefox kan have sine egne proxyindstillinger og ikke behøver at bruge systemdækkende proxyindstillinger. Firefox sender sin trafik gennem SSH-tunnelen, mens andre applikationer bruger din internetforbindelse normalt.

Når du gør dette i Firefox, skal du vælge “Manuel proxy-konfiguration”, indtaste “127.0.0.1” i SOCKS-værtsboksen og indtaste den dynamiske port i feltet “Port”. Lad felterne HTTP Proxy, SSL Proxy og FTP Proxy være tomme.

Tunnelen forbliver aktiv og åben, så længe du har SSH-sessionforbindelsen åben. Når du afslutter din SSH-session og afbryder forbindelsen til en server, lukkes tunnelen også. Forbind bare igen med den relevante kommando (eller de relevante muligheder i PuTTY) for at genåbne tunnelen.