Android

Hoe ssh tunneling in te stellen (port forwarding)

SSH Tunneling - Local & Remote Port Forwarding (by Example)

SSH Tunneling - Local & Remote Port Forwarding (by Example)

Inhoudsopgave:

Anonim

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. Wanneer LOCAL_IP wordt 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 lege REMOTE betekent 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. Wanneer LOCAL_IP wordt 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.

  1. 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-beveiliging