Tunelowanie SSH – metody i korzyści

Tunelowanie Secure Shell (SSH) pozwala niskim wkładem osiągnąć podstawowy poziom bezpieczeństwa protokołów lub ominąć zapory sieciowe zachowując bezpieczeństwo połączenia. Oto krótki poradnik tunelowania SSH.
https://cms.pracuj.pl/content/uploads/2023/03/blog-tunneling-2.jpg

Z tego artykułu dowiesz się

  • Czym jest i do czego służy tunelowanie SSH?
  • Jak postawisz tunel SSH?
  • Przekierowanie portów –zdalne, lokalne i dynamiczne
  • Tunelowanie SSH w Linuxie a w Windowsie
  • Tunelowanie SSH zwykłe a odwrócone

Spis treści

  1. Czym dokładnie jest tunelowanie SSH?

  2. Do czego służą tunele SSH?

  3. Używanie tunelu SSH w systemie Linux

  4. Używanie tunelu SSH w systemie Windows

  5. Odwrócony tunel SSH

Tunelowanie SSH to metoda transportu dowolnych danych sieciowych przez szyfrowane połączenie SSH (Secure Shell). Może być wykorzystane jako sposób na szyfrowanie starszych aplikacji lub działać jako prosty VPN. 

Tunelowanie SSH pozwala na bezpieczny i dyskretny dostęp do witryn (tunelowanie stron) i serwerów, do których jest on ograniczony z lokalnej sieci. 

Czym dokładnie jest tunelowanie SSH?

Tunel SSH działa poniekąd jak prawdziwy tunel, tworząc nieprzerwane, szyfrowane połączenie między punktem A i punktem B. Punktem A jest w tym przypadku komputer zlokalizowany w niezabezpieczonej sieci, a punktem B jest serwer lub adres sieciowy, do którego nie można lub nie chce się uzyskać dostępu z własnej sieci. Tunelowanie SSH pozwala na połączenie między komputerem a serwerem z wykorzystaniem ich portów TCP. W zasadzie każdy port TCP może być przekazywany za pomocą tunelu SSH, dlatego proces ten znany jest również jako przekierowanie portów.

Dowolny rodzaj serwera może działać jako serwer SSH, w tym stary komputer z szafy lub Raspberry Pi.

Co właściwie możesz przez taki tunel SSH wysłać? To proste. Za jego pośrednictwem bezpiecznie korzystasz z wielu protokołów TCP, w tym z protokołów HTTP i SMTP – prostych protokołów do obsługi poczty elektronicznej. W ten sposób SSH zapewnia podstawowe bezpieczeństwo danych przesyłanych w tunelu.

Do czego służą tunele SSH?

Istnieją różne scenariusze zastosowań przekierowania portów za pomocą Secure Shell. W większości przypadków tunelowanie SSH jest używane do ustanowienia szyfrowanego połączenia między komputerem lokalnym, localhost i komputerem zdalnym. Za pośrednictwem takiej wirtualnej sieci można obejść pewne ograniczenia dostępu do stron internetowych. Chociaż ten typ aplikacji ma podobieństwa do wirtualnej sieci prywatnej (VPN), nie należy mylić tych dwóch rozwiązań.

Jeśli transportujesz dane z usług używając nieszyfrowanego protokołu, możesz użyć tunelowania SSH, aby mimo wszystko zaszyfrować ruch danych. Do tego celu służy tak zwany SSH File Transfer Protocol, w skrócie SFTP. Tunelowanie SSH to także większe bezpieczeństwo podczas korzystania z internetu w sieciach publicznych, np. w knajpach i hotelach. Gdy chcesz uzyskać szczególnie wysoki poziom bezpieczeństwa, możesz polegać na kluczach SSH dla połączenia sieciowego, które wykorzystują szyfrowanie kluczem publicznym.

Przekierowanie portów to również technika, którą chętnie stosują hakerzy. Dzięki tunelowaniu SSH możliwe jest tworzenie backdoorów w sieciach wewnętrznych, które pozwalają atakującym na łatwy dostęp do wewnętrznych danych.

Tunelowanie SSH w systemie Linux

Istnieje kilka metod na tunelowanie SSH w Linuxie:

Lokalne przekierowanie portów

Prawdopodobnie najczęściej stosowaną metodą jest tzw. lokalne przekierowanie portów. Takim sposobem można uzyskać dostęp do zasobów sieci lokalnej przez przekierowanie portu na komputerze lokalnym na port na serwerze SSH. Ten z kolei jest przekazywany do portu w komputerze docelowym.

Aby skonfigurować lokalne przekierowanie portów, musisz użyć następującego polecenia w terminalu Linuxa lub dowolnym innym systemie operacyjnym opartym na Unix, np. macOS:

ssh -L port_lokalny: adres_zdalny: port_zdalny użytkownik@serwer.com

Najpierw musisz określić port, który chcesz przekazać (port_lokalny). Każdy port o numerze większym niż 1024 powinien być dostępny. Tylko root ma dostęp do portów o mniejszych numerach, ponieważ są to porty uprzywilejowane. Następnie należy podać adres IP serwera docelowego (adres_zdalny) oraz dane dostępowe (port_zdalny).

Przykład:

