Klient SSH łączy się z serwerem Secure Shell, który pozwala uruchamiać polecenia terminala tak, jakbyś siedział przed innym komputerem. Ale klient SSH pozwala również na "tunelowanie" portu pomiędzy lokalnym systemem a zdalnym serwerem SSH.
Istnieją trzy różne typy tunelowania SSH i wszystkie są używane do różnych celów. Każda z nich wymaga użycia serwera SSH do przekierowania ruchu z jednego portu sieciowego do innego. 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 systemach Linux, macOS i innych systemach operacyjnych podobnych do UNIX. W systemie Windows, który nie zawiera wbudowanego polecenia ssh, zalecamy darmowe narzędzie PuTTY do łączenia się z serwerami SSH. Obsługuje tunelowanie SSH.
"Przesyłanie lokalnego portu" umożliwia dostęp do zasobów sieci lokalnej, które nie są narażone na działanie Internetu. 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 serwer SSH zezwala na 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. Często tak jest, ponieważ łatwiej jest zabezpieczyć pojedynczy serwer SSH przed atakami niż zabezpieczyć wiele różnych zasobów sieciowych.
W tym celu nawiązuj połączenie SSH z serwerem SSH i powiedz klientowi, aby przekazywał ruch z określonego portu z lokalnego komputera - na przykład port 1234 - na adres serwera bazy danych i jego portu w sieci biurowej. Tak więc, kiedy próbujesz uzyskać dostęp do serwera bazy danych na porcie 1234 twojego bieżącego komputera, "localhost", ten ruch jest automatycznie "tunelowany" przez połączenie SSH i wysłany do serwera bazy danych. Serwer SSH znajduje się w środku, przekazując ruch w tę iz powrotem. Możesz użyć dowolnego wiersza poleceń lub narzędzia graficznego, aby uzyskać dostęp do serwera bazy danych tak, jakby działał na Twoim lokalnym komputerze.
Aby korzystać z przekazywania lokalnego, połącz się z serwerem SSH w normalny sposób, ale również podaj adres -L
argument. Składnia jest następująca:
ssh -L local_port: adres_zdalny: nazwa_użytkownika 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 w biurze pod adresem ssh.youroffice.com
i twoje konto użytkownika na serwerze SSH kok
. W takim przypadku twoje polecenie wyglądałoby tak:
ssh -L 8888: 192.168.1.111: 1234 [email protected]
Po uruchomieniu tego polecenia będziesz mógł uzyskać dostęp do serwera bazy danych w porcie 8888 na localhost. Tak więc, jeśli serwer bazy danych oferuje dostęp do sieci, możesz podłączyć http: // localhost: 8888 do swojej przeglądarki internetowej, aby uzyskać do niego dostęp. Jeśli masz narzędzie wiersza poleceń, które wymaga adresu sieciowego bazy danych, wskażesz go na localhost: 8888. Cały ruch wysłany do portu 8888 na komputerze zostanie tunelowany do sieci 192.168.1.111:1234 w 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 załóżmy, że masz serwer SSH działający na porcie 22 na komputerze biurowym, ale masz także 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 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 w porcie 8888 na bieżącym komputerze, ruch zostanie przesłany przez połączenie SSH. Kiedy dotrze do systemu z serwerem SSH, serwer SSH wyśle go do portu 1234 na "localhost", którym jest ten sam komputer, na którym działa sam serwer SSH. Tak więc "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 "Port źródłowy" wprowadź port lokalny. W polu "Miejsce docelowe" wprowadź adres docelowy i port w postaci remote_address: port_zdalny.
Na przykład, jeśli chcesz skonfigurować ten sam tunel SSH jak powyżej, wpisz 8888
jako port źródłowy i localhost: 1234
jako cel podróży. Kliknij "Dodaj", a następnie kliknij "Otwórz", aby otworzyć połączenie SSH. Będziesz także musiał wprowadzić adres i port samego serwera SSH na głównym ekranie "Sesji" przed połączeniem, oczywiście.
"Zdalne przekierowanie portów" jest przeciwieństwem lokalnego przekazywania i nie jest używane tak często. Pozwala na utworzenie zasobu na lokalnym komputerze dostępnym na serwerze SSH. Załóżmy na przykład, że używasz serwera WWW na lokalnym komputerze, przed którym siedzisz. Ale twój komputer znajduje się za zaporą ogniową, która nie zezwala na ruch przychodzący do oprogramowania serwera.
Zakładając, że możesz uzyskać dostęp do zdalnego serwera SSH, możesz połączyć się z tym serwerem SSH i użyć zdalnego przekazywania portów. Twój klient SSH powie serwerowi, aby przekazał określony port - powiedzmy port 1234 - na serwerze SSH pod określony adres i port na twoim komputerze lub sieci lokalnej. Gdy ktoś uzyska dostęp do portu 1234 na serwerze SSH, ten ruch 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 uruchomionego na twoim komputerze. Jest to skuteczny sposób na przechodzenie przez firewall.
Aby użyć zdalnego przekazywania, użyj ssh
polecenie z -R
argument. Składnia jest w dużej mierze taka sama jak w przypadku przekazywania lokalnego:
ssh -R remote_port: local_address: local_port nazwa_uż[email protected]
Załóżmy, że chcesz uruchomić aplikację serwera na porcie 1234 na lokalnym komputerze dostępnym w porcie 8888 na zdalnym serwerze SSH. Adres serwera SSH jest ssh.youroffice.com
i twoja nazwa użytkownika na serwerze SSH kok. Uruchomiłbyś następujące polecenie:
ssh -R 8888: localhost: 1234 [email protected]
Ktoś mógłby następnie połączyć się z serwerem SSH w 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ązano połączenie.
Aby to zrobić w PuTTY w Windows, wybierz Połączenie> SSH> Tunele. Wybierz opcję "Remote". W polu "Port źródłowy" wprowadź port zdalny. W polu "Miejsce docelowe" wprowadź adres docelowy i port w postaci local_address: local_port.
Na przykład, jeśli chcesz ustawić powyższy przykład, wpisz 8888
jako port źródłowy i localhost: 1234
jako cel podróży. Kliknij "Dodaj", a następnie kliknij "Otwórz", aby otworzyć połączenie SSH.Będziesz także musiał wprowadzić adres i port samego serwera SSH na głównym ekranie "Sesji" przed połączeniem, oczywiście.
Ludzie mogliby następnie połączyć się z portem 8888 na serwerze SSH, a ich ruch zostałby tunelowany do portu 1234 w systemie lokalnym.
Domyślnie zdalny serwer SSH będzie nasłuchiwać 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ć. Jest to ze względów bezpieczeństwa. Będziesz musiał włączyć opcję "GatewayPorts" w sshd_config na zdalnym serwerze SSH, jeśli chcesz zastąpić to zachowanie.
Istnieje również "dynamiczne przekazywanie portów", które działa podobnie do proxy lub VPN. Klient SSH utworzy serwer proxy SOCKS, z którego można skonfigurować aplikacje. Cały ruch przesyłany przez serwer proxy będzie wysyłany za pośrednictwem serwera SSH. Jest to podobne do lokalnego przekazywania - 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 bezpiecznie przeglądać, nie będąc podsłuchiwanym. Jeśli masz dostęp do serwera SSH w domu, możesz połączyć się z nim i korzystać z dynamicznego przekierowania portów. Klient SSH utworzy serwer proxy SOCKS na twoim komputerze. Cały ruch wysłany do tego serwera proxy będzie wysyłany przez połączenie serwera SSH. Nikt monitorujący publiczną sieć Wi-Fi nie będzie mógł monitorować twojego przeglądania ani cenzurować stron, do których masz dostęp. Z perspektywy odwiedzanych stron internetowych będzie tak, jakbyś siedział przed komputerem w domu. Oznacza to również, że możesz użyć tej sztuczki, by uzyskać dostęp do witryn tylko w Stanach Zjednoczonych 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 serwer SSH może być narażony na działanie Internetu. Nie zezwalaj na połączenia przychodzące z Internetu do aplikacji serwera multimedialnego. Możesz skonfigurować dynamiczne przekierowanie portów, skonfigurować przeglądarkę internetową do korzystania z serwera proxy SOCKS, a następnie uzyskiwać dostęp do serwerów działających w sieci domowej za pośrednictwem przeglądarki internetowej, 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ć ten adres 192.168.1.123
do dowolnej aplikacji używającej proxy SOCKS, a Ty uzyskasz dostęp do serwera multimediów tak, jakbyś był w sieci domowej.
Aby korzystać z dynamicznego przekazywania, uruchom polecenie ssh przy pomocy -RE
argument, jak na przykład:
ssh -D local_port nazwa_uż[email protected]
Na przykład załóżmy, że masz dostęp do serwera SSH w ssh.yourhome.com
i twoja nazwa użytkownika na serwerze SSH kok
. Chcesz korzystać z dynamicznego przekazywania, aby otworzyć serwer proxy SOCKS w porcie 8888 na bieżącym komputerze. Uruchomiłbyś następujące polecenie:
ssh -D 8888 [email protected]
Następnie można skonfigurować przeglądarkę internetową lub inną aplikację do korzystania z lokalnego adresu IP (127.0.01) i portu 8888. Cały ruch z tej aplikacji zostanie przekierowany przez tunel.
Aby to zrobić w PuTTY w Windows, wybierz Połączenie> SSH> Tunele. Wybierz opcję "Dynamiczny". W polu "Port źródłowy" wprowadź port lokalny.
Na przykład, jeśli chcesz utworzyć serwer proxy SOCKS na porcie 8888, wpisz 8888
jako port źródłowy. Kliknij "Dodaj", a następnie kliknij "Otwórz", aby otworzyć połączenie SSH.Będziesz także musiał wprowadzić adres i port samego serwera SSH na głównym ekranie "Sesji" przed połączeniem, oczywiście.
Następnie można skonfigurować aplikację, aby uzyskać dostęp do serwera proxy SOCKS na lokalnym komputerze (czyli adresie IP 127.0.0.1, który wskazuje na lokalny komputer) i podać poprawny port.
Na przykład możesz skonfigurować 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 wyśle swój ruch przez tunel SSH, podczas gdy inne aplikacje będą normalnie korzystać z połączenia internetowego.
Robiąc to w Firefoksie, wybierz "Ręczna konfiguracja proxy", wpisz "127.0.0.1" w polu hosta SOCKS i wprowadź dynamiczny port w polu "Port". Pozostaw pola proxy HTTP, SSL Proxy i FTP Proxy puste.
Tunel pozostanie aktywny i będzie otwarty tak długo, jak długo będzie otwarte połączenie sesji SSH. Po zakończeniu sesji SSH i rozłączeniu z serwerem tunel zostanie również zamknięty. Wystarczy ponownie połączyć się z odpowiednim poleceniem (lub odpowiednimi opcjami w PuTTY), aby ponownie otworzyć tunel.