Klient SSH łączy się z Serwer Secure Shell , który umożliwia uruchamianie poleceń terminala tak, jakbyś siedział przed innym komputerem. Ale klient SSH umożliwia również „tunelowanie” portu między systemem lokalnym a zdalnym serwerem SSH.
Istnieją trzy różne typy tunelowania SSH i wszystkie są używane do różnych celów. Każdy z nich wymaga użycia serwera SSH do przekierowania ruchu z jednego portu sieciowego do drugiego. Ruch jest przesyłany przez zaszyfrowane połączenie SSH, więc nie można go monitorować ani modyfikować podczas przesyłania.
Możesz to zrobić za pomocą
ssh
polecenie zawarte w systemie Linux, macOS i innych
Podobny do systemu UNIX
system operacyjny. W systemie Windows, który nie zawiera wbudowanego polecenia ssh, zalecamy bezpłatne narzędzie
Kit
do łączenia się z serwerami SSH. Obsługuje również tunelowanie SSH.
Lokalne przekierowanie portów: udostępnianie zasobów zdalnych w systemie lokalnym
„Przekierowanie portu lokalnego” umożliwia dostęp do zasobów sieci lokalnej, które nie są widoczne w Internecie. Na przykład, powiedzmy, że chcesz uzyskać dostęp do serwera bazy danych w biurze z domu. Ze względów bezpieczeństwa ten serwer bazy danych jest skonfigurowany tylko do akceptowania połączeń z lokalnej sieci biurowej. Ale jeśli masz dostęp do serwera SSH w biurze, a ten serwer SSH umożliwia połączenia spoza sieci biurowej, możesz połączyć się z tym serwerem SSH z domu i uzyskać dostęp do serwera bazy danych tak, jakbyś był w biurze. Dzieje się tak często, ponieważ łatwiej jest zabezpieczyć pojedynczy serwer SSH przed atakami, niż zabezpieczyć wiele różnych zasobów sieciowych.
Aby to zrobić, należy nawiązać połączenie SSH z serwerem SSH i nakazać klientowi przekierowanie ruchu z określonego portu z lokalnego komputera - na przykład portu 1234 - na adres serwera bazy danych i jego port w sieci biurowej. Tak więc, gdy próbujesz uzyskać dostęp do serwera bazy danych na porcie 1234, Twój obecny komputer, „localhost”, ruch ten jest automatycznie „tunelowany” przez połączenie SSH i wysyłany do serwera bazy danych. Serwer SSH znajduje się pośrodku i przekazuje ruch tam iz powrotem. Możesz użyć dowolnego wiersza poleceń lub narzędzia graficznego, aby uzyskać dostęp do serwera bazy danych tak, jakby był uruchomiony na lokalnym komputerze.
Aby korzystać z przekazywania lokalnego, połącz się z serwerem SSH normalnie, ale podaj także plik
-L
argument. Składnia jest następująca:
ssh -L port_lokalny: adres_zdalny: nazwa_uż[email protected]
Na przykład, powiedzmy, że serwer bazy danych w Twoim biurze znajduje się pod adresem 192.168.1.111 w sieci biurowej. Masz dostęp do serwera SSH biura pod adresem
ssh.youroffice.com
, a twoje konto użytkownika na serwerze SSH to
pion
. W takim przypadku Twoje polecenie wyglądałoby tak:
ssh -L 8888: 192.168.1.111: 1234 [email protected]
Po uruchomieniu tego polecenia uzyskasz dostęp do serwera bazy danych na porcie 8888 na hoście lokalnym. Tak więc, jeśli serwer bazy danych oferował dostęp do sieci, możesz podłączyć http: // localhost: 8888 do przeglądarki, aby uzyskać do niego dostęp. Jeśli masz narzędzie wiersza poleceń, które wymaga adresu sieciowego bazy danych, wskaż go na localhost: 8888. Cały ruch wysyłany do portu 8888 na twoim komputerze będzie tunelowany do 192.168.1.111:1234 w twojej sieci biurowej.
To trochę bardziej zagmatwane, jeśli chcesz połączyć się z aplikacją serwera działającą w tym samym systemie, co sam serwer SSH. Na przykład, powiedzmy, że masz serwer SSH działający na porcie 22 na komputerze w biurze, ale masz również serwer bazy danych działający na porcie 1234 w tym samym systemie pod tym samym adresem. Chcesz uzyskać dostęp do serwera bazy danych z domu, ale system akceptuje tylko połączenia SSH na porcie 22, a jego zapora sieciowa nie zezwala na żadne inne połączenia zewnętrzne.
W takim przypadku możesz uruchomić polecenie podobne do następującego:
ssh -L 8888: localhost: 1234 [email protected]
Podczas próby uzyskania dostępu do serwera bazy danych na porcie 8888 na obecnym komputerze, ruch będzie przesyłany przez połączenie SSH. Kiedy dotrze do systemu, na którym działa serwer SSH, serwer SSH wyśle go do portu 1234 na „localhost”, czyli na tym samym komputerze, na którym działa sam serwer SSH. Zatem „localhost” w powyższym poleceniu oznacza „localhost” z perspektywy zdalnego serwera.
Aby to zrobić w aplikacji PuTTY w systemie Windows, wybierz Połączenie> SSH> Tunele. Wybierz opcję „Lokalne”. W polu „Source Port” wprowadź port lokalny. W polu „Miejsce docelowe” wprowadź adres docelowy i port w postaci adres_zdalny: port_zdalny.
Na przykład, jeśli chcesz skonfigurować ten sam tunel SSH co powyżej, wpisz
8888
jako port źródłowy i
lokalny host: 1234
jako miejsce docelowe. Następnie kliknij „Dodaj”, a następnie kliknij „Otwórz”, aby otworzyć połączenie SSH. Oczywiście przed połączeniem będziesz musiał również wprowadzić adres i port samego serwera SSH na głównym ekranie „Session”.
Zdalne przekazywanie portów: udostępnianie zasobów lokalnych w systemie zdalnym
„Zdalne przekierowanie portu” jest przeciwieństwem lokalnego przekazywania i nie jest używane tak często. Umożliwia udostępnienie zasobu na lokalnym komputerze na serwerze SSH. Na przykład, powiedzmy, że uruchamiasz serwer WWW na lokalnym komputerze, przed którym siedzisz. Ale Twój komputer jest za zaporą, która nie zezwala na ruch przychodzący do oprogramowania serwera.
Zakładając, że masz dostęp do zdalnego serwera SSH, możesz połączyć się z tym serwerem SSH i użyć zdalnego przekierowania portów. Twój klient SSH powie serwerowi, aby przekierował określony port - powiedzmy port 1234 - na serwerze SSH na określony adres i port w Twoim obecnym komputerze lub sieci lokalnej. Kiedy ktoś uzyskuje dostęp do portu 1234 na serwerze SSH, ruch ten zostanie automatycznie „tunelowany” przez połączenie SSH. Każdy, kto ma dostęp do serwera SSH, będzie mógł uzyskać dostęp do serwera WWW działającego na twoim komputerze. Jest to efektywny sposób na tunelowanie przez zapory.
Aby korzystać ze zdalnego przekazywania, użyj rozszerzenia
ssh
polecenie z
-R
argument. Składnia jest w dużej mierze taka sama jak w przypadku przekazywania lokalnego:
ssh -R port_zdalny: adres_lokalny: port_lokalny nazwa_uż[email protected]
Załóżmy, że chcesz, aby aplikacja serwera nasłuchująca na porcie 1234 na lokalnym komputerze była dostępna na porcie 8888 na zdalnym serwerze SSH. Adres serwera SSH to
ssh.youroffice.com
a twoja nazwa użytkownika na serwerze SSH to
pion
. Uruchomiłbyś następujące polecenie:
ssh -R 8888: localhost: 1234 [email protected]
Ktoś mógłby wtedy połączyć się z serwerem SSH na porcie 8888 i to połączenie byłoby tunelowane do aplikacji serwera działającej na porcie 1234 na lokalnym komputerze, z którego nawiązałeś połączenie.
Aby to zrobić w PuTTY w systemie Windows, wybierz Połączenie> SSH> Tunele. Wybierz opcję „Remote”. W polu „Source Port” wprowadź port zdalny. W polu „Miejsce docelowe” wprowadź adres docelowy i port w postaci adres_lokalny: port_lokalny.
Na przykład, jeśli chcesz skonfigurować powyższy przykład, wpisz
8888
jako port źródłowy i
lokalny host: 1234
jako miejsce docelowe. Następnie kliknij „Dodaj”, a następnie kliknij „Otwórz”, aby otworzyć połączenie SSH. Oczywiście przed połączeniem będziesz musiał również wprowadzić adres i port samego serwera SSH na głównym ekranie „Session”.
Ludzie mogliby wtedy połączyć się z portem 8888 na serwerze SSH, a ich ruch byłby tunelowany do portu 1234 w systemie lokalnym.
Domyślnie zdalny serwer SSH nasłuchuje tylko połączeń z tego samego hosta. Innymi słowy, tylko osoby w tym samym systemie, co sam serwer SSH, będą mogły się połączyć. Dzieje się tak ze względów bezpieczeństwa. Musisz włączyć opcję „GatewayPorts” w sshd_config na zdalnym serwerze SSH, jeśli chcesz zmienić to zachowanie.
Dynamiczne przekazywanie portów: użyj swojego serwera SSH jako proxy
ZWIĄZANE Z: Jaka jest różnica między VPN a proxy?
Istnieje również „dynamiczne przekierowanie portów”, które działa podobnie do serwera proxy lub VPN. Klient SSH utworzy plik SOCKS proxy możesz skonfigurować aplikacje do użycia. Cały ruch przesyłany przez proxy byłby przesyłany przez serwer SSH. Jest to podobne do przekazywania lokalnego - pobiera ruch lokalny wysyłany do określonego portu na komputerze i wysyła go przez połączenie SSH do zdalnej lokalizacji.
Na przykład załóżmy, że korzystasz z publicznej sieci Wi-Fi. Chcesz przeglądaj bezpiecznie, nie będąc podsłuchiwanym . Jeśli masz dostęp do serwera SSH w domu, możesz się z nim połączyć i użyć dynamicznego przekierowania portów. Klient SSH utworzy proxy SOCKS na twoim komputerze. Cały ruch wysyłany do tego serwera proxy będzie przesyłany przez połączenie z serwerem SSH. Nikt, kto monitoruje publiczną sieć Wi-Fi, nie będzie w stanie monitorować przeglądania ani cenzurować witryn, do których masz dostęp. Z punktu widzenia odwiedzanych witryn internetowych będzie to tak, jakbyś siedział przed komputerem w domu. Oznacza to również, że możesz użyć tej sztuczki, aby uzyskać dostęp do witryn internetowych tylko w USA poza USA - oczywiście zakładając, że masz dostęp do serwera SSH w USA.
Jako inny przykład możesz chcieć uzyskać dostęp do aplikacji serwera multimediów, którą masz w swojej sieci domowej. Ze względów bezpieczeństwa możesz mieć tylko serwer SSH widoczny w Internecie. Nie zezwalasz na połączenia przychodzące z Internetu do aplikacji serwera multimediów. Możesz ustawić dynamiczne przekierowanie portów, skonfigurować przeglądarkę internetową do korzystania z serwera proxy SOCKS, a następnie uzyskać dostęp do serwerów działających w sieci domowej przez przeglądarkę internetową, tak jakbyś siedział przed swoim systemem SSH w domu. Na przykład, jeśli serwer multimediów znajduje się w porcie 192.168.1.123 w sieci domowej, możesz podłączyć adres
192.168.1.123
do dowolnej aplikacji korzystającej z serwera proxy SOCKS i uzyskasz dostęp do serwera multimediów tak, jakbyś był w sieci domowej.
Aby użyć dynamicznego przekazywania, uruchom polecenie ssh z rozszerzeniem
-RE
argument, tak jak to:
ssh -D local_port nazwa_uż[email protected]
Na przykład załóżmy, że masz dostęp do serwera SSH pod adresem
ssh.yourhome.com
a twoja nazwa użytkownika na serwerze SSH to
pion
. Chcesz użyć dynamicznego przekazywania, aby otworzyć proxy SOCKS na porcie 8888 na bieżącym komputerze. Uruchomiłbyś następujące polecenie:
ssh -D 8888 [email protected]
Można wtedy skonfigurować przeglądarkę internetową lub inną aplikację, aby używała lokalnego adresu IP (127.0.01) i portu 8888. Cały ruch z tej aplikacji byłby przekierowywany przez tunel.
Aby to zrobić w PuTTY w systemie Windows, wybierz Połączenie> SSH> Tunele. Wybierz opcję „Dynamiczny”. W polu „Source Port” wprowadź port lokalny.
Na przykład, jeśli chcesz utworzyć serwer proxy SOCKS na porcie 8888, wpisz
8888
jako port źródłowy. Następnie kliknij „Dodaj”, a następnie kliknij „Otwórz”, aby otworzyć połączenie SSH. Oczywiście przed połączeniem będziesz musiał również wprowadzić adres i port samego serwera SSH na głównym ekranie „Session”.
Następnie można skonfigurować aplikację tak, aby uzyskiwała dostęp do serwera proxy SOCKS na lokalnym komputerze (czyli adres IP 127.0.0.1, który wskazuje na lokalny komputer) i określić prawidłowy port.
ZWIĄZANE Z: Jak skonfigurować serwer proxy w przeglądarce Firefox
Na przykład możesz skonfiguruj przeglądarkę Firefox do korzystania z serwera proxy SOCKS . Jest to szczególnie przydatne, ponieważ Firefox może mieć własne ustawienia proxy i nie musi używać ogólnosystemowych ustawień proxy. Firefox będzie wysyłał swój ruch przez tunel SSH, podczas gdy inne aplikacje będą normalnie korzystać z połączenia internetowego.
Robiąc to w przeglądarce Firefox, wybierz „Ręczna konfiguracja proxy”, wpisz „127.0.0.1” w polu hosta SOCKS i wprowadź dynamiczny port w polu „Port”. Pozostaw puste pola HTTP Proxy, SSL Proxy i FTP Proxy.
Tunel pozostanie aktywny i otwarty tak długo, jak masz otwarte połączenie sesji SSH. Kiedy zakończysz sesję SSH i rozłączysz się z serwerem, tunel również zostanie zamknięty. Po prostu połącz się ponownie za pomocą odpowiedniego polecenia (lub odpowiednich opcji w programie PuTTY), aby ponownie otworzyć tunel.