SSH Tunneling - Local & Remote Port Forwarding (by Example)
Innholdsfortegnelse:
- Lokal havnevideresending
- Videresending av ekstern port
- Videresending av dynamisk port
- Konfigurer SSH-tunnel i Windows
- Konklusjon
SSH-tunneling eller videresending av SSH-port er en metode for å lage en kryptert SSH-forbindelse mellom en klient og en servermaskin som tjenesteporter kan videresendes gjennom.
SSH-videresending er nyttig for å transportere nettverksdata for tjenester som bruker en ukryptert protokoll, for eksempel VNC eller FTP, få tilgang til geobegrenset innhold eller omgå mellomliggende brannmurer. I utgangspunktet kan du videresende hvilken som helst TCP-port og tunnelere trafikken over en sikker SSH-tilkobling.
Det er tre typer SSH-portvideresending:
- Lokal havnevideresending. - Videresender en forbindelse fra klientverten til SSH-serververten og deretter til destinasjonsvertsporten. Fjern portvideresending. - Videresender en port fra serververten til klientverten og deretter til destinasjonsvertsporten. Dynamisk portvideresending. - Oppretter SOCKS proxy-server som tillater kommunikasjon på tvers av en rekke porter.
, vil vi snakke om hvordan du setter opp lokale, eksterne og dynamiske krypterte SSH-tunneler.
Lokal havnevideresending
Ved lokal videresending av port kan du videresende en port på den lokale maskinen (ssh-klienten) til en port på den eksterne (ssh-serveren) maskinen, som deretter videresendes til en port på destinasjonsmaskinen.
I denne typen videresending lytter SSH-klienten på en gitt port og tunneler enhver forbindelse til den porten til den spesifiserte porten på den eksterne SSH-serveren, som deretter kobles til en port på destinasjonsmaskinen. Destinasjonsmaskinen kan være den eksterne SSH-serveren eller en hvilken som helst annen maskin.
Lokal portvideresending brukes mest for å koble til en ekstern tjeneste i et internt nettverk, for eksempel en database eller VNC-server.
I Linux passerer macOS og andre Unix-systemer for å lage en lokal port-videresending
-L
alternativet til
ssh
klienten:
ssh -L LOCAL_PORT:DESTINATION:DESTINATION_PORT SSH_SERVER
Alternativene som brukes er som følger:
-
LOCAL_PORT
- Det lokale maskinens ip og portnummer. NårLOCAL_IP
er utelatt, bindes ssh-klienten på localhost.DESTINATION:DESTINATION_PORT
- IP- eller vertsnavnet og porten til destinasjonsmaskinen.SERVER_IP
- Den eksterne SSH-brukeren og server-IP-adressen.
Du kan bruke et hvilket som helst portnummer større enn
1024
som en
LOCAL_PORT
. Porter som er mindre enn
1024
er privilegerte porter og kan bare brukes av root. Hvis SSH-serveren din lytter på en annen port enn 22 (standard), bruk alternativet
-p
.
Destinasjonsvertsnavnet må kunne løses fra SSH-serveren.
La oss si at du har en MySQL-databaseserver som kjører på maskin
db001.host
i et internt (privat) nettverk, på port 3306 som er tilgjengelig fra maskinen
pub001.host
og du vil koble deg til med din lokale maskin
mysql
klient til databaseserveren. For å gjøre det kan du videresende forbindelsen slik:
ssh -L 3336:db001.host:3306 [email protected]
Når du har kjørt kommandoen, blir du bedt om å oppgi det eksterne SSH-brukerpassordet. Etter at du har lagt den inn, blir du logget på den eksterne serveren og SSH-tunnelen blir opprettet. Det er lurt å sette opp en SSH-nøkkelbasert autentisering og koble til serveren uten å oppgi et passord.
Hvis du nå peker den lokale maskindatabaseklienten til
127.0.0.1:3336
, vil forbindelsen bli videresendt til
db001.host:3306
MySQL-serveren gjennom
pub001.host
maskinen som vil fungere som en mellomliggende server.
Du kan videresende flere porter til flere destinasjoner i en enkelt ssh-kommando. For eksempel har du en annen MySQL-databaseserver som kjører på maskinen
db002.host
og du vil koble til begge serverne fra den lokale klienten du vil kjøre:
ssh -L 3336:db001.host:3306 3337:db002.host:3306 [email protected]
For å koble til den andre serveren bruker du
127.0.0.1:3337
.
Når destinasjonsverten er den samme som SSH-serveren i stedet for å spesifisere destinasjonsverten IP eller vertsnavn, kan du bruke
localhost
.
Si at du trenger å koble til en ekstern maskin via VNC som kjører på samme server, og den er ikke tilgjengelig utenfra. Kommandoen du vil bruke er:
ssh -L 5901:127.0.0.1:5901 -N -f [email protected]
Alternativet
-f
forteller
ssh
kommandoen til å kjøre i bakgrunnen og
-N
ikke å utføre en ekstern kommando. Vi bruker
localhost
fordi VNC og SSH-serveren kjører på samme vert.
Videresending av ekstern port
Videresending av ekstern port er det motsatte av lokal portvideresending. Den lar deg videresende en port på den eksterne (ssh server) maskinen til en port på den lokale (ssh client) maskinen, som deretter videresendes til en port på destinasjonsmaskinen.
I denne typen videresending lytter SSH-serveren på en gitt port og tunneler enhver forbindelse til den porten til den spesifiserte porten på den lokale SSH-klienten, som deretter kobles til en port på destinasjonsmaskinen. Destinasjonsmaskinen kan være den lokale maskinen eller hvilken som helst annen maskin.
I Linux passerer macOS og andre Unix-systemer for å lage en ekstern portvideresending av alternativet
-R
til
ssh
klienten:
ssh -R REMOTE_PORT:DESTINATION:DESTINATION_PORT SSH_SERVER
Alternativene som brukes er som følger:
-
REMOTE_PORT
- IP-en og portnummeret på den eksterne SSH-serveren. En tomREMOTE
betyr at den eksterne SSH-serveren vil bindes på alle grensesnitt.DESTINATION:DESTINATION_PORT
- IP- eller vertsnavnet og porten til destinasjonsmaskinen.SERVER_IP
- Den eksterne SSH-brukeren og server-IP-adressen.
Lokal havnevideresending brukes mest for å gi tilgang til en intern tjeneste til noen utenfra.
La oss si at du utvikler en webapplikasjon på din lokale maskin, og at du vil vise en forhåndsvisning til medutvikleren din. Du har ikke en offentlig IP, slik at den andre utvikleren ikke får tilgang til applikasjonen via Internett.
ssh -L 8080:127.0.0.1:3000 -N -f [email protected]
Kommandoen over vil gjøre ssh-serveren til å lytte på port
8080
og tunnel all trafikk fra denne porten til din lokale maskin på port
3000
.
Nå kan din
the_ssh_server_ip:8080
skrive
the_ssh_server_ip:8080
i nettleseren hans og forhåndsvise det fantastiske programmet ditt.
Videresending av dynamisk port
Videresending av dynamisk port lar deg lage en socket på den lokale maskinen (ssh client) som fungerer som en SOCKS proxy-server. Når en klient kobler seg til denne porten, blir forbindelsen videresendt til den eksterne maskinen (ssh server), som deretter videresendes til en dynamisk port på destinasjonsmaskinen.
På denne måten kobles alle applikasjonene som bruker SOCKS-proxy til SSH-serveren, og serveren vil videresende all trafikk til den faktiske destinasjonen.
I Linux passerer macOS og andre Unix-systemer for å lage en dynamisk port forwarding (SOCKS) alternativet
-D
til
ssh
klienten:
ssh -D LOCAL_PORT SSH_SERVER
Alternativene som brukes er som følger:
-
LOCAL_PORT
- Det lokale maskinens ip og portnummer. NårLOCAL_IP
er utelatt, bindes ssh-klienten på localhost.SERVER_IP
- Den eksterne SSH-brukeren og server-IP-adressen.
Et typisk eksempel på en videresending av dynamisk port er å tunnelere nettlesertrafikken gjennom en SSH-server.
Følgende kommando oppretter en SOCKS-tunnel på port
9090
:
ssh -D 9090 -N -f [email protected]
Når tunnelen er etablert, kan du konfigurere applikasjonen din til å bruke den. Denne artikkelen forklarer hvordan du konfigurerer Firefox og Google Chrome nettleser til å bruke SOCKS-proxy.
Port-videresendingen må konfigureres separat for hvert program du vil tunnelere trafikken trodde det.
Konfigurer SSH-tunnel i Windows
Windows-brukere kan opprette SSH-tunneler ved å bruke PuTTY SSH-klienten. Du kan laste ned PuTTY her.
-
Start kitt, og skriv inn
Host name (or IP address)
til SSH-serveren i feltetHost name (or IP address)
.Et nytt vindu som ber om brukernavn og passord vises. Når du har angitt brukernavnet og passordet ditt, vil du være logget på serveren din og SSH-tunnelen startes.
Hvis du konfigurerer autentisering av offentlig nøkkel, kan du koble deg til serveren din uten å oppgi et passord.
Konklusjon
Vi har vist deg hvordan du setter opp SSH-tunneler og videresender trafikken gjennom en sikker SSH-forbindelse. For enkel bruk kan du definere SSH-tunnelen i SSH-konfigurasjonsfilen eller opprette et Bash-alias som vil sette opp SSH-tunnelen.
ssh sikkerhetHvordan sette opp ssh-nøkler på centos 7
Denne veiledningen forklarer hvordan du genererer SSH-nøkler på CentOS 7-systemer. Vi vil også vise deg hvordan du konfigurerer en SSH-nøkkelbasert autentisering og kobler til dine eksterne Linux-servere uten å oppgi et passord.
Hvordan sette opp ssh-nøkler på debian 9
I denne opplæringen skal vi beskrive hvordan du genererer SSH-nøkler på Debian 9-systemer. Vi vil også vise deg hvordan du konfigurerer en SSH-nøkkelbasert autentisering og kobler til dine eksterne Linux-servere uten å oppgi et passord.
Hvordan sette opp ssh-nøkler på ubuntu 18.04
I denne opplæringen skal vi gå gjennom hvordan du genererer SSH-nøkler på Ubuntu 18.04 maskiner. Vi vil også vise deg hvordan du konfigurerer en SSH-nøkkelbasert autentisering og kobler til dine eksterne Linux-servere uten å oppgi et passord.