Czwartek, 07 maja 2009 :: 22:54:43
Zabezpieczanie połączenia Jabber na Dreamhost
Ci, z Was, którzy korzystają z serwera Jabbera w swojej domenie osadzonej na Dreamhoscie zapewne zauważyli, że nie mogą połączyć się z serwerem za pomocą bezpiecznego protokołu (TLS/SSL). To naraża użytkowników na ataki MITM i możliwość podsłuchania prowadzonej rozmowy. Nie wierzysz? Odpal Wiresharka, napisz coś do kogoś na Jabberze, a następnie w polu filtr wpisz "tcp.port == 5222" — wewnątrz pokazanych pakietów znajdziesz treść swoich rozmów.
Oczywiście Dreamhost oferuje wariant z bezpiecznym połączeniem do serwera, ale wyłącznie po uprzednim zainstalowaniu certyfikatu SSL (do którego potrzebne jest wykupienie unikalnego adresu IP za 4 USD/mc). Po co płacić dodatkowe 48 USD rocznie, skoro można zabezpieczyć swoje połączenie z serwerem Jabbera za darmo?
Zabezpieczamy połączenie do Jabbera na Dreamhoscie
Do ustanowienia szyfrowanego połączenia z naszym serwerem Jabbera wykorzystamy tunelowanie SSH (pisałem już o nim w kontekście omijania blokady nałożonej na Polaków przez internetowe radio Pandora.com).
Odpal PuTTY (na Windows) i skonfiguruj połączenie do swojego serwera
Następnie, wybierz z menu po lewej stronie Connection -> SSH -> Tunnels
Jako Source port podaj L5222, a jako Destination twojadomena.tld:5222 - upewnij się, ze poniżej zaznaczone są pola Local i Auto
Zapisz ustawienia sesji i nawiąż kliknij Open
W przypadku Linuksa lub Mac OS X wystarczy wydać następującą komendę:
ssh -l twój_login twoja_domena -L 5222:twoja_domena:5222
W moim przypadku, wygląda to tak:
ssh -l pk konieczny.be -L 5222:konieczny.be:5222
Teraz wystarczy tylko zmienić ustawienia serwera w kliencie Jabbera — ja korzystam z komunikatora PSI:
Kliknij prawym przyciskiem na nazwę swojego konta i wybierz Modify Account
Przejdź na zakładkę Connection i zaznacz Manually Specify Server Host/Port oraz wpisz: 127.0.0.1 w polu Host i 5222 w polu Port.
Zapisz zmiany i rozłącz się a następnie połącz z serwerem. Od teraz twoje połączenie jest już bezpieczne.
Możesz teraz spróbować powtórzy test z Wiresharkiem (patrz pierwszy akapit). Treść zawarta w znalezionych pakietach będzie ciągiem niezrozumiałych znaków.
Jak to działa?
Łącząc się ze swoim serwerem po bezpiecznym protokole SSH, tworzysz tunel - czyli szyfrowane połączenie wewnątrz którego mogą płynąć pakiety "niezabezpieczonego" protokołu (w naszym przypadku, jest to nieszyfrowany protokół Jabber/XMPP). Parametr -L wskazuje poleceniu SSH, który port lokalny (u nas: 5222) ma zostać otwarty na twoim komputerze (127.0.0.1) i gdzie ruch zostanie przekierowany (u nas: konieczny.be:5222). Port 5222 to standardowy port Jabbera.
Po pomyślnym zalogowaniu się do serwera SSH, PuTTY (bądź inny klient SSH) otwiera na wskazanym lokalnym porcie "drzwi do tunelu". Wszelkie połączenia skierowane na ten port, będą teraz (poprzez szyfrowany protokół) przenoszone do hosta i portu zdefiniowanego w dalszej części parametru -L — ciąg po pierwszym dwukropku (u nas: konieczny.be:5222).
Łącząc się więc klientem Jabbera z adresem swojego komputera (127.0.0.1) na porcie 5222 jesteś automatycznie "przekierowywany" na drugi koniec tunelu, a zatem docierasz do konieczny.be, ale już nie "gołym" protokołem Jabbera, a z "ochroną kryptograficzną" SSH.
Podane wyżej wskazówki zadziałają również w przypadku serwerów Jabbera u innych niż DreamHost dostawców. Analogicznie, tunelować można inne niż Jabber/XMPP protokoły. Ta metoda świetnie sprawdza się również w przypadku FTP (brak SFTP) lub POP3 (brak SSL). Wystarczy tylko dopasować numery portów.
Ciągle nie jesteśmy bezpieczni...
Warto mieć na uwadze, że tunelowanie (a także natywne szyfrowane SSL-em połączenia Jabber/XMPP) zabezpieczają nasza wiadomości TYLKO na trasie My -> Nasz serwer Jabbera. Atakujący dalej może podsłuchać nasze rozmowy, sniffując połączenia pomiędzy serwerami nadawcy i odbiorcy w sieci Jabber.
W następnym Jabberowym odcinku opiszę, jak zapewnić bezpieczną komunikację na całej trasie pomiędzy nadawcą i odbiorcą (tzw. end to end encryption).
Aktualizacja 8.5.2009:
Mateusz Biliński celnie zauważa, że można "oszukać" Dreamhost w jeszcze jeden sposób. Jako host/port serwera Jabbera podajemy nie nazwę naszej domeny, a nazwę dreamhostowego serwera na którym mamy konto i port 5223. Nazwę swojego serwera możesz znaleźć po zalogowaniu się do panelu, i kliknięciu na Account Status (prawy górny róg) — interesuje nas pozycja Webserver. Serwery Dreamhosta (w przeciwieństwie do dodawanych domen) mają zainstalowane certyfikaty SSL ;-) W niektórych klientach trzeba jeszcze zmienić metodę uwierzytelnienia na "Legacy SSL". Znów, bez tunelowania, bez płacenia, bez...piecznie ;-)
• Następny post:
Tydzień bezpieczeństwa IT w Krakowie
• Poprzedni post:
Jabber na Dreamhost - jak dodać ludzi z GMail?
Chcesz być informowany o kolejnych wpisach na ten temat?
Kanał RSS: kliknij tutaj. Subskrybcja poprzez e-mail: kliknij tutaj.