En SSH-klient kobles til en Secure Shell-server , som lar deg kjøre terminalkommandoer som om du satt foran en annen datamaskin. Men en SSH-klient lar deg også "tunnelere" en port mellom det lokale systemet og en ekstern SSH-server.
Det finnes tre forskjellige typer SSH-tunneler, og de brukes alle til forskjellige formål. Hver innebærer bruk av en SSH-server for å omdirigere trafikk fra en nettverksport til en annen. Trafikken sendes over den krypterte SSH-forbindelsen, så den kan ikke overvåkes eller endres under transport.
Du kan gjøre dette med
ssh
kommando inkludert på Linux, macOS og annet
UNIX-aktig
operativsystemer. På Windows, som ikke inkluderer en innebygd ssh-kommando, anbefaler vi det gratis verktøyet
PUTTY
for å koble til SSH-servere. Den støtter også SSH-tunneling.
Lokal portvideresending: Gjør eksterne ressurser tilgjengelig på det lokale systemet
Med "lokal portvideresending" får du tilgang til lokale nettverksressurser som ikke er eksponert for Internett. La oss for eksempel si at du vil ha tilgang til en databaseserver på kontoret ditt hjemmefra. Av sikkerhetsgrunner er denne databaseserveren bare konfigurert til å godta tilkoblinger fra det lokale kontornettverket. Men hvis du har tilgang til en SSH-server på kontoret, og at SSH-serveren tillater tilkoblinger utenfor kontornettverket, kan du koble til den SSH-serveren hjemmefra og få tilgang til databaseserveren som om du var på kontoret. Dette er ofte tilfelle, ettersom det er lettere å sikre en enkelt SSH-server mot angrep enn å sikre en rekke forskjellige nettverksressurser.
For å gjøre dette oppretter du en SSH-forbindelse med SSH-serveren og ber klienten om å videresende trafikk fra en bestemt port fra din lokale PC - for eksempel port 1234 - til adressen til databasens server og porten på kontornettverket. Så når du prøver å få tilgang til databaseserveren ved port 1234 din nåværende PC, "localhost", blir denne trafikken automatisk "tunnelert" over SSH-forbindelsen og sendt til databaseserveren. SSH-serveren sitter i midten og videresender trafikk frem og tilbake. Du kan bruke hvilken som helst kommandolinje eller et grafisk verktøy for å få tilgang til databaseserveren som om den kjørte på din lokale PC.
For å bruke lokal videresending må du koble til SSH-serveren normalt, men også levere
-L
argument. Syntaksen er:
ssh -L local_port: remote_address: remote_port [email protected]
La oss for eksempel si at databaseserveren på kontoret ditt ligger 192.168.1.111 på kontornettverket. Du har tilgang til kontorets SSH-server på
ssh.youroffice.com
, og brukerkontoen din på SSH-serveren er
bob
. I så fall vil kommandoen din se slik ut:
ssh -L 8888: 192.168.1.111: 1234 [email protected]
Etter å ha kjørt den kommandoen, vil du kunne få tilgang til databaseserveren i port 8888 på localhost. Så hvis databaseserveren tilbød nettilgang, kan du koble http: // localhost: 8888 til nettleseren din for å få tilgang til den. Hvis du hadde et kommandolinjeverktøy som trenger nettverksadressen til en database, vil du peke det på localhost: 8888. All trafikk som sendes til port 8888 på PC-en din blir tunnelert til 192.168.1.111:1234 på kontornettverket ditt.
Det er litt mer forvirrende hvis du vil koble til en serverapplikasjon som kjører på samme system som selve SSH-serveren. La oss for eksempel si at du har en SSH-server som kjører i port 22 på kontordatamaskinen, men at du også har en databaseserver som kjører i port 1234 på samme system på samme adresse. Du vil ha tilgang til databaseserveren hjemmefra, men systemet godtar bare SSH-tilkoblinger på port 22, og brannmuren tillater ikke andre eksterne tilkoblinger.
I dette tilfellet kan du kjøre en kommando som den følgende:
ssh -L 8888: localhost: 1234 [email protected]
Når du prøver å få tilgang til databaseserveren ved port 8888 på din nåværende PC, vil trafikken bli sendt over SSH-forbindelsen. Når det kommer til systemet som kjører SSH-serveren, vil SSH-serveren sende den til port 1234 på "localhost", som er den samme PCen som kjører selve SSH-serveren. Så "localhost" i kommandoen ovenfor betyr "localhost" fra den eksterne serverens perspektiv.
For å gjøre dette i PuTTY-applikasjonen på Windows, velg Tilkobling> SSH> Tunneler. Velg alternativet “Lokalt”. For “Source Port”, skriv inn den lokale porten. For "Destinasjon", skriv inn destinasjonsadressen og porten i skjemaet remote_address: remote_port.
Hvis du for eksempel vil sette opp samme SSH-tunnel som ovenfor, vil du gå inn
8888
som kildeport og
lokal vert: 1234
som destinasjonen. Klikk på "Legg til" etterpå, og klikk deretter på "Åpne" for å åpne SSH-tilkoblingen. Du må også oppgi adressen og porten til selve SSH-serveren på hovedskjermen "Session" før du kobler til, selvfølgelig.
Ekstern portvideresending: Gjør lokale ressurser tilgjengelig på et eksternt system
"Ekstern portvideresending" er det motsatte av lokal videresending, og brukes ikke så ofte. Det lar deg gjøre en ressurs på din lokale PC tilgjengelig på SSH-serveren. La oss for eksempel si at du kjører en webserver på den lokale PC-en du sitter foran. Men PC-en din står bak en brannmur som ikke tillater innkommende trafikk til serverprogramvaren.
Forutsatt at du får tilgang til en ekstern SSH-server, kan du koble til den SSH-serveren og bruke ekstern portvideresending. SSH-klienten din vil be serveren om å videresende en spesifikk port — si port 1234 — på SSH-serveren til en spesifikk adresse og port på din nåværende PC eller lokale nettverk. Når noen får tilgang til porten 1234 på SSH-serveren, vil den trafikken automatisk bli "tunnelert" over SSH-forbindelsen. Alle som har tilgang til SSH-serveren, får tilgang til webserveren som kjører på PC-en din. Dette er effektivt en måte å tunnelere gjennom brannmurer.
For å bruke ekstern videresending, bruk
ssh
kommando med
-R
argument. Syntaksen er stort sett den samme som ved lokal videresending:
ssh -R remote_port: local_address: local_port [email protected]
La oss si at du vil gjøre en serverapplikasjon som lytter ved port 1234 på din lokale PC tilgjengelig i port 8888 på den eksterne SSH-serveren. SSH-serverens adresse er
ssh.youroffice.com
og brukernavnet ditt på SSH-serveren er
bob
. Du kjører følgende kommando:
ssh -R 8888: localhost: 1234 [email protected]
Noen kunne da koble til SSH-serveren ved port 8888, og den tilkoblingen vil bli tunnelert til serverapplikasjonen som kjører på port 1234 på den lokale PC-en du opprettet forbindelsen fra.
For å gjøre dette i PuTTY på Windows, velg Tilkobling> SSH> Tunneler. Velg alternativet "Fjernkontroll". For “Source Port”, skriv inn den eksterne porten. For "Destinasjon", skriv inn destinasjonsadresse og port i skjemaet local_address: local_port.
Hvis du for eksempel vil sette opp eksemplet ovenfor, vil du gå inn
8888
som kildeport og
lokal vert: 1234
som destinasjonen. Klikk på "Legg til" etterpå, og klikk deretter på "Åpne" for å åpne SSH-tilkoblingen. Du må også oppgi adressen og porten til selve SSH-serveren på hovedskjermen "Session" før du kobler til, selvfølgelig.
Folk kunne da koble til port 8888 på SSH-serveren, og trafikken deres ville bli tunnelert til port 1234 på ditt lokale system.
Som standard vil den eksterne SSH-serveren bare lytte til tilkoblinger fra samme vert. Med andre ord er det bare personer på samme system som selve SSH-serveren som kan koble til. Dette er av sikkerhetsgrunner. Du må aktivere alternativet "GatewayPorts" i sshd_config på den eksterne SSH-serveren hvis du vil overstyre denne oppførselen.
Videresending av dynamisk port: Bruk SSH-serveren din som en proxy
I SLEKT: Hva er forskjellen mellom en VPN og en proxy?
Det er også "dynamisk portoverføring", som fungerer på samme måte som en proxy eller VPN. SSH-klienten vil opprette en SOCKS proxy du kan konfigurere applikasjoner som skal brukes. All trafikk som sendes gjennom proxyen, vil bli sendt via SSH-serveren. Dette ligner på lokal videresending - det tar lokal trafikk som sendes til en bestemt port på PC-en, og sender den over SSH-forbindelsen til et eksternt sted.
La oss for eksempel si at du bruker et offentlig Wi-Fi-nettverk. Vil du bla sikkert uten å bli snoket på . Hvis du har tilgang til en SSH-server hjemme, kan du koble til den og bruke dynamisk portoverføring. SSH-klienten oppretter en SOCKS-proxy på PC-en. All trafikk som sendes til den proxyen, blir sendt over SSH-serverforbindelsen. Ingen som overvåker det offentlige Wi-Fi-nettverket, vil kunne overvåke surfingen din eller sensurere nettstedene du har tilgang til. Fra perspektivet til nettsteder du besøker, vil det være som om du satt foran PC-en hjemme. Dette betyr også at du kan bruke dette trikset for å få tilgang til nettsteder bare for USA mens du er utenfor USA - forutsatt at du selvfølgelig har tilgang til en SSH-server i USA.
Som et annet eksempel kan det være lurt å få tilgang til et medieserverprogram du har i hjemmenettverket. Av sikkerhetsmessige årsaker kan det hende du bare har en SSH-server eksponert for Internett. Du tillater ikke innkommende tilkoblinger fra Internett til medieserverprogrammet. Du kan konfigurere dynamisk portoverføring, konfigurere en nettleser til å bruke SOCKS-proxyen, og deretter få tilgang til servere som kjører på hjemmenettverket ditt via nettleseren som om du satt foran SSH-systemet ditt hjemme. For eksempel, hvis medieserveren din ligger i port 192.168.1.123 på hjemmenettverket ditt, kan du koble til adressen
192.168.1.123
inn i alle applikasjoner som bruker SOCKS-proxyen, og du vil få tilgang til medieserveren som om du var i hjemmenettverket.
For å bruke dynamisk videresending, kjør ssh-kommandoen med
-D
argument, slik:
ssh -D local_port [email protected]
La oss for eksempel si at du har tilgang til en SSH-server på
ssh.yourhome.com
og brukernavnet ditt på SSH-serveren er
bob
. Du vil bruke dynamisk videresending til å åpne en SOCKS-proxy i port 8888 på den nåværende PC-en. Du kjører følgende kommando:
ssh -D 8888 [email protected]
Deretter kan du konfigurere en nettleser eller et annet program for å bruke din lokale IP-adresse (127.0.01) og port 8888. All trafikk fra dette programmet vil bli omdirigert gjennom tunnelen.
For å gjøre dette i PuTTY på Windows, velg Tilkobling> SSH> Tunneler. Velg alternativet “Dynamisk”. For “Source Port”, skriv inn den lokale porten.
Hvis du for eksempel vil opprette en SOCKS-proxy på port 8888, skriver du inn
8888
som kildeport. Klikk på "Legg til" etterpå, og klikk deretter på "Åpne" for å åpne SSH-tilkoblingen. Du må også oppgi adressen og porten til selve SSH-serveren på hovedskjermen "Session" før du kobler til, selvfølgelig.
Deretter kan du konfigurere et program for å få tilgang til SOCKS-proxyen på din lokale PC (det vil si IP-adresse 127.0.0.1, som peker til din lokale PC) og spesifisere riktig port.
I SLEKT: Hvordan konfigurere en proxyserver i Firefox
For eksempel kan du konfigurer Firefox til å bruke SOCKS-proxyen . Dette er spesielt nyttig fordi Firefox kan ha sine egne proxy-innstillinger og ikke trenger å bruke system-proxy-innstillinger. Firefox vil sende trafikken sin gjennom SSH-tunnelen, mens andre applikasjoner bruker Internett-tilkoblingen din normalt.
Når du gjør dette i Firefox, velg “Manuell proxy-konfigurasjon”, skriv inn “127.0.0.1” i SOCKS-vertsboksen, og skriv inn den dynamiske porten i “Port” -boksen. La boksene HTTP Proxy, SSL Proxy og FTP Proxy være tomme.
Tunnelen vil forbli aktiv og åpen så lenge du har SSH-øktforbindelsen åpen. Når du avslutter SSH-økten og kobler fra en server, blir tunnelen også stengt. Bare koble til med riktig kommando (eller de aktuelle alternativene i PuTTY) for å åpne tunnelen på nytt.