/ / Hoe SSH-tunneling te gebruiken om toegang te krijgen tot beperkte servers en veilig te bladeren

SSH-tunneling gebruiken om toegang te krijgen tot beperkte servers en veilig te bladeren

Een SSH-client maakt verbinding met een Secure Shell-server,waarmee u terminalopdrachten kunt uitvoeren alsof u voor een andere computer zit. Maar met een SSH-client kunt u ook een poort "tunnelen" tussen uw lokale systeem en een externe SSH-server.

Er zijn drie verschillende soorten SSH-tunneling,en ze worden allemaal voor verschillende doeleinden gebruikt. Elk omvat het gebruik van een SSH-server om verkeer van de ene netwerkpoort naar de andere om te leiden. Het verkeer wordt verzonden via de gecodeerde SSH-verbinding, zodat het tijdens de overdracht niet kan worden gecontroleerd of gewijzigd.

U kunt dit doen met de ssh commando opgenomen op Linux, macOS en andereUNIX-achtige besturingssystemen. Op Windows, dat geen ingebouwde ssh-opdracht bevat, raden we de gratis tool PuTTY aan om verbinding te maken met SSH-servers. Het ondersteunt ook SSH-tunneling.

Local Port Forwarding: maak externe bronnen toegankelijk op uw lokale systeem

Met "Local port forwarding" krijgt u toeganglokale netwerkbronnen die niet zijn blootgesteld aan internet. Stel dat u vanuit uw huis toegang wilt tot een databaseserver op uw kantoor. Om veiligheidsredenen is die databaseserver alleen geconfigureerd om verbindingen van het lokale kantoornetwerk te accepteren. Maar als je op kantoor toegang hebt tot een SSH-server, en die SSH-server staat verbindingen van buiten het kantoornetwerk toe, dan kun je vanuit huis verbinding maken met die SSH-server en toegang krijgen tot de databaseserver alsof je op kantoor bent. Dit is vaak het geval, omdat het gemakkelijker is om een ​​enkele SSH-server te beveiligen tegen aanvallen dan om verschillende netwerkbronnen te beveiligen.

Hiervoor breng je een SSH-verbinding tot stand metde SSH-server en vertel de client om verkeer van een specifieke poort van uw lokale pc, bijvoorbeeld poort 1234, door te sturen naar het adres van de databaseserver en de poort op het kantoornetwerk. Dus als u probeert toegang te krijgen tot de databaseserver op poort 1234 van uw huidige pc, "localhost", wordt dat verkeer automatisch via de SSH-verbinding "getunneld" en naar de databaseserver gestuurd. De SSH-server zit in het midden en stuurt verkeer heen en weer. U kunt elke opdrachtregel of elk grafisch hulpmiddel gebruiken om toegang te krijgen tot de databaseserver alsof deze op uw lokale pc draait.

Om lokaal doorsturen te gebruiken, maakt u normaal verbinding met de SSH-server, maar levert u ook het -L argument. De syntaxis is:

ssh -L local_port:remote_address:remote_port username@server.com

Stel dat de databaseserver op uw kantoor zich op het kantoornetwerk bevindt op 192.168.1.111. Je hebt toegang tot de SSH-server van het kantoor op ssh.youroffice.com , en uw gebruikersaccount op de SSH-server is bob . In dat geval ziet uw commando er als volgt uit:

ssh -L 8888:192.168.1.111:1234 bob@ssh.youroffice.com

Nadat je die opdracht hebt uitgevoerd, zou je dat kunnen doentoegang tot de databaseserver op poort 8888 op localhost. Dus als de databaseserver webtoegang biedt, kunt u http: // localhost: 8888 in uw webbrowser steken om er toegang toe te krijgen. Als je een opdrachtregelprogramma had dat het netwerkadres van een database nodig heeft, zou je het naar localhost: 8888 verwijzen. Al het verkeer dat naar poort 8888 op uw pc wordt gestuurd, wordt getunneld naar 192.168.1.111:1234 op uw kantoornetwerk.

Het is een beetje meer verwarrend als je dat wiltmaak verbinding met een servertoepassing die op hetzelfde systeem draait als de SSH-server zelf. Stel dat u een SSH-server heeft die op poort 22 op uw kantoorcomputer draait, maar dat u ook een databaseserver heeft die op poort 1234 draait op hetzelfde systeem op hetzelfde adres. U wilt vanuit huis toegang tot de databaseserver, maar het systeem accepteert alleen SSH-verbindingen op poort 22 en de firewall staat geen andere externe verbindingen toe.

In dit geval kunt u een commando uitvoeren zoals het volgende:

ssh -L 8888:localhost:1234 bob@ssh.youroffice.com

