Sådan bruges SSH Tunneling for at få adgang til begrænsede servere og gennemse sikkert
En SSH-klient forbinder 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 tunneling, og de bruges alle til forskellige formål. Hver indebærer at bruge 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 ssh
kommando inkluderet på Linux, MacOS og andre UNIX-lignende operativsystemer. På Windows, som ikke indeholder en indbygget ssh-kommando, anbefaler vi det gratis værktøj PuTTY at oprette forbindelse til SSH-servere. Det understøtter også SSH tunneling.
Lokal portvideresendelse: Gør eksterne ressourcer tilgængelige på dit lokale system
"Local port forwarding" giver dig adgang til lokale netværksressourcer, der ikke udsættes for internettet. Lad os f.eks. Sige, at du vil få adgang til en databaseserver på dit kontor fra dit hjem. Af sikkerhedsmæssige årsager er databaseserveren kun konfigureret til at acceptere forbindelser fra det lokale kontors netværk. Men hvis du har adgang til en SSH-server på kontoret, og at SSH-serveren tillader forbindelser uden for kontornetværket, så kan du oprette forbindelse til denne 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 etablerer du en SSH-forbindelse med SSH-serveren og fortæller klienten at videresende trafik fra en bestemt port fra din lokale pc - for eksempel port 1234 - til adressen på databasens server og dens port på kontornetværket. Så når du forsøger at få adgang til databaseserveren i port 1234, bliver din nuværende pc, "localhost", automatisk "tunnelet" over SSH-forbindelsen og sendt til databaseserveren. SSH-serveren sidder i midten, videresender trafikken frem og tilbage. Du kan bruge en 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 normalt forbinde til SSH-serveren, men også levere -L
argument. Syntaxen er:
ssh -L local_port: remote_address: remote_port [email protected]
Lad os f.eks. 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]
Når du har kørt den kommando, kunne du få adgang til databaseserveren i port 8888 hos localhost. Så hvis databaseserveren tilbyder webadgang, kan du tilslutte http: // localhost: 8888 til din webbrowser for at få adgang til det. Hvis du havde et kommandolinjeværktøj, der kræver netværksadressen til en database, skal du pege på det på localhost: 8888. All trafik sendt til port 8888 på din pc vil blive tunnelet til 192.168.1.111:1234 på dit kontor netværk.
Det er lidt mere forvirrende, hvis du vil oprette forbindelse til et serverprogram, der kører på samme system som SSH-serveren selv. Lad os f.eks. Sige, at du har en SSH-server, der kører i port 22 på din kontormaskine, men du har også en databaseserver, der kører i port 1234 på samme system på samme adresse. Du vil have adgang til databaseserveren hjemmefra, men systemet accepterer kun SSH-forbindelser på port 22, og dets firewall tillader ikke andre eksterne forbindelser.
I dette tilfælde kan du køre en kommando som 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 den kommer til systemet, der kører SSH-serveren, sender SSH-serveren den til port 1234 på "localhost", som er den samme pc, der kører SSH-serveren selv. Så betyder "localhost" i kommandoen ovenfor "localhost" fra fjernserverens perspektiv.
For at gøre dette i PuTTY-applikationen på Windows skal du vælge Forbindelse> SSH> Tunneler. Vælg "Lokal" indstillingen. For "Source Port" skal du indtaste den lokale port. For "Destination" skal du indtaste destinationsadressen og porten i formularen remote_address: remote_port.
For eksempel, hvis du ønskede at oprette samme SSH-tunnel som ovenfor, ville du indtaste 8888
som kildeporten og localhost: 1234
som destinationen. Klik på "Tilføj" efterfølgende, og klik derefter på "Åbn" for at åbne SSH-forbindelsen. Du skal også indtaste adressen og porten på SSH-serveren selv på hovedmenuen "Session" før du tilslutter selvfølgelig.
Remote Port Forwarding: Gør lokale ressourcer tilgængelige på et fjernsystem
"Remote port forwarding" er modsat af lokal forwarding, og bruges ikke så ofte. Det giver dig mulighed for at lave en ressource på din lokale pc, der er tilgængelig på SSH-serveren. Lad os f.eks. 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.
Hvis du antager, at du kan få adgang til en ekstern SSH-server, kan du oprette forbindelse til den pågældende SSH-server og bruge fjernadaptering. Din SSH-klient vil fortælle serveren at videresende en bestemt port-say, port 1234-på SSH-serveren til en bestemt adresse og port på din nuværende pc eller lokalt netværk. Når nogen har adgang til havnen 1234 på SSH-serveren, bliver denne trafik automatisk "tunnelet" over SSH-forbindelsen. Enhver med adgang til SSH-serveren vil kunne få adgang til webserveren, der kører på din pc. Dette er effektivt en måde at tunnel gennem firewalls.
For at bruge fjernoverførsel skal du bruge ssh
kommando med -R
argument. Syntaxen er stort set den samme som ved lokal fremsendelse:
ssh -R remote_port: local_address: local_port [email protected]
Lad os sige, at du vil lytte til et serverprogram i port 1234 på din lokale pc, der er tilgængelig i port 8888 på den eksterne SSH-server. SSH-serverens adresse er ssh.youroffice.com
og dit brugernavn på SSH-serveren er bob. Du vil køre følgende kommando:
ssh-R 8888: localhost: 1234 [email protected]
Nogen kunne derefter oprette forbindelse til SSH-serveren i port 8888, og denne forbindelse ville blive tunnelet til serverprogrammet, der kører i port 1234 på den lokale pc, du etablerede forbindelsen fra.
For at gøre dette i PuTTY på Windows skal du vælge Forbindelse> SSH> Tunnel. Vælg alternativet "Fjern". For "Source Port" skal du indtaste fjernporten. For "Destination" skal du indtaste destinationsadressen og porten i formularen local_address: local_port.
For eksempel, hvis du ønskede at oprette eksemplet ovenfor, ville du indtaste 8888
som kildeporten og localhost: 1234
som destinationen. Klik på "Tilføj" efterfølgende, og klik derefter på "Åbn" for at åbne SSH-forbindelsen. Du skal også indtaste adressen og porten på SSH-serveren selv på hovedmenuen "Session" før du tilslutter selvfølgelig.
Folk kunne derefter oprette forbindelse til port 8888 på SSH-serveren, og deres trafik ville blive tunnelet 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 vil kun personer på samme system som SSH-serveren selv kunne oprette forbindelse. Dette er af sikkerhedsmæssige grunde. Du skal aktivere indstillingen "GatewayPorts" i sshd_config på den eksterne SSH-server, hvis du vil tilsidesætte denne adfærd.
Dynamisk port videresendelse: Brug din SSH-server som en proxy
Der er også "dynamisk port forwarding", som fungerer på samme måde som en proxy eller VPN. SSH-klienten vil oprette en SOCKS-proxy, som du kan konfigurere applikationer til at bruge. Al den trafik, der sendes via proxyen, sendes via SSH-serveren. Dette ligner lokal forwarding-det tager lokal trafik sendt til en bestemt port på din pc og sender den over SSH-forbindelsen til en fjernplacering.
Lad os f.eks. Sige, at du bruger et offentligt Wi-Fi-netværk. Du vil gennemse sikkert uden at snooped på. Hvis du har adgang til en SSH-server derhjemme, kan du oprette forbindelse til den og bruge dynamisk port videresendelse. SSH-klienten vil oprette en SOCKS-proxy på din pc. All trafik sendt til denne proxy vil blive sendt via SSH-serverforbindelsen. Ingen, der overvåger det offentlige Wi-Fi-netværk, vil kunne overvåge din browsing eller censurere de websteder, du kan få adgang til. Ud fra perspektivet af websteder, 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 USA's eneste websteder uden for USA, idet du antager, at du har adgang til en SSH-server i USA selvfølgelig.
Som et andet eksempel kan du få adgang til et medieserverprogram, du har på dit hjemmenetværk. Af sikkerhedsmæssige årsager må du kun have en SSH-server udsat for internettet. Du tillader ikke indgående forbindelser fra internettet til dit medieserverprogram. Du kan konfigurere 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. Hvis din medieserver f.eks. Er placeret i port 192.168.1.123 på dit hjemmenetværk, kan du tilslutte adressen 192.168.1.123
ind i enhver applikation, der bruger SOCKS proxyen, og du ville få adgang til medieserveren som om du var på dit hjemmenetværk.
For at bruge dynamisk videresendelse skal du køre kommandoen ssh med -D
argument, som sådan:
ssh -D local_port [email protected]
Lad os f.eks. Sige, at du har adgang til en SSH-server på ssh.yourhome.com
og dit brugernavn på SSH-serveren er bob
. Du vil bruge dynamisk viderestilling til at åbne en SOCKS-proxy i port 8888 på den aktuelle pc. Du vil køre 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. Alle trafik fra det pågældende program vil blive omdirigeret gennem tunnelen.
For at gøre dette i PuTTY på Windows skal du vælge Forbindelse> SSH> Tunnel. Vælg indstillingen "Dynamisk". For "Source Port" skal du indtaste den lokale port.
Hvis du for eksempel ville oprette en SOCKS-proxy på port 8888, skulle du indtaste 8888
som kildeporten. Klik på "Tilføj" efterfølgende, og klik derefter på "Åbn" for at åbne SSH-forbindelsen. Du skal også indtaste adressen og porten på SSH-serveren selv på hovedmenuen "Session" før du tilslutter selvfølgelig.
Du kan derefter konfigurere en applikation for at få adgang til SOCKS-proxyen på din lokale pc (det vil sige IP-adresse 127.0.0.1, som peger på din lokale pc) og angive den korrekte port.
For eksempel kan du konfigurere Firefox til at bruge SOCKS proxyen. Dette er særligt nyttigt, fordi Firefox kan have sine egne proxyindstillinger og ikke behøver at bruge system-wide proxy-indstillinger. Firefox sender sin trafik via SSH-tunnelen, mens andre applikationer normalt bruger din internetforbindelse.
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 "Port" -boksen. Lad HTTP Proxy-, SSL Proxy- og FTP Proxy-bokse være tomme.
Tunneln forbliver aktiv og åben, så længe du har SSH-sessionsforbindelsen åben. Når du afslutter din SSH-session og afbryder forbindelsen fra en server, lukkes tunnelen også. Du skal bare genoprette forbindelse med den relevante kommando (eller de relevante indstillinger i PuTTY) for at genåbne tunnelen.