Forwarding portów w Ssh

Ssh umożliwia tunelowanie portów, co oznacza iż możemy tunelować usługi same w sobie nie zawierające szyfrowania (czyli narażone na podsłuchanie) przez tunel postawiony przez Ssh (czyli szyfrowany). Nie jesteśmy w stanie postawić tunelu dwustronnego, tzn. aby z jednej strony i drugiej strony wysyłać jednocześnie dane, lub np. robić to naprzemiennie, jesteśmy natomiast w stanie zabezpieczyć połączenie jednostronnie, tzn. albo z lokalnego komputera do zdalnego serwera albo ze zdalnego serwera do lokalnego komputera.

W przypadku połączenia lokalnego serwera do zdalnego serwera korzystamy ze składni:

ssh -L  port_lokalny:adres_serwera_zdalnego:port_zdalny adres_serwera_zdalnego

Natomiast gdy chcemy zdalny port serwera przenieść (ang. forwarding) na lokalny komputer korzystamy ze składni:

ssh -R  port_lokalny:adres_serwera_zdalnego:port_zdalny adres_serwera_zdalnego

Przykład 1: Załóżmy iż mamy adres 10.0.0.12 i odbieramy pocztę przez nieszyfrowany protokół POP3 z serwera o adresie 10.0.0.120 ale chcielibyśmy robić to połączeniem szyfrowanym (tunelowanym) przez ssh. Dane będą przesyłane od nas do serwera więc wybierzemy opcję z -L, czyli otworzymy u nas port 110 i stwórzmy tunel na port 110 do serwera.

Wersja 1 (tunelowanie lokalne)

 -----------                                -----------
| 10.0.0.12 |                              | 10.0.0.120|
| serwer    | -----------/siec\ -----------| serwer    |
|           | 110 (tcp)           110(tcp) |           |
 -----------                                -----------

Regułka:

ssh -L 110:10.0.0.120:110 10.0.0.120

Od tej chwili pocztę odbieramy z lokalnego portu 110 a nie z portu zdalnego 110.

Zmodyfikujmy troszeczkę nasz przykład, niech poczta będzie odbierana u nas przez port 112:

ssh -L 112:10.0.0.120:110 10.0.0.120

Dodaj komentarz