Chcesz połączyć się z serwerem w swoim biurze, który znajduje się pod adresem 123.234.1.111 w sieci firmowej. Możesz uzyskać dostęp do serwera SSH w swoim biurze za pomocą ssh.test.com. Twoja nazwa użytkownika to "testuser". Polecenie pozwalające skonfigurować tunel SSH dla portu 1234 wygląda następująco:

ssh -L 8888: 123.234.1.111: 1234 Testuser@ssh.test.com

Po wykonaniu tego polecenia uzyskasz dostęp do serwera biurowego przez port 8888. Jeśli komputer jest połączony z internetem, możesz uzyskać do niego dostęp również przez http://localhost:8888/. Ruch danych, wysyłany na port 8888 na komputerze, jest teraz kierowany przez tunel SSH na port 1234 na komputerze docelowym.

Zdalne przekierowanie portów

Odpowiednikiem lokalnego przekierowania portów jest tzw. zdalne przekierowanie portów. Tutaj kierujesz port na serwerze SSH na port na komputerze klienckim. W ten sposób możesz nawiązać połączenie z komputerem docelowym, np. lokalnym. Ta forma przekierowania portów jest stosowana głównie w celu udostępnienia wewnętrznych usług użytkownikom zewnętrznym.
Polecenie do skonfigurowania zdalnego tunelu SSH w terminalu jest następujące:

ssh -port_zdalny: adres_docelowy: port_docelowy użytkownik@adres_serwera_ssh

Przykład:
Jeśli chcesz nasłuchiwać na porcie o numerze 8080 i wysyłać dane na port 3000 na komputerze lokalnym, to polecenie powinno wyglądać następująco:

ssh -R 8080: 127.0.0.1:3000 użytkownik@remote.host

W powyższym przykładzie adres serwera SSH to remote.host. Możesz teraz uzyskać dostęp do danych kierowanych przez tunel z przeglądarki z pobranym takim samym adresem oraz portem określonym wcześniej:

remote.host:8080

Jeśli napotkasz problemy z ustawieniem zdalnego przekierowania portów, być może będziesz zmuszony zmienić konfigurację swojego serwera SSH. Domyślnie zdalne przekierowanie portów jest wyłączone. Możesz zmienić to ustawienie, aktywując konfigurację GatewayPorts w pliku konfiguracyjnym serwera SSH. Aby to osiągnąć, otwierasz plik i ustawiasz dyrektywę GatewayPorts na "yes".

Dynamiczne przekierowanie portów

Trzecim sposobem wykorzystania tunelowania SSH jest dynamiczne przekierowanie portów. Dzięki temu możliwe jest wykorzystanie gniazda na komputerze lokalnym, które działa jako swego rodzaju SOCKS proxy. Wszystkie aplikacje korzystające z SOCKS proxy łączą się w ten sposób z serwerem SSH i kierują cały ruch przez tunel. Częstym zastosowaniem takiego typu przekierowania portów jest tunelowanie ruchu przeglądarki internetowej.

Aby skonfigurować dynamiczne przekierowanie portów, należy użyć polecenia w terminalu według poniższego schematu:

ssh -D [lokalny_adres_IP:]port_lokalny użytkownik@adres_serwera_ssh

Jeśli nie określisz lokalnego adresu IP, automatycznie wybrany zostanie adres IP 127.0.0.1, czyli localhost. 

Przykład:
Jeśli chcesz skonfigurować tunel SOCKS dla portu 9090, korzystasz z następującego polecenia dla serwera o adresie remote.host:

ssh -D 9090 -N -f użytkownik@remote.host

Po skonfigurowaniu proxy SOCKS konfigurujesz odpowiednio aplikacje, które mają korzystać z proxy.

Używanie tunelu SSH w systemie Windows

Tunele SSH mogą być również wykorzystane w systemie Windows. Ponieważ terminal ma mniejsze znaczenie w tym systemie operacyjnym, istnieją praktyczne narzędzia do tunelowania SSH z własnym interfejsem graficznym. Jednym z nich jest np. PuTTY, który czyni tworzenie tuneli SSH dziecinnie prostym.

Po pobraniu, zainstalowaniu i uruchomieniu PuTTY w polu "Nazwa hosta" wpisujesz adres IP serwera SSH, z którym chcesz się połączyć. Następnie przechodzisz do "Connection/SSH/Tunnels". Tutaj możesz określić port źródłowy i docelowy w polach "Source Port" i "Destination". Następnie nawiązujesz połączenie przez przycisk "Open" i uzyskujesz dostęp do przekazanego portu w przeglądarce przez 127.0.0.1:numer_portu.

Odwrócony tunel SSH

Aby uzyskać dostęp do komputerów z prywatnymi adresami IP, wymagany jest odwrócony tunel SSH. Komputer wewnętrzny, do którego nie można się dostać z zewnątrz, musi uruchomić odwrotny tunel SSH do komputera zewnętrznego. W przeciwieństwie do przedstawionych już tuneli SSH, tunel ten musi również umożliwiać połączenia z komputerów zewnętrznych do komputera wewnętrznego.

Poniższe polecenie służy do skonfigurowania odwrotnego tunelu SSH:

ssh -Nf -R 2222:localhost:22 użytkownik@komputer_zewnętrzny

Z kolei z pomocą tego polecenia: ssh localhost -p 2222 możesz podłączyć komputer zewnętrzny do komputera wewnętrznego.

the:protocol © 2023 Grupa Pracuj S.A.