SSH Tunneling - Local & Remote Port Forwarding (by Example)
Inhoudsopgave:
- Doorsturen van lokale poorten
- Remote Port Forwarding
- Dynamische poort doorsturen
- SSH-tunneling instellen in Windows
- Conclusie
SSH-tunneling of SSH-poort doorsturen is een methode voor het maken van een gecodeerde SSH-verbinding tussen een client en een servermachine waarmee servicespoorten kunnen worden doorgestuurd.
SSH-forwarding is handig voor het transporteren van netwerkgegevens van services die een niet-gecodeerd protocol gebruiken, zoals VNC of FTP, toegang tot geo-beperkte inhoud of het omzeilen van tussenliggende firewalls. Kortom, u kunt elke TCP-poort doorsturen en het verkeer via een beveiligde SSH-verbinding tunnelen.
Er zijn drie soorten SSH-poort doorsturen:
- Doorsturen van lokale poorten. - Stuurt een verbinding van de clienthost naar de SSH-serverhost en vervolgens naar de doelhostpoort. Poort doorsturen op afstand. - Stuur een poort door van de serverhost naar de clienthost en vervolgens naar de doelhostpoort. Dynamische poort doorsturen. - Creëert SOCKS-proxyserver die communicatie via verschillende poorten mogelijk maakt.
, zullen we het hebben over het instellen van lokale, externe en dynamische gecodeerde SSH-tunnels.
Doorsturen van lokale poorten
Met Lokale poort doorsturen kunt u een poort op de lokale (SSH-client) machine doorsturen naar een poort op de externe (SSH-server) machine, die vervolgens wordt doorgestuurd naar een poort op de doelmachine.
Bij dit type doorsturen luistert de SSH-client op een bepaalde poort en maakt een tunnelverbinding met die poort naar de opgegeven poort op de externe SSH-server, die vervolgens verbinding maakt met een poort op de bestemmingsmachine. De bestemmingsmachine kan de externe SSH-server of een andere machine zijn.
Het doorsturen van lokale poorten wordt meestal gebruikt om verbinding te maken met een externe service op een intern netwerk zoals een database of VNC-server.
In Linux, macOS en andere Unix-systemen geeft u de optie
-L
aan de lokale
ssh
client:
ssh -L LOCAL_PORT:DESTINATION:DESTINATION_PORT SSH_SERVER
De gebruikte opties zijn als volgt:
-
LOCAL_PORT- Het lokale computer-IP en poortnummer. WanneerLOCAL_IPwordt weggelaten, bindt de ssh-client op localhost.DESTINATION:DESTINATION_PORT- De IP- of hostnaam en de poort van de bestemmingsmachine.SERVER_IP- Het externe SSH-gebruiker en server IP-adres.
U kunt elk poortnummer groter dan
1024
als
LOCAL_PORT
. Poortennummers kleiner dan
1024
zijn geprivilegieerde poorten en kunnen alleen door root worden gebruikt. Als uw SSH-server op een andere poort dan 22 luistert (de standaardinstelling), gebruikt u de optie
-p
.
De bestemmingshostnaam moet kunnen worden omgezet van de SSH-server.
Stel dat u een MySQL-databaseserver hebt die wordt uitgevoerd op machine
db001.host
op een intern (privé) netwerk, op poort 3306 die toegankelijk is vanaf de machine
pub001.host
en dat u verbinding wilt maken via uw lokale machine
mysql
client met de databaseserver. Hiertoe kunt u de verbinding als volgt doorsturen:
ssh -L 3336:db001.host:3306 [email protected]
Nadat u de opdracht hebt uitgevoerd, wordt u gevraagd het externe SSH-gebruikerswachtwoord in te voeren. Nadat u deze hebt ingevoerd, wordt u aangemeld bij de externe server en wordt de SSH-tunnel tot stand gebracht. Het is een goed idee om een op SSH-sleutel gebaseerde verificatie in te stellen en verbinding te maken met de server zonder een wachtwoord in te voeren.
Als u nu uw lokale client-databaseclient naar
127.0.0.1:3336
db001.host:3306
, wordt de verbinding doorgestuurd naar de
db001.host:3306
MySQL-server via de
pub001.host
machine die als een tussenliggende server fungeert.
U kunt meerdere poorten doorsturen naar meerdere bestemmingen in een enkele SSH-opdracht. U hebt bijvoorbeeld een andere MySQL-databaseserver die wordt uitgevoerd op machine
db002.host
en u wilt verbinding maken met beide servers vanaf uw lokale client die u zou uitvoeren:
ssh -L 3336:db001.host:3306 3337:db002.host:3306 [email protected]
Om verbinding te maken met de tweede server gebruikt u
127.0.0.1:3337
.
Wanneer de bestemmingshost hetzelfde is als de SSH-server in plaats van het IP-adres of de hostnaam van de bestemmingshost op te geven, kunt u
localhost
.
Stel dat u verbinding moet maken met een externe machine via VNC die op dezelfde server draait en niet van buitenaf toegankelijk is. Het commando dat u zou gebruiken is:
ssh -L 5901:127.0.0.1:5901 -N -f [email protected]
De optie
-f
geeft de opdracht
ssh
aan dat deze op de achtergrond moet worden uitgevoerd en
-N
om geen opdracht op afstand uit te voeren. We gebruiken
localhost
omdat de VNC en de SSH-server op dezelfde host draaien.
Remote Port Forwarding
Port forwarding op afstand is het tegenovergestelde van lokale port forwarding. Hiermee kunt u een poort op de externe (ssh-server) machine doorsturen naar een poort op de lokale (ssh-client) machine, die vervolgens wordt doorgestuurd naar een poort op de doelmachine.
Bij dit type doorsturen luistert de SSH-server op een bepaalde poort en maakt een tunnelverbinding met die poort naar de opgegeven poort op de lokale SSH-client, die vervolgens verbinding maakt met een poort op de doelcomputer. De bestemmingsmachine kan de lokale of een andere machine zijn.
In Linux, macOS en andere Unix-systemen om een externe port forwarding te maken, geeft u de optie
-R
aan de
ssh
client:
ssh -R REMOTE_PORT:DESTINATION:DESTINATION_PORT SSH_SERVER
De gebruikte opties zijn als volgt:
-
REMOTE_PORT- Het IP-adres en het poortnummer op de externe SSH-server. Een legeREMOTEbetekent dat de externe SSH-server op alle interfaces zal binden.DESTINATION:DESTINATION_PORT- De IP- of hostnaam en de poort van de bestemmingsmachine.SERVER_IP- Het externe SSH-gebruiker en server IP-adres.
Lokale port forwarding wordt meestal gebruikt om iemand van buitenaf toegang te geven tot een interne service.
Stel dat u een webtoepassing op uw lokale computer ontwikkelt en een voorbeeld wilt laten zien aan uw mede-ontwikkelaar. U hebt geen openbaar IP, dus de andere ontwikkelaar heeft geen toegang tot de applicatie via internet.
ssh -L 8080:127.0.0.1:3000 -N -f [email protected]
Het bovenstaande commando zorgt ervoor dat ssh-server op poort
8080
luistert en al het verkeer vanaf deze poort naar uw lokale machine via poort
3000
.
Nu kan je mede-ontwikkelaar
the_ssh_server_ip:8080
in zijn / haar browser typen en een voorbeeld van je geweldige applicatie bekijken.
Dynamische poort doorsturen
Met dynamische port forwarding kunt u een socket maken op de lokale (ssh-client) machine die fungeert als SOCKS-proxyserver. Wanneer een client verbinding maakt met deze poort, wordt de verbinding doorgestuurd naar de externe (SSH-server) machine, die vervolgens wordt doorgestuurd naar een dynamische poort op de bestemmingsmachine.
Op deze manier maken alle toepassingen die de SOCKS-proxy gebruiken verbinding met de SSH-server en stuurt de server al het verkeer door naar de werkelijke bestemming.
In Linux geven macOS en andere Unix-systemen om een dynamische port forwarding (SOCKS) te maken de optie
-D
aan de
ssh
client:
ssh -D LOCAL_PORT SSH_SERVER
De gebruikte opties zijn als volgt:
-
LOCAL_PORT- Het lokale computer-IP en poortnummer. WanneerLOCAL_IPwordt weggelaten, bindt de ssh-client op localhost.SERVER_IP- Het externe SSH-gebruiker en server IP-adres.
Een typisch voorbeeld van een dynamische port forwarding is om het webbrowserverkeer via een SSH-server te tunnelen.
De volgende opdracht maakt een SOCKS-tunnel op poort
9090
:
ssh -D 9090 -N -f [email protected]
Nadat de tunneling is ingesteld, kunt u uw toepassing configureren om deze te gebruiken. Dit artikel legt uit hoe u Firefox en Google Chrome-browser kunt configureren om de SOCKS-proxy te gebruiken.
De port forwarding moet afzonderlijk worden geconfigureerd voor elke toepassing waarvan u het verkeer wilt tunnel.
SSH-tunneling instellen in Windows
Windows-gebruikers kunnen SSH-tunnels maken met de PuTTY SSH-client. Je kunt PuTTY hier downloaden.
-
Start Putty en voer het IP-adres van de SSH-server in het veld
Host name (or IP address)in.




