Zoeken op website

Hoe SSH-tunneling of port forwarding in Linux te creëren


SSH-tunneling (ook wel SSH port forwarding genoemd) leidt eenvoudigweg het lokale netwerkverkeer via SSH naar externe hosts. Dit houdt in dat al uw verbindingen beveiligd zijn met behulp van encryptie. Het biedt een eenvoudige manier om een standaard VPN (Virtual Private Network) op te zetten, handig om verbinding te maken met privénetwerken via onbeveiligde openbare netwerken zoals internet.

U kunt ook worden gebruikt om lokale servers achter NAT's en firewalls via beveiligde tunnels met internet te verbinden, zoals geïmplementeerd in ngrok.

SSH-sessies staan standaard het tunnelen van netwerkverbindingen toe en er zijn drie typen SSH-poortdoorschakeling: lokaal, op afstand en dynamisch > portforwarding.

In dit artikel laten we zien hoe je snel en eenvoudig SSH-tunneling of de verschillende soorten port forwarding in Linux kunt instellen.

Testomgeving:

Voor de doeleinden van dit artikel gebruiken we de volgende opstelling:

  1. Lokale host: 192.168.43.31
  2. Remote Host: Linode CentOS 7 VPS met hostnaam server1.example.com.

Normaal gesproken kunt u als volgt veilig verbinding maken met een externe server via SSH. In dit voorbeeld heb ik wachtwoordloze SSH-aanmelding geconfigureerd tussen mijn lokale en externe hosts, zodat er niet om het wachtwoord van de gebruikersbeheerder wordt gevraagd.

ssh [email   

Lokale SSH-poort doorsturen

Met dit type port forwarding kunt u vanaf uw lokale computer verbinding maken met een externe server. Ervan uitgaande dat u zich achter een beperkende firewall bevindt of door een uitgaande firewall wordt geblokkeerd voor toegang tot een applicatie die draait op poort 3000 op uw externe server.

U kunt een lokale poort (bijvoorbeeld 8080) doorsturen, die u vervolgens als volgt kunt gebruiken om lokaal toegang te krijgen tot de applicatie. De vlag -L definieert de poort die wordt doorgestuurd naar de externe host en de externe poort.

ssh [email  -L 8080:server1.example.com:3000

Het toevoegen van de vlag -N betekent dat u geen opdracht op afstand uitvoert; in dit geval krijgt u geen shell.

ssh -N [email  -L 8080:server1.example.com:3000

De schakeloptie -f geeft opdracht om ssh op de achtergrond uit te voeren.

ssh -f -N [email  -L 8080:server1.example.com:3000

Open nu op uw lokale computer een browser. In plaats van toegang te krijgen tot de externe applicatie via het adres server1.example.com:3000, kunt u eenvoudigweg localhost:8080 gebruiken of 192.168.43.31:8080, zoals weergegeven in de onderstaande schermafbeelding.

Externe SSH-poort doorsturen

Met poortdoorschakeling op afstand kunt u verbinding maken tussen uw externe machine en de lokale computer. Standaard staat SSH het doorsturen van externe poorten niet toe. U kunt dit inschakelen met behulp van de GatewayPorts-instructie in uw SSHD-hoofdconfiguratiebestand /etc/ssh/sshd_config op de externe host.

Open het bestand om het te bewerken met uw favoriete opdrachtregeleditor.

sudo vim /etc/ssh/sshd_config 

Zoek naar de vereiste richtlijn, verwijder het commentaar en stel de waarde in op yes, zoals weergegeven in de schermafbeelding.

GatewayPorts yes

Sla de wijzigingen op en sluit af. Vervolgens moet u sshd opnieuw opstarten om de recente wijziging die u heeft aangebracht toe te passen.

sudo systemctl restart sshd
OR
sudo service sshd restart 

Voer vervolgens de volgende opdracht uit om poort 5000 op de externe machine door te sturen naar poort 3000 op de lokale machine.

ssh -f -N [email  -R 5000:localhost:3000

Als u deze methode van tunneling eenmaal begrijpt, kunt u een lokale ontwikkelingsserver, vooral achter NAT's en firewalls, eenvoudig en veilig via beveiligde tunnels aan het internet koppelen. Tunnels zoals Ngrok, pagekite, localtunnel en vele andere werken op een vergelijkbare manier.

Dynamische SSH-poortdoorschakeling

Dit is het derde type port forwarding. In tegenstelling tot lokale en remote port forwarding, die communicatie met een enkele poort mogelijk maakt, maakt het een volledig scala aan TCP-communicatie over een reeks poorten mogelijk. Dynamische port forwarding stelt uw machine standaard in als een SOCKS-proxyserver die standaard luistert op poort 1080.

Om te beginnen is SOCKS een internetprotocol dat definieert hoe een client verbinding kan maken met een server via een proxyserver (in dit geval SSH). U kunt dynamische port forwarding inschakelen met de optie -D.

Met de volgende opdracht start u een SOCKS-proxy op poort 1080, zodat u verbinding kunt maken met de externe host.

ssh -f -N -D 1080 [email 

Vanaf nu kunt u toepassingen op uw machine deze SSH-proxyserver laten gebruiken door hun instellingen te bewerken en ze te configureren om deze te gebruiken, om verbinding te maken met uw externe server. Houd er rekening mee dat de SOCKS-proxy niet meer werkt nadat u uw SSH-sessie heeft afgesloten.

Lees ook: 5 manieren om externe SSH-sessies actief te houden na het sluiten van SSH

Samenvatting

In dit artikel hebben we de verschillende soorten port forwarding van de ene machine naar de andere uitgelegd, voor het tunnelen van verkeer via de beveiligde SSH-verbinding. Dit is een van de vele toepassingen van SSH. U kunt uw stem toevoegen aan deze gids via het onderstaande feedbackformulier.

Let op: SSH port forwarding heeft een aantal aanzienlijke nadelen. Er kan misbruik van worden gemaakt: het kan worden gebruikt om netwerkmonitoring en verkeersfilterprogramma's (of firewalls) te omzeilen. Aanvallers kunnen het gebruiken voor kwaadaardige activiteiten. In ons volgende artikel laten we zien hoe u SSH lokale port forwarding kunt uitschakelen. Blijf verbonden!