Tunelowanie SSH i Proxy (SOCKS) dla początkujących

Wstęp

Samo SSH (ang. Secure Shell – Bezpieczna konsola) służy do podłączenia się do innego komputera zwanego serwerem SSH w taki sposób, że osoba podsłuchująca ruch nie będzie w stanie odczytać transmisji. Jednakże w szerszym znaczeniu SSH[en] pozwala na wiele innych funkcji. W tym wpisie zajmę się jedną z rozszerzonych funkcji SSH szczególnie przydatną w wielu sytuacjach. Funkcja ta nazywa się przekierowywaniem portów, a w naszym zastosowaniu tunelem SSH.

Jakie korzyści?

Kilka przykładów sytuacji w których możemy skorzystać z tunelowania SSH (i wszystkich innych o których tu pisałem):

  • Jesteśmy podpięci do sieci w której dostawca blokuje dostęp do stron
    Ja dla przykładu wykorzystywałem tunelowanie przez SSH będąc w Niemczech na wycieczce, gdzie autorzy filmów na youtube blokowali oglądanie ich filmów. Wtedy tunelowałem się przez serwer SSH z mojej uczelni.
  • Pracodawca blokuje dostęp z sieci wewnętrznej do różnych zasobów (stron, filmów, streamingów)
  • Jesteśmy podłączeni do publicznej sieci bezprzewodowej i chcemy być bezpieczniejsi (uwaga na marginesie: jeżeli sieć jest niezabezpieczona hasłem transmisja pomiędzy laptopem, a punktem dostępowym nie jest szyfrowana. Z tego powodu lepiej się łączyć z sieciami zamkniętymi do których znamy hasło niż do sieci otwartych)

Co potrzebujemy?

  1. Po pierwsze, najważniejsze i najtrudniejsze: serwera SSH, czyli komputera, który będzie w stanie z Internetu odebrać nasze połączenie. Jest wiele miejsc, w których można dostać taki dostęp. Ja na przykład mam taki dostęp na swoim domowym serwerku, na uczelni, w pracy i na koncie od mojego dostawcy hostingu.
  2. Zainstalowany program obsługujący SSH. Ja w tym wpisie będę używał otwartego i wolnego OpenSSH.
  3. Program, który chcemy tunelować, a który będzie obsługiwał protokół SOCKS. Ja w tym wpisie będę pokazywał na przykładzie przeglądarki Firefox.

Rozwiązanie przypadku

Opis przypadku

Zaproponuję rozwiązanie przypadku, w którym często podłączamy się do niezabezpieczonych sieci, do których nie mamy zaufania. Nasz serwer SSH znajduje się w naszym domu i mamy zaufanie do sieci w której on się znajduje.

Podstawowe rozwiązanie

Wystarczy zrobić dwa kroki.

Po pierwsze musimy przekierować port lokalny na zdalny port naszego serwera. Mówiąc prościej port lokalny to początek jednej z wielu rur, którą dla uproszczenia sobie ponumerowaliśmy i sprawiamy by koniec tej rury był przyczepiony do naszego serwera. W OpenSSH dokonujemy tego poleceniem:

ssh -f -D <numer_rury> <uzytkownik>@<serwer> -N

Czyli na przykład:

ssh -f -D 29092 tomasz@serwerssh.tstrojny.pl -N

I oczywiście podać hasło do tego użytkownika na serwerze.

Po drugie musimy ustawić serwer proxy na lokalny port korzystając z protokołu SOCKS. Prościej: musimy sprawić, żeby cały ruch z przeglądarki wpadał do rury o podanym przez nas wcześniej numerze. Dzięki temu będziemy wiedzieli, że dociera bezpośrednio do serwera i dopiero stamtąd leci w świat.

W tym celu należy:

  1. Wejść w Edycja->Preferencje
  2. Zakładka Zaawansowane
  3. Podzakładka Sieć
  4. W sekcji Połączenie kliknąć Ustawienia
  5. Wybrać Manualną konfigurację serwera Proxy
  6. Wpisać w polu serwer SOCKS 127.0.0.1 i w port numer portu który podaliśmy (dwie uwagi na marginesie: 1. adres IP 127.0.0.1 oznacza nasz komputer, tzw. loopback; 2. Aby to zadziałało należy się upewnić, że w polu poniżej Nie używaj proxy dla nie ma wpisanego localhost, ani 127.0.0.1)
  7. Wszystko zatwierdzić

Przykładowa konfiguracja programu Firefox:

Przechwycenie obrazu ekranu - 07.07.2014 - 00:49:51

Kilka usprawnień

Osobny profil Firefox na połączenia tunelowane

Na tym etapie mamy sprawę załatwioną. Jednakże rozważając, że tak samo często łączymy się z siecią domową co niepewnymi sieciami publicznymi, wypadałoby znaleźć sposób na usprawnienie całego tego procesu.

Jednym z nich jest utworzenie w przeglądarce Firefox innego profilu w którym konfiguracja naszego portu i serwera SOCKS zostanie już na stałe. Utworzyć nowy profil w przeglądarce Firefox możemy przez uruchomienie jej z parametrem -P od profiles.

firefox -P

Tworząc i nazywając nowy profil, zmieniamy mu konfigurację serwera proxy zgodnie z powyższą instrukcją. Od teraz za każdym razem jak włączymy profil domyślny to będzie korzystał z domyślnych ustawień, a drugi profil będzie próbował się tunelować przez nasz lokalny port.

Oskryptowanie całego procesu

Osobiście jestem fanem automatyzacji i skryptowania wszystkich mechanicznych zadań, więc podrzucę też swoją koncepcję skryptu, po skonfigurowaniu którego będzie można dodać aktywator w panelu pokazujący na ten skrypt i po podaniu hasła odpali nam się stunelowana przeglądarka.

#!/bin/sh
uzytkownik=                  #Twoj uzytkownik na serwerze SSH,            np. uzytkownik=tomasz
domena=                      #adres serwera,                              np. serwerssh.tstrojny.pl
port_local=                  #port lokalny ktory bedzie tunelowal         np. port_local=29092
port_remote=                 #port na ktorym sie laczymy do ssh, domyslnie port_remote=22
profil=                      #profil w firefoksie, z ustawionym proxy     np. profil=tunelowy

echo "Konczenie starych procesow...\n"
kill `ps aux | grep $port_local | grep -v grep | awk '{print $2}'` 2>/dev/null

echo "Dobijam sie do: $domena na porcie $port_remote..."
echo "Podaj hasło użytkownika $uzytkownik."
ssh -f -D $port_local $uzytkownik@$domena -N -p $port_remote

echo "Odpalam nowa instancje firefoksa na profilu: $profil"
nohup firefox -new-instance -P $profil &

while [ `ps aux | grep Kazi | grep firefox` ]; do
        exit
done
Link do pobrania: tutaj.

 

Dodaj komentarz