Tunelowanie ssh

Tunelowanie SSH jest przesyłaniem nieszyfrowanego ruchu TCP (np. POP3 czy HTTP) poprzez bezpieczny protokół SSH. Do czego to może się przydać? Przecież powszechnie używa się HTTPS, FTPS czy POP3S, czyli 'bezpiecznych' wersji znanych protokołów. Otóż tunelowanie ma jedna wielka zaletę: możemy przesyłać jakikolwiek ruch w postaci nieczytelnej dla podglądaczy, co więcej - możemy go przesyłać decydując o portach z których skorzystamy. Jak nietrudno się domyślić ominięcie blokady portów czy ukrywanie swojej sieciowej działalności to tylko niektóre z ciekawych zastosowań tunelowania... No, ale po kolei :-)

SSH na dowolnym porcie
Przede wszystkim potrzebujemy zewnętrznej maszyny, która będzie drugim końcem naszego tunelu. Dla wygody dobrze mieć na niej roota, aby tunelować porty poniżej 1024. W przypadku gdy mamy zablokowany ruch wychodzący poza portami (przykładowo) 80 (http) i 443 (https), możemy wystawić na naszym serwerze słuchające SSH na którymś z tych portów, na przykład dodając w /etc/ssh/sshd_config:

Podglądcze HTTP
Chcesz ukryć przed swoim providerem, jakie strony odwiedzasz? Nic prostszego - zestawiamy tunel do serwera, po czym w ustawieniach przeglądarki konfigurujemy serwer SOCKSv5 na localhost:8080.

Zablokowany Jabber
Zablokowany port XMPP? Konfigurujemy aplikację analogicznie jak w powyższym przykładzie, tj. podajemy jako serwer Jabbera localhost, port 1337 ;)

SSH za NAT? Reverse SSH Tunneling
Potrzebowałeś kiedyś połączyć się do komputera w domu, stojącego za NATem, nie posiadającego publicznego adresu? Otóż jest na to prosty sposób.

Połączenie SSH z NATowanego adresu do serwera musi być cały czas nawiązane, warto więc pamiętać o ustawieniu KeepAlive Yes oraz reconnecie w wypadku zerwania sessji.

Z jakich sprytnych zastosowań tunelowania korzystacie?

  • Ja czasami korzystam do zestawiania połączeń Remote Desktop za NAT'em :)
    A oto gotowa receptura:

    http://chieftainy2k.wordpress.com/2010/01/10/windows-remote-desktop-via-nat-via-stunnel-via-cygwin/

    Pozdrowienia dla załogi varloga :)

  • torify ssh nasa.gov

  • Pingback: Wykorzystanie serwera VPS do ominięcia zablokowanych portów | lochtcant's blog()

  • daniel

    Bardzo fajny wpis, zwłaszcza ostatnia porada bardzo mi pomogła. Dotychczas stosowałem active port forwardera ale miałem z nim problemy. Prosiłbym Was jednak o pomoc.
    Czy istnieje jakaś możliwość, żeby komenda "z maszyny za NATem: ssh -R 1337:localhost:22 [email protected]" wykonała się w jakiś sposób przy starcie systemu?
    Podejrzewam, że będzie problem bo jak podać hasło do logowania. Bardzo bym prosił o pomoc. Z góry dzięki.

    • Hej, haslo do logowania nie jest problemem poniewaz mozesz wygenerowac klucze do SSH (man ssh-keygen). Przerzucisz swoj publiczny klucz na rootbox i bedziesz mogl sie logowac bez hasla ;-)

      • daniel

        Dzięki bardzo za odpowiedź :)
        Co prawda ja mam konto w innym miejscu ale myślę, że też nie będzie problemu. Co do samej komendy. Czy wystarczy zrobić to jako zadanie cron? Czy trzeba będzie pisać skrypt startowy?

  • daniel

    Bardzo fajny wpis, zwłaszcza ostatnia porada bardzo mi pomogła. Dotychczas stosowałem active port forwardera ale miałem z nim problemy. Prosiłbym Was jednak o pomoc.
    Czy istnieje jakaś możliwość, żeby komenda "z maszyny za NATem: ssh -R 1337:localhost:22 [email protected]" wykonała się w jakiś sposób przy starcie systemu?
    Podejrzewam, że będzie problem bo jak podać hasło do logowania. Bardzo bym prosił o pomoc. Z góry dzięki.

    • Hej, haslo do logowania nie jest problemem poniewaz mozesz wygenerowac klucze do SSH (man ssh-keygen). Przerzucisz swoj publiczny klucz na rootbox i bedziesz mogl sie logowac bez hasla ;-)

      • daniel

        Dzięki bardzo za odpowiedź :)
        Co prawda ja mam konto w innym miejscu ale myślę, że też nie będzie problemu. Co do samej komendy. Czy wystarczy zrobić to jako zadanie cron? Czy trzeba będzie pisać skrypt startowy?