OpenSSH - Tunnelointi ja port forward

Remote port forward

SSH-tunnelilla ja port forwardilla voidaan tunneloida yhteyksiä palomuurin tai esimerkiksi verkko-osoitemuunnoksen (NAT) tekevän laitteen läpi. Esimerkissä meillä on IoT-laite, joka saa verkkoasetukset DHCP-palvelimelta ja palomuuri erottaa laitteen julkisesta verkosta, niin että ulkoa tulevat yhteydet on estetty. Palvelimeen tulee päästä julkisesta verkosta. Esimerkissä käytetään yksityistä IP-osoitetta, mutta toimintaperiaate on sama riippumatta osoitteesta. Palomuurista on sallittu yhteydet palvelimen SSH-porttiin 22.

ssh-tunnel

Otetaan SSH-yhteys IoT-laitteelta palvelimelle antti-tunnuksella. -R -optiolla määritellään remote port forward, eli kaikki palvelimen localhost-osoitteen porttiin 2000 tulevat yhteydet ohjataan takaisin IoT-laitteen porttiin 22.

antti@IoT $ ssh -l antti -R 2000:localhost:22 192.168.0.100
antti@192.168.0.100's password:
Last login: Tue Apr 25 11:25:36 2016 from 192.168.0.3
antti@palvelin $ netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:2000          0.0.0.0:*               LISTEN
tcp        0      0 192.168.0.100:22        192.168.0.20:52133      ESTABLISHED

antti@palvelin $ ssh localhost -p 2000
antti@localhost's password:

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Apr 25 12:37:58 2016 from localhost
antti@IoT $


ssh-flow

Local port forward

Tilanteessa jossa yhteys on estetty tiettyyn osoitteeseen, tässä esimerkissä googlen hakukoneeseen, voidaan esto kiertää ohjaamalla liikenne palvelimen kautta. Palvelimella on julkinen osoite ja internetistä on pääsy palvelimen SSH-palveluun. Meillä voi myös olla vahvan tunnistuksen tarjoava gateway-palvelin jonka takana palvelimet sijaitsevat. GW-palvelimeen voidaan ottaa SSH-yhteyksiä, ja palvelimelta SSH-yhteyksiä UNIX-palvelimille. Port forwardia tarvitaan, jos GW-palvelimen takana on Windows-palvelimia joihin halutaan ottaa remote desktop-yhteyksiä. GW-palvelimelle tehdän local port forward ja ohjataan liikenne tietyn Windows-koneen remote desktop -porttiin.

ssh-flow


debian nimiseltä tietokoneelta otetaan SSH-yhteys palvelimen IP-osoiteeseen 192.168.0.100. -L optiolla tehdään local port forward. debian-koneen localhost porttiin 2000 otetut yhteydet ohjataan SSH-tunnelia pitkin palvelimelle ja palvelimelta google.com -osoitteeseen ja http-porttiin 80.

antti@debian $ ssh -l antti -L 2000:google.com:80 192.168.0.100
antti@192.168.0.100's password:
Last login: Wed Apr 26 16:32:01 2016 from 192.168.0.20
antti@palvelin $
antti@debian $ netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:2000          0.0.0.0:*               LISTEN
tcp        0      0 192.168.0.20:46892      192.168.0.100:22        ESTABLISHED

Huom. Jos google.com -osoitteen tilalle laitetaan localhost, niin yhdistettäessä paikallisen tietokoneen porttiin 2000 yhteydet ohjataan SSH-tunnelin läpi palvelimen localhostiin, eli palvelimen porttiin 80. Tietoturvasyistä (local ja remote) port forwardissa kuunnellaan oletuksena localhostia. Tämä voidaan kuitenkin kiertää komentorivillä -g optiolla tai lisäämällä sshd_config-tiedostoon GatewayPorts yes. GatewayPorts asetuksella SSH-asetetaan kuuntelemaan kaikkia osoitteita.

antti@debian $ ssh -l antti -g -L 2000:google.com:80 192.168.0.100
antti@192.168.0.100's password:
Last login: Wed Apr 26 16:32:01 2016 from 192.168.0.20
antti@palvelin $
antti@debian $ netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:2000            0.0.0.0:*               LISTEN
tcp        0      0 192.168.0.20:56832      192.168.0.100:22        ESTABLISHED