Wanneer u probeert toegang te krijgen tot de databaseserver oppoort 8888 op uw huidige pc, wordt het verkeer via de SSH-verbinding verzonden. Wanneer het aankomt op het systeem waarop de SSH-server draait, stuurt de SSH-server het naar poort 1234 op "localhost", wat dezelfde pc is waarop de SSH-server zelf draait. Dus de "localhost" in de bovenstaande opdracht betekent "localhost" vanuit het perspectief van de externe server.

To do this in the PuTTY application on Windows, selecteer Verbinding> SSH> Tunnels. Selecteer de optie "Lokaal". Voer voor "Bronpoort" de lokale poort in. Voer voor "Bestemming" het bestemmingsadres en de poort in in de vorm remote_address: remote_port.

Als u bijvoorbeeld dezelfde SSH-tunnel als hierboven wilt opzetten, gaat u naar binnen 8888 als de bronpoort en localhost:1234 als bestemming. Klik daarna op "Toevoegen" en klik vervolgens op "Openen" om de SSH-verbinding te openen. U moet natuurlijk ook het adres en de poort van de SSH-server zelf invoeren op het hoofdscherm "Sessie" voordat u verbinding maakt.

Remote Port Forwarding: maak lokale bronnen toegankelijk op een extern systeem

“Remote port forwarding” is the opposite of local doorsturen en wordt niet zo vaak gebruikt. Hiermee kunt u een bron op uw lokale pc beschikbaar maken op de SSH-server. Stel dat u een webserver gebruikt op de lokale pc waar u voor zit. Maar uw pc bevindt zich achter een firewall die inkomend verkeer naar de serversoftware niet toestaat.

Ervan uitgaande dat u toegang hebt tot een externe SSH-server, ukan verbinding maken met die SSH-server en externe port forwarding gebruiken. Uw SSH-client zal de server vertellen om een ​​specifieke poort, zeg maar poort 1234, op de SSH-server door te sturen naar een specifiek adres en poort op uw huidige pc of lokaal netwerk. Wanneer iemand toegang krijgt tot poort 1234 op de SSH-server, wordt dat verkeer automatisch via de SSH-verbinding "getunneld". Iedereen met toegang tot de SSH-server heeft toegang tot de webserver die op uw pc draait. Dit is in feite een manier om door firewalls te tunnelen.

Om doorschakelen op afstand te gebruiken, gebruikt u de ssh commando met de -R argument. De syntaxis is grotendeels hetzelfde als bij lokaal doorsturen:

ssh -R remote_port:local_address:local_port username@server.com

Stel dat u een servertoepassing wilt laten luisteren op poort 1234 op uw lokale pc, beschikbaar op poort 8888 op de externe SSH-server. Het adres van de SSH-server is ssh.youroffice.com en je gebruikersnaam op de SSH-server is Bob. Je zou de volgende opdracht uitvoeren:

ssh -R 8888:localhost:1234 bob@ssh.youroffice.com

Iemand zou dan verbinding kunnen maken met de SSH-server op poort 8888 en die verbinding zou worden getunneld naar de servertoepassing die wordt uitgevoerd op poort 1234 op de lokale pc waarmee je de verbinding tot stand hebt gebracht.

Om dit in PuTTY op Windows te doen, selecteert u Verbinding> SSH> Tunnels. Selecteer de optie "Remote". Voer bij "Bronpoort" de externe poort in. Geef bij "Bestemming" het bestemmingsadres en de poort op in de vorm local_address: local_port.

Als u bijvoorbeeld het bovenstaande voorbeeld wilt instellen, voert u in 8888 als de bronpoort en localhost:1234 als bestemming. Klik daarna op "Toevoegen" en klik vervolgens op "Openen" om de SSH-verbinding te openen. U moet natuurlijk ook het adres en de poort van de SSH-server zelf invoeren op het hoofdscherm "Sessie" voordat u verbinding maakt.

Mensen konden dan verbinding maken met poort 8888 op de SSH-server en hun verkeer zou worden getunneld naar poort 1234 op uw lokale systeem.

Standaard werkt alleen de externe SSH-serverluister naar verbindingen van dezelfde host. Met andere woorden, alleen mensen op hetzelfde systeem als de SSH-server zelf kunnen verbinding maken. Dit is om veiligheidsredenen. U moet de optie "GatewayPorts" inschakelen in sshd_config op de externe SSH-server als u dit gedrag wilt negeren.

Dynamic Port Forwarding: gebruik uw SSH-server als een proxy

VERWANT: Wat is het verschil tussen een VPN en een proxy?

Er is ook "dynamische poortdoorschakeling", diewerkt op dezelfde manier als een proxy of VPN. De SSH-client maakt een SOCKS-proxy waarmee u toepassingen kunt configureren. Al het verkeer dat via de proxy wordt verzonden, wordt via de SSH-server verzonden. Dit is vergelijkbaar met lokaal doorsturen: het neemt lokaal verkeer dat naar een specifieke poort op uw pc wordt gestuurd en verzendt het via de SSH-verbinding naar een externe locatie.

