Wat Is SSH Port Forwarding, ook bekend als SSH Tunneling?
SSH port forwarding is een mechanisme in SSH voor het tunnelen van applicatie poorten van de client machine naar de server machine, of vice versa. Het kan worden gebruikt voor het toevoegen van encryptie aan legacy-toepassingen, gaan door firewalls, en sommige systeembeheerders en IT-professionals gebruiken het voor het openen van backdoors in het interne netwerk van hun thuis machines. Het kan ook worden misbruikt door hackers en malware om toegang te openen van het Internet naar het interne netwerk., Zie de SSH tunneling pagina voor een breder overzicht.
Local Forwarding
Local forwarding wordt gebruikt om een poort van de clientmachine naar de servermachine door te sturen. Kortom, de SSH client luistert naar verbindingen op een geconfigureerde poort, en wanneer het een verbinding ontvangt, tunnelt het de verbinding met een SSH server. De server maakt verbinding met een geconfigureerde doelpoort, mogelijk op een andere machine dan de SSH server.,
typische toepassingen voor lokale poort forwarding zijn:
-
Tunneling sessies en bestandsoverdracht via jump servers
-
verbinding maken met een service op een intern netwerk van buiten
-
verbinding maken met een externe bestandshare via het Internet
nogal wat organisaties voor alle inkomende SSH toegang via een enkele jump server. De server kan een standaard Linux/Unix box zijn, meestal met wat extra verharding, inbraakdetectie en/of logging, of het kan een commerciële jump server oplossing zijn.,
veel jump servers staan inkomende poort forwarding toe, zodra de verbinding is geverifieerd. Een dergelijke port forwarding is handig, omdat het technisch onderlegde gebruikers in staat stelt om interne bronnen vrij transparant te gebruiken. Ze kunnen bijvoorbeeld een poort op hun lokale machine doorsturen naar de zakelijke intranetwebserver, naar de IMAP-poort van een interne mailserver, naar de 445-en 139-poorten van een lokale bestandsserver, naar een printer, naar een versiebeheerrepository of naar bijna elk ander systeem op het interne netwerk. Vaak wordt de poort getunneld naar een SSH-poort op een interne machine.,
in OpenSSH wordt lokale poort doorsturen geconfigureerd met behulp van de -L
optie:
ssh -L 80:intra.example.com:80 gw.example.com
dit voorbeeld opent een verbinding met de gw.example.com
jump server, en stuurt elke verbinding naar poort 80 op de lokale machine naar poort 80 op intra.example.com
.
standaard kan iedereen (zelfs op verschillende machines) verbinding maken met de opgegeven poort op de SSH client machine., Dit kan echter worden beperkt tot programma ‘ s op dezelfde host door een bind-adres op te geven:
ssh -L 127.0.0.1:80:intra.example.com:80 gw.example.com
de LocalForward
optie in het OpenSSH client configuration file kan worden gebruikt om forwarding te configureren zonder het op de opdrachtregel op te geven.
Remote Forwarding
in OpenSSH worden remote SSH port forwardings opgegeven met behulp van de optie -R
. Bijvoorbeeld:
ssh -R 8080:localhost:80 public.example.com
Hiermee kan iedereen op de externe server verbinding maken met tcp-poort 8080 op de externe server., De verbinding zal dan worden getunneld naar de client host, en de client maakt dan een TCP verbinding met poort 80 op localhost
. Elke andere hostnaam of IP-adres kan worden gebruikt in plaats van localhost
om de host op te geven waarmee verbinding moet worden gemaakt.
dit specifieke voorbeeld zou nuttig zijn om iemand aan de buitenkant toegang te geven tot een interne webserver. Of een interne webtoepassing blootstellen aan het openbare Internet. Dit kan worden gedaan door een werknemer die vanuit huis werkt, of door een aanvaller.,
standaard staat OpenSSH alleen verbinding toe met externe doorgestuurde poorten vanaf de server host. Echter, de GatewayPorts
optie in het serverconfiguratiebestand sshd_config kan worden gebruikt om dit te controleren. De volgende alternatieven zijn mogelijk:
GatewayPorts no
Dit voorkomt verbinding met doorgestuurde poorten van buiten de servercomputer.
GatewayPorts yes
Hiermee kan iedereen verbinding maken met de doorgestuurde poorten. Als de server zich op het openbare Internet bevindt, kan iedereen op het internet verbinding maken met de poort.,
GatewayPorts clientspecified
Dit betekent dat de client een IP-adres kan opgeven van waaruit verbindingen met de poort zijn toegestaan. De syntaxis hiervoor is:
ssh -R 52.194.1.73:8080:localhost:80 host147.aws.example.com
in dit voorbeeld zijn alleen verbindingen van het IP-adres 52.194.1.73
naar poort 8080 toegestaan.
OpenSSH staat ook toe dat de doorgestuurde externe poort opgegeven wordt als 0. In dit geval zal de server dynamisch een poort toewijzen en deze rapporteren aan de client. Indien gebruikt met de -O forward
optie, zal de client het toegewezen poortnummer afdrukken naar de standaarduitvoer.,
Backdoors openen in de onderneming
Remote SSH port forwarding wordt vaak gebruikt door werknemers om backdoors te openen in de onderneming. Bijvoorbeeld, de werknemer kan instellen krijg een free-tier server van Amazon AWS, en inloggen vanaf het kantoor op die server, met vermelding van Remote forwarding van een poort op de server naar een server of toepassing op het interne bedrijfsnetwerk. Er kunnen meerdere externe forwards worden opgegeven om toegang tot meer dan één toepassing te openen.,
de werknemer zou ook GatewayPorts yes
op de server instellen (de meeste werknemers hebben thuis geen vaste IP-adressen, dus kunnen ze het IP-adres niet beperken).
bijvoorbeeld, het volgende commando opent toegang tot een interne Postgres-database op poort 5432 en een interne SSH-poort op poort 2222.
ssh -R 2222:d76767.nyc.example.com:22 -R 5432:postgres3.nyc.example.com:5432 aws4.mydomain.net
serverconfiguratie
de optie AllowTcpForwarding
in het OpenSSH serverconfiguratiebestand moet op de server zijn ingeschakeld om port forwarding toe te staan. Standaard is doorsturen toegestaan., Mogelijke waarden voor deze optie zijn yes
of all
om alle TCP forwarding no
om te voorkomen dat alle TCP forwarding local
to allow local volgstanden, en remote
om displays op afstand door volgstanden.
een andere interessante optie is AllowStreamLocalForwarding
, die gebruikt kan worden om Unix domeinsockets door te sturen. Het staat dezelfde waarden toe als AllowTcpForwarding
. De standaardwaarde is yes
.,
bijvoorbeeld:
AllowTcpForwarding remote AllowStreamLocalForwarding no
de GatewayPorts
configuratie optie zoals hierboven beschreven heeft ook invloed op remote port forwardings. Mogelijke waarden waren no
(alleen lokale verbindingen vanaf serverhost toegestaan; standaard), yes
(iedereen op het Internet kan verbinding maken met externe forwarded poorten), en clientspecified
(client kan een IP-adres opgeven dat verbinding kan maken, iedereen kan dat indien niet opgegeven).,
hoe te voorkomen dat SSH Port Forwarding Firewalls omzeilt
we raden aan dat port forwarding uitdrukkelijk wordt uitgeschakeld wanneer dit niet nodig is. Het inschakelen van port forwarding kan de organisatie blootstellen aan veiligheidsrisico ‘ s en achterdeuren. Als een server die alleen bedoeld is om SFTP-bestandsoverdrachten te leveren bijvoorbeeld port forwardings toestaat, kunnen die doorstuurservers worden gebruikt om onbedoelde toegang te krijgen tot het interne netwerk vanaf het Intranet.
het probleem is dat port forwarding in de praktijk alleen kan worden voorkomen door een server of firewall., Een onderneming kan niet alle servers op het Internet controleren. Firewall – gebaseerde controle kan ook lastig zijn, zoals de meeste organisaties hebben servers in Amazon AWS en andere cloud-diensten, en die servers zijn meestal toegankelijk met behulp van SSH.