Slik bruker du SSH Tunneling for å få tilgang til begrensede servere og bla sikkert
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 ditt lokale system og en ekstern SSH-server.
Det er tre forskjellige typer SSH tunneler, og de er alle brukt til forskjellige formål. Hver innebærer å bruke en SSH-server for å omdirigere trafikk fra en nettverksport til en annen. Trafikken sendes over den krypterte SSH-tilkoblingen, slik at den ikke kan overvåkes eller endres i transitt.
Du kan gjøre dette med ssh
kommandoen inkludert på Linux, MacOS og andre UNIX-lignende operativsystemer. På Windows, som ikke inneholder en innebygd ssh-kommando, anbefaler vi det gratis verktøyet PuTTY å koble til SSH-servere. Den støtter også SSH tunneling.
Lokal portvideresending: Gjør eksterne ressurser tilgjengelige på ditt lokale system
"Lokal port videresending" lar deg få tilgang til lokale nettverksressurser som ikke er utsatt for Internett. For eksempel, la oss si at du vil ha tilgang til en databaseserver på kontoret fra ditt hjem. Av sikkerhetshensyn er databaseserveren bare konfigurert til å godta tilkoblinger fra det lokale kontorsnettet. Men hvis du har tilgang til en SSH-server på kontoret, og at SSH-serveren tillater tilkoblinger fra utenfor kontornettverket, kan du koble til den SSH-serveren hjemmefra og få tilgang til databaseserveren som om du var på kontoret. Dette er ofte tilfellet, da det er lettere å sikre en enkelt SSH-server mot angrep enn å sikre en rekke forskjellige nettverksressurser.
For å gjøre dette etablerer du en SSH-forbindelse med SSH-serveren og forteller klienten å sende trafikk fra en bestemt port fra din lokale PC, for eksempel, port 1234 til adressen til databasens server og dens port på kontornettverket. Så når du forsøker å få tilgang til databaseserveren i port 1234, blir din nåværende PC, "localhost", trafikken automatisk "tunnelert" over SSH-tilkoblingen og sendt til databaseserveren. SSH-serveren sitter i midten, videresender trafikken frem og tilbake. Du kan bruke kommandolinje eller grafisk verktøy for å få tilgang til databaseserveren som om den kjørte på din lokale PC.
Hvis du vil bruke lokal videresending, kobler du vanligvis til SSH-serveren, men leverer også -L
argument. Syntaxen er:
ssh -L local_port: remote_address: remote_port [email protected]
For eksempel, la oss si at databaseserveren på kontoret ligger på 192.168.1.111 på kontornettverket. Du har tilgang til kontorets SSH-server på ssh.youroffice.com
, og din brukerkonto 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 at du har kjørt den kommandoen, kan du få tilgang til databaseserveren på port 8888 på localhost. Så hvis databaseserveren tilbys 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 på det på localhost: 8888. All trafikk sendt til port 8888 på PCen din, vil bli tunnelert til 192.168.1.111:1234 på kontoretettverket ditt.
Det er litt mer forvirrende hvis du vil koble til et serverprogram som kjører på samme system som SSH-serveren selv. For eksempel, la oss si at du har en SSH-server som kjører i port 22 på kontormaskinen din, men du har også 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 følgende:
ssh-l 8888: localhost: 1234 [email protected]
Når du forsøker å få tilgang til databaseserveren i port 8888 på din nåværende PC, blir trafikken sendt over SSH-tilkoblingen. Når den kommer på systemet som kjører SSH-serveren, sender SSH-serveren den til port 1234 på "localhost", som er den samme PC som kjører SSH-serveren selv. Så "localhost" i kommandoen ovenfor betyr "localhost" fra perspektivet til den eksterne serveren.
For å gjøre dette i PuTTY-programmet 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.
For eksempel, hvis du ønsket å sette opp samme SSH-tunnel som ovenfor, ville du skrive inn 8888
som kildeporten og localhost: 1234
som destinasjon. Klikk "Legg til" etterpå og klikk deretter "Åpne" for å åpne SSH-tilkoblingen. Du må også angi adressen og porten til SSH-serveren selv på hovedmenyen "Session" før du kobler til, selvsagt.
Fjernpostoverføring: Gjør lokale ressurser tilgjengelige på et eksternt system
"Ekstern port videresending" er motsatt av lokal videresending, og brukes ikke så ofte. Det lar deg lage en ressurs på din lokale PC som er tilgjengelig på SSH-serveren. For eksempel, la oss si at du kjører en webserver på den lokale PCen du sitter foran. Men PCen er bak en brannmur som ikke tillater innkommende trafikk til serverprogramvaren.
Forutsatt at du kan få tilgang til en ekstern SSH-server, kan du koble til den SSH-serveren og bruke ekstern portoverføring. Din SSH-klient vil fortelle serveren å videresende en bestemt port-si, port 1234-på SSH-serveren til en bestemt adresse og port på din nåværende PC eller lokalt nettverk. Når noen åpner porten 1234 på SSH-serveren, blir trafikken automatisk "tunnelert" over SSH-tilkoblingen. Alle som har tilgang til SSH-serveren, vil kunne få tilgang til webserveren som kjører på PCen. Dette er faktisk en måte å tunnelere gjennom brannmurer.
For å bruke ekstern videresending, bruk ssh
kommandoen med -R
argument. Syntaxen 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 et serverprogram lytte på port 1234 på din lokale PC som er tilgjengelig på port 8888 på den eksterne SSH-serveren. SSH-serverens adresse er ssh.youroffice.com
og brukernavnet ditt på SSH-serveren er bob. Du vil kjøre følgende kommando:
ssh-R 8888: localhost: 1234 [email protected]
Noen kunne da koble til SSH-serveren i port 8888 og den forbindelsen ville bli tunnelert til serverprogrammet som kjører i port 1234 på den lokale PCen du opprettet forbindelsen fra.
For å gjøre dette i PuTTY på Windows, velg Tilkobling> SSH> Tunneler. Velg alternativet "Fjern". For "Source Port", skriv inn den eksterne porten. For "Destinasjon", skriv inn destinasjonsadressen og porten i skjemaet local_address: local_port.
For eksempel, hvis du ønsket å sette opp eksemplet ovenfor, ville du skrive inn 8888
som kildeporten og localhost: 1234
som destinasjon. Klikk "Legg til" etterpå og klikk deretter "Åpne" for å åpne SSH-tilkoblingen. Du må også angi adressen og porten til SSH-serveren selv på hovedmenyen "Session" før du kobler til, selvsagt.
Folk kan da koble til port 8888 på SSH-serveren, og trafikken vil bli tunnelert til port 1234 på ditt lokale system.
Som standard vil den eksterne SSH-serveren bare lytte til tilkoblinger fra den samme verten. Med andre ord vil bare personer på samme system som SSH-serveren selv kunne koble seg 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.
Dynamisk port videresending: Bruk SSH-serveren som en proxy
Det er også "dynamisk port videresending", som fungerer på samme måte som en proxy eller VPN. SSH-klienten vil opprette en SOCKS-proxy som du kan konfigurere programmer for å bruke. All trafikk sendt via proxyen vil bli sendt via SSH-serveren. Dette ligner på lokal videresending - det tar lokal trafikk sendt til en bestemt port på PCen din og sender den over SSH-tilkoblingen til et eksternt sted.
For eksempel, la oss si at du bruker et offentlig Wi-Fi-nettverk. Du vil surfe sikkert uten å snooped på. Hvis du har tilgang til en SSH-server hjemme, kan du koble til den og bruke dynamisk port videresending. SSH-klienten vil opprette en SOCKS-proxy på din PC. All trafikk sendt til denne proxyen vil bli sendt over SSH-serverforbindelsen. Ingen som overvåker det offentlige Wi-Fi-nettverket, vil kunne overvåke surfingen eller censorere nettstedene du har tilgang til. Fra et nettsted som du besøker, vil det være som om du satt foran PCen hjemme. Dette betyr også at du kan bruke dette trikset til å få tilgang til amerikanske eneste nettsteder utenom USA, forutsatt at du har tilgang til en SSH-server i USA, selvfølgelig.
Som et annet eksempel, vil du kanskje få tilgang til et medieserverprogram du har på hjemmenettverket ditt. Av sikkerhetshensyn kan du bare ha en SSH-server utsatt for Internett. Du tillater ikke innkommende tilkoblinger fra Internett til medieserverprogrammet ditt. Du kan konfigurere dynamisk port videresending, konfigurere en nettleser for å bruke SOCKS proxy, og deretter få tilgang til servere som kjører på hjemmenettet 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, kan du koble adressen 192.168.1.123
inn i en hvilken som helst applikasjon som bruker SOCKS-proxyen, og du vil få tilgang til medieserveren som om du var i hjemmenettverket ditt.
For å bruke dynamisk videresending, kjør ssh kommandoen med -D
argument, slik:
ssh -D local_port [email protected]
For eksempel, la oss 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 for å åpne en SOCKS-proxy i port 8888 på den nåværende PCen. Du vil kjøre følgende kommando:
ssh-D 8888 [email protected]
Du kan da konfigurere en nettleser eller et annet program for å bruke din lokale IP-adresse (127.0.01) og port 8888. All trafikk fra det aktuelle 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, vil du legge inn 8888
som kildeporten. Klikk "Legg til" etterpå og klikk deretter "Åpne" for å åpne SSH-tilkoblingen. Du må også angi adressen og porten til SSH-serveren selv på hovedmenyen "Session" før du kobler til, selvsagt.
Du kan da konfigurere et program for å få tilgang til SOCKS-proxyen på din lokale PC (det vil si IP-adresse 127.0.0.1, som peker på din lokale PC) og angi riktig port.
For eksempel kan du konfigurere Firefox for å bruke SOCKS-proxyen. Dette er spesielt nyttig fordi Firefox kan ha sine egne proxy-innstillinger og trenger ikke å bruke proxy-innstillinger for hele systemet. Firefox sender sin trafikk via SSH-tunnelen, mens andre applikasjoner vil bruke 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 HTTP-proxy-, SSL-proxy- og FTP-proxy-boksene stå tomme.
Tunnelen forblir aktiv og åpen så lenge du har SSH-øktforbindelsen åpen. Når du avslutter SSH-økten din og kobler fra en server, blir tunnelen også lukket. Bare koble til med riktig kommando (eller de riktige alternativene i PuTTY) for å åpne tunnelen igjen.