VERWANT: Waarom het gebruik van een openbaar Wi-Fi-netwerk gevaarlijk kan zijn, zelfs bij toegang tot gecodeerde websites

Stel dat u een openbare advertentie gebruiktWi-Fi-netwerk. U wilt veilig browsen zonder te worden bekeken. Als je thuis toegang hebt tot een SSH-server, kun je er verbinding mee maken en dynamische port forwarding gebruiken. De SSH-client maakt een SOCKS-proxy op uw pc. Al het verkeer dat naar die proxy wordt verzonden, wordt via de SSH-serververbinding verzonden. Niemand die het openbare Wi-Fi-netwerk bewaakt, zal uw browsen kunnen volgen of de websites waartoe u toegang hebt, kunnen censureren. Vanuit het perspectief van alle websites die u bezoekt, is het alsof u thuis achter uw pc zit. Dit betekent ook dat je deze truc kunt gebruiken om toegang te krijgen tot websites die alleen in de VS zijn, terwijl je buiten de VS bent - ervan uitgaande dat je natuurlijk toegang hebt tot een SSH-server in de VS.

As an another example, you may want to access a mediaservertoepassing op uw thuisnetwerk. Om veiligheidsredenen mag u alleen een SSH-server hebben die is blootgesteld aan internet. U staat geen inkomende verbindingen van internet toe aan uw mediaservertoepassing. U kunt dynamische port forwarding instellen, een webbrowser configureren om de SOCKS-proxy te gebruiken en vervolgens via de webbrowser toegang krijgen tot servers die op uw thuisnetwerk draaien alsof u thuis voor uw SSH-systeem zit. Als uw mediaserver zich bijvoorbeeld op poort 192.168.1.123 op uw thuisnetwerk bevindt, kunt u het adres aansluiten 192.168.1.123 in elke applicatie met behulp van de SOCKS-proxy en u krijgt toegang tot de mediaserver alsof u zich op uw thuisnetwerk bevindt.

Om dynamisch doorsturen te gebruiken, voert u de opdracht ssh uit met de -D argument, zoals zo:

ssh -D local_port username@server.com

Stel dat u toegang heeft tot een SSH-server op ssh.yourhome.com en je gebruikersnaam op de SSH-server is bob . U wilt dynamisch doorsturen gebruiken om een ​​SOCKS-proxy te openen op poort 8888 op de huidige pc. U zou de volgende opdracht uitvoeren:

ssh -D 8888 bob@ssh.yourhome.com

U zou dan een webbrowser of een andere applicatie kunnen configureren om uw lokale IP-adres (127.0.01) en poort 8888 te gebruiken. Al het verkeer van die applicatie zou door de tunnel worden geleid.

Om dit in PuTTY op Windows te doen, selecteert u Verbinding> SSH> Tunnels. Selecteer de optie "Dynamisch". Voer bij "Source Port" de lokale poort in.

Als u bijvoorbeeld een SOCKS-proxy op poort 8888 wilt maken, voert u in 8888 als de bronpoort. Klik daarna op "Toevoegen" en klik vervolgens op "Openen" om de SSH-verbinding te openen. U moet natuurlijk ook het adres en de poort van de SSH-server zelf invoeren op het hoofdscherm "Sessie" voordat u verbinding maakt.

U kunt dan een toepassing configureren om toegang te krijgen tot de SOCKS-proxy op uw lokale pc (dat wil zeggen IP-adres 127.0.0.1, dat naar uw lokale pc verwijst) en de juiste poort specificeren.

VERWANT: Hoe een proxyserver in Firefox te configureren

U kunt Firefox bijvoorbeeld configureren om deSOCKS-proxy. Dit is vooral handig omdat Firefox zijn eigen proxy-instellingen kan hebben en geen systeembrede proxy-instellingen hoeft te gebruiken. Firefox zal zijn verkeer door de SSH-tunnel sturen, terwijl andere toepassingen uw internetverbinding normaal zullen gebruiken.

Als u dit in Firefox doet, selecteert u “Handmatige proxyconfiguratie ”, voert u“ 127.0.0.1 ”in het SOCKS-hostvak in en voert u de dynamische poort in het vak“ Poort ”in. Laat de vakken HTTP-proxy, SSL-proxy en FTP-proxy leeg.

De tunnel blijft actief en open voor aszolang je de SSH-sessieverbinding open hebt staan. Wanneer u uw SSH-sessie beëindigt en de verbinding met een server verbreekt, wordt de tunnel ook gesloten. Maak gewoon opnieuw verbinding met het juiste commando (of de juiste opties in PuTTY) om de tunnel opnieuw te openen.