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:
0 1 2 3 |
Port 22 #pozostawiamy sobie standardowy port ssh Port 443 #dodajemy 443 (zwykle HTTPS) |
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.
0 1 2 |
ssh user@box -D 8080 |
Zablokowany Jabber
Zablokowany port XMPP? Konfigurujemy aplikację analogicznie jak w powyższym przykładzie, tj. podajemy jako serwer Jabbera localhost, port 1337 ;)
0 1 2 |
ssh -f -L 1337:talk.google.com:5222 root@rootbox -N |
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.
0 1 2 3 4 |
1. z maszyny za NATem: ssh -R 1337:localhost:22 root@rootbox 2. z rootbox: ssh localhost -p 1337 3. z zewn maszyny: ssh root@rootbox; ssh localhost -p 1337; |
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?