Er verschijnt een nieuw venster waarin om uw gebruikersnaam en wachtwoord wordt gevraagd. Nadat u uw gebruikersnaam en wachtwoord hebt ingevoerd, wordt u aangemeld bij uw server en wordt de SSH-tunnel gestart.
Door de authenticatie van de openbare sleutel in te stellen, kunt u verbinding maken met uw server zonder een wachtwoord in te voeren.
Conclusie
We hebben u laten zien hoe u SSH-tunnels instelt en het verkeer doorstuurt via een beveiligde SSH-verbinding. Voor gebruiksgemak kunt u de SSH-tunnel definiëren in uw SSH-configuratiebestand of een Bash-alias maken waarmee de SSH-tunnel wordt ingesteld.
SSH-beveiligingHoe ssh tunneling in te stellen om een firewall te omzeilen
Een firewall is een goede zaak, maar als het u ervan weerhoudt iets te doen, dan is SSH Tunneling een goede optie om te verkennen.
Hoe wachtwoordloze ssh login in te stellen
In dit artikel laten we u zien hoe u een op SSH-sleutel gebaseerde verificatie instelt en verbinding maakt met uw Linux-servers zonder een wachtwoord in te voeren.
Hoe ssh-toetsen op centos in te stellen 7
In deze zelfstudie wordt uitgelegd hoe u SSH-sleutels op CentOS 7-systemen kunt genereren. We laten u ook zien hoe u een op SSH-sleutel gebaseerde verificatie instelt en verbinding maakt met uw externe Linux-servers zonder een wachtwoord in te voeren.












