
Tunel przez SSH
Protokoły
TCP oraz IP nie posiadają żadnych mechanizmów ochrony danych ani
autoryzacji połączeń. Ponieważ istnieją metody, aby podsłuchać transmisję realizowaną
właśnie poprzez TCP/IP lub podszyć się pod dany serwer, należy zastosować
takie rozwiązania, aby wyeliminować zagrożenia z tym związane lub chociaż w
możliwie największym stopniu poprawić bezpieczeństwo i ochronę przesyłanych
danych. Eliminacja zagrożenia związanego z bezpieczeństwem od strony sieci polega
na odłączeniu serwera od sieci! :-) To chyba jedyne, naprawdę skuteczne i pewne
rozwiązanie! Ale nie o to tutaj przecież chodzi...
Nowa wersja protokołu IP (IPv6) rozwiązuje ten problem, jednak
jeśli nie chcemy lub nie możemy z niej korzystać, pozostaje nam stosowanie różnych
programów i innych zabezpieczeń (SSH, SSL, Kerberos...).
Jedną z ciekawych propozycji rozwiązania problemu zagrożenia podsłuchem (sniffing)
jest zastosowanie tunelu (ang. tunelling) wykorzystując program SSH.
Jest to dość proste, a zarazem skuteczne rozwiązanie. Cała operacja polega na
utworzeniu szyfrowanego połączenia tam, gdzie sieć jest najbardziej narażona
na atak, czyli wtedy, gdy dane są przesyłane poprzez sieć, której nie możemy
kontrolować (Internet).
Ściślej całą operację tunelowania można opisać tak:
1. Dany program, zamiast połączyć się ze zdalnym serwerem, łączy się z lokalnym
komputerem wykorzystując port, na którym czuwa ssh. Na tym odcinku połączenia
dane są przesyłane w sposób jawny, lecz nie może być tutaj mowy o podsłuchiwaniu!
2. Program ssh, po przechwyceniu połączenia, przekazuje dane do demona ssh zainstalowanego
i skonfigurowanego na odległym komputerze. Na tym odcinku (biegnie on najczęściej
właśnie poprzez Internet) dane są szyfrowane, a możliwość połączenia poddana
autoryzacji, jaką oferuje ssh.
3. Ssh na serwerze, z którym jesteśmy połączeni, przekazuje dane do właściwego
portu na tym właśnie serwerze (może je również przekazywać do innej maszyny,
jeśli tak zostanie ustawiony tunel). Na tym odcinku dane nie są kodowane, lecz
jeśli korzystamy z danej usługi na serwerze, z którym łączymy się właśnie poprzez
tunel z wykorzystaniem ssh, możemy czuć się bezpieczni.
A teraz same konkrety - pop3, czyli zdalny odbiór poczty tunelowanej w wykorzystaniem
programu ssh2.
Metoda pierwsza:
W pliku konfiguracyjnym klienta ssh2, znajdującym się w katalogu domowym
użytkownika, czyli $HOME/ssh2/ssh2_config (jeśli go tam nie ma, skopiuj
z /etc/ssh2/) odnajdujemy i modyfikujemy wiersz:
LocalForward "8888:adres.zdalnego.serwera:110"
pamiętając o usunięciu znaczka # na początku wiersza.
Teraz, po połączeniu się ze zdalnym serwerem, na którym mamy skrzynkę pocztową
i na którym działa demon sshd2:
ssh -l użytkownik adres.zdalnego.serwera
i poprawnym zalogowaniu się, zostaje automatycznie utworzony bezpieczny tunel
pomiędzy portem 8888 naszego komputera, a portem 110 (pop3) zdalnego serwera.
W tej chwili, możemy sprawdzić pocztę, wskazując jako serwer poczty nasz lokalny
komputer, np.:
fetchmail -c localhost -P 8888 -p pop3
Powyższe polecenie wydajemy oczywiście z poziomu naszego lokalnego komputera,
a nie na konsoli serwera, z którym jesteśmy połączeni za pomącą SSH.
Jak widzisz, metoda ta jest bardzo łatwa w konfiguracji, wymaga jednak nawiązania
najpierw połączenia ze zdalnym hostem. Ciągłe utrzymywanie takiego połączenia
nie jest jednak konieczne - połączenie tunelowane nadal będzie utrzymywane po
wylogowaniu się ze zdalnego serwera, jeśli tylko jest wykorzystywane.
Do pliku ssh2_config możemy oczywiście dodać kilka linii LocalForward
wskazując na porty określonych usług zdalnego serwera pamiętając o wykorzystywaniu
lokalnych portów o numerach powyżej 1024. Możemy "tunelować" nawet połączenia
z telnetem (tylko po co? :-)).
Jeżeli nie chcemy logować się na zdalnym serwerze, tylko utworzyć potrzebny
tunel, skorzystajmy z drugiej metody:
ssh -f -n -L 8888:adres.zdalnego.serwera:110 adres.zdalnego.serwera sleep
600
Po wydaniu powyższej komendy i podaniu hasła, zostanie utworzony tunel pomiędzy
portem 8888 lokalnego komputera a portem 110 zdalnego serwera i będzie on utrzymywany
przez 10 minut. Opcja -f powoduje, iż po autoryzacji SSH usunie się w
tło, a komenda sleep służy do podtrzymania tunelowanego połączenia.
Czy utworzone połączenia działają, możemy sprawdzić wydając komendę:
netstat -an
Aby zwiększyć bezpieczeństwo, pozostawiając możliwość łączenia się z danymi
usługami na serwerze tylko poprzez wykorzystanie tuneli przez SSH, należy wpisać
w plikach /etc/hosts.allow i /etc/hosts.deny odpowiednie reguły
kontroli dostępu umożliwiające połączenia tylko z lokalnego serwera (poza oczywiście
SSH!).
Copyright
(C) 2000-2002 by Grzegorz Lewandowski
All rights reserved