|
wersja 1.1 |
|
Spis treści |
ChangeLog 1. W czym tkwi problem ? 2. Czy istnieje rozwiązanie ? 3. Podstawy 4. Co będziemy potrzebować 5. OpenSSL 6. Stunnel 7. Składamy wszystko do kupy 8. Odbiór poczty 9. Wysylanie poczty Posłowie |
| ChangeLog |
Zmiany od wersji 1.0: - uaktualnienie dla wersji 4.xx stunnel, drobne poprawki |
| 1. W czym tkwi problem ? |
Hmmm... Skoro czytasz ten dokument, mam nadzieję, że nie muszę tego wyjaśniać. Jeśli jednak tak nie jest, oto krótkie wprowadzenie: za każdym razem, gdy odbierasz swoją pocztę z serwera, twoje hasło oraz treść samego listu przesyłana jest do twojego komputera w postaci.... tak, tak, niezaszyfrowanej. Po kabelku lecą po kolei literki twojego hasła a następnie cały dokument. Zdziwiony ? Mam nadzieję, że nie. Tego, co wynika z powyższego, nie muszę wyjaśniać. Napiszę tylko, że w Sieci roi się od programów stworzonych tylko w jednym celu: podsłuchiwanie. Program taki zainstalować można na praktycznie każdym komputerze w sieci... A od tego krok do nieszczęścia. |
| 2. Czy istnieje rozwiązanie ? |
Gdyby go nie było, nie miałbym o czym pisać. Prawdę mówiąc istnieje kilka potencjalnych rozwiązań tego problemu i wszystkie one mają zarówno swoje zalety, jak i wady. I tak na przykład weźmy protokół POP3. Posiada on rozszerzenia, takie jak APOP czy Kerberos. Jeśli chodzi o APOP, to krążą o nim nieciekawe opinie - jest to słabe zabezpieczenie, które dodatkowo wymaga, aby zarówno nasz klient poczty jak i serwer, z którym się łączy, także potrafiły go używać. Przykładem serwera z "wbudowanym" APOPem jest SolidPOP3d, przykładowym klientem jest natomiast Eudora. Rozwiązanie, które tutaj przedstawiam wydaje się być nalepszym obecnie sposobem zabezpieczenia. |
| 3. Podstawy |
Na czym polega tunelowanie ? Pisząc w skrócie, polega to na tym, że twój klient poczty (np. Outlook Express :) komunikuje się z serwerem poczty nie bezpośrednio, lecz poprzez bezpieczny protokół SSL. Inaczej. Zamiast KOMPUTER<---->SERWER mamy KOMPUTER<--ssl-->SERWER. Jeszcze inaczej: SSL jest protokołem, który leży w warstwie pomiędzy aplikacjami (takimi jak np. telnet) a protokołem TCP/IP. Sam klient poczty "nie zdaje sobie sprawy" z tego, że po drodze do serwera cała informacja jest szyfrowana. Może teraz parę słów o SSL. Jest to protokół, który zapewnia szyfrowanie danych i uwierzytelnia serwery biorące udział w połączenniu TCP/IP. Jako ciekawostkę dodam, że SSL dokonuje kompresji danych przed ich zaszyfrowaniem. W pracy tej opisuję, jak za pomocą SSL utworzyć szyfrowane połączenie do odbioru poczty między klientem a serwerem. Zakładam, że naszym serwerm poczty jest Linux (pop3 lub imap) a klientami, które z niego korzystają są komputery M$ Windoze z programem Outlook Express. Celem jest takie skonfigurowanie naszego serwerka, aby hasło osoby odbierającej pocztę oraz sam dokument leciał po sieci w postaci zaszyfrowanej. Teraz, gdy wszystko jest jasne, możemy zaczynać. |
| 4. Co będziemy potrzebować |
Hmm... W sumie potrzebne będą następujące rzeczy: * OpenSSL (www.openssl.org) * Stunnel (www.stunnel.org) * Uprawnienia roota (we własnym zakresie :) * Odrobina cierpliwości i zawziętości * Podstawowa wiedza na temat Linuxa O ile o trzy ostatnie rzeczy musisz zadbać sam, reszta dostępna jest w Sieci. Za friko. Dlatego powienieneś ściągnąć ostatnie wersje ww. programów. Poniżej podaje, w miarę dokładnie, etapy instalacji. Powinienem jeszcze wyjaśnić, że poniższy opis dotyczy instalacji na Linuxie Slackware, z kodów źródłowych (.tar.gz). Zwróć szczególną uwagę na ścieżki dostępów, gdyż mogą one być u Ciebie trochę inne. Oczywiście zmieniaj je na bieżąco. I jeszcze jedna, naprawdę ważna uwaga. Jeśli po drodze coś nie zadziała, nie idź dalej, dopóki problemu nie rozwiążesz. Aby poskładać to wszystko u siebie do kupy, siedziałem... trzy dni. Otóż dokumenty jak to zrobić, które ściągnąłem z Sieci znacznie różniły się od siebie, w każdym brakowało czegoś istotnego. To jest główny powód, dla którego napisałem tą pracę - mam nadzieję, że nie będziesz się z tym męczył tak, jak ja. A teraz się uśmiechnij - ostatni raz ;) |
| 5. OpenSSL |
Po kolei. Najpierw instalujemy i konfigurujemy OpenSSL. Dobra, jedziemy: * ściągasz sobie Openssl....tar.gz. Najlepiej ostatnią wersję. * rozpakowujesz ją, kompilujesz i instalujesz. Nie wiem dokładnie, czy ma on jakieś szczególne wymagania co do bibliotek itp, bo u mnie poszło to bez problemu. Jakby coś nie grało, rzuć okiem do dokumentacji. Tak więc po rozpakowaniu w katalogu openssl: ./config make make test make install * u mnie (domyślnie) zainstalowało się w /usr/local/ssl. Tam, w podkatalogu bin, znajduje się plik openssl. Należy wprowadzić do zmiennej systemowej $PATH ścieżkę do tego podkatalogu. Ja to zrobiłem edytując /etc/profile: PATH=........:/usr/local/ssl/bin:.......... Nie wiem, czy nie trzeba się wylogować i zalogować, żeby toto zaczęło działać. W każdym razie po ponownym zalogowaniu, gdziekolwiek byś nie był, wpisujesz: opens [teraz naciskasz kilka razy tabulator] i jak wyrzuci m.in. openssl, będzie o.k. * do ścieżek z bibliotekami, trzba dopisać te ssl'a. Czyli: edycja pliku /etc/ld.so.conf i dopisujesz linijkę: /usr/local/ssl/lib Zapisujesz zmiany i jako root wydajesz polecenie: ldconfig Teraz jest ok. Do tej pory nie powinno być problemu. * Dobra, teraz trzeba wygenerować naszemu komputerowi podstawowy certyfikat, którym możemy podpisywać, uwierzytelniać inne certyfikaty. Wybacz, jeśli się zamotałem, ale każdy normalny certyfikat (czyli użytkowy: np. serwer pop3) musi być podpisany nienormalnym :) certyfikatem, który zaraz sobie wygenerujemy. Wchodzisz do /usr/local/ssl/misc/ Chwilowe odejście od tematu (ale i tak to zrób): Żeby później, jak będziesz podpisywał certyfikaty np. dla serwerów www, Ineternet Explorer się nie burzył, edytujesz plik CA.sh i poprawiasz jedną z pierwszych linijek: DAYS="-days 365" na: DAYS="-days 1825" Dobra, zapiszujesz zmiany. Teraz możesz wygenerować swój klucz: ./CA.sh -newca Wpisujesz mu dane użytkownika, komputera i tak dalej. Na koniec hasło, które chroni twój klucz. Musisz je zapamiętać. Teraz w katalogu /usr/local/ssl/misc/demoCA/ powstały: cacert.pem - Twój certyfikat a w jego podkatalogu private/: cakey.pem - Twój klucz prywatny Dobra, z ssl to by było na tyle. Na razie... |
| 6. Stunnel |
* Ściągasz, rozpakowujesz i: ./configure --sysconfdir=/etc make make install Mam nadzieję, że nie będziesz miał z tym problemu. Prawdziwe piekło rozpęta się teraz... * Tam, gdzie rozpakowałeś stunnel, w podkatalogu tools/ znajduje sie plik: stunnel.cnf Kopiujesz go do /usr/local/ssl/certs/ Na jego podstawie będzie wygenerowany certyfikat dla stunnela. Teraz wchodzisz tam i piszesz: openssl req -new -nodes -out req.pem -keyout key.pem -config stunnel.cnf Wpisujemy jeszcze raz odpowiednie dane gdy zapyta: najważniejsze jest to, żeby w miejscu gdzie pyta o FQDN (Common Name) wpisać mu DNSową nazwę Twojego serwera pocztowego, np. poczta.serwer.pl * Utworzył pliki: key.pem (dajesz mu `chmod 0600 key.pem`). Drugi plik to req.pem i jest on wykorzystany do podpisania key.pem. * Kopiujemy req.pem do /usr/local/ssl/misc/, ale zapisujemy go jako newreq.pem. Teraz tam wchodzisz i wydajesz polecenie: ./CA.sh -sign Teraz go podpisze i zapyta o hasło. Powstanie plik: newcert.pem Dobra. Mamy podpisany certyfikat. Jeśli wytrwałeś do tego momentu, jesteś wielki. Już niedługo koniec. * Przenosimy newcert.pem z powrotem do /usr/local/ssl/certs/. Tworzymy plik pusty, o nazwie: stunnel.pem (np. touch stunnel.pem) i dajemy mu chmod 0600. Jesteśmy w /usr/local/ssl/certs. Teraz: cat key.pem >> stunnel.pem echo "" >> stunnel.pem cat newcert.pem >> stunnel.pem Zostawiamy tylko plik stunnel.pem, pozostałe z nich kasujemy. Dobra, najgorsze mamy za sobą. Teraz będzie z górki. |
| 7. Składamy wszystko do kupy |
Jak to wszystko zmusić do działania ? Ano tak: - do pliku /etc/services dopisujesz: pop3s 995/tcp imaps 993/tcp i zapisujesz zmiany. Jeśli już tam jest taki wpis, nie robisz nic. Teraz poprzenosimy trochę plików a następnie napiszemy sobie od podstaw plik stunnel.conf.
to od podstaw a przy okazji wyjaśnią się rzeczy, które przed chwilą wykonałeś. Jedziemy: Na początek przechodzisz do /etc/stunnel/ i tworzysz pusty plik stunnel.conf: cd /etc/stunnel/ touch stunnel.conf Umieszczasz w nim następujące rzeczy (plik ten może zawierać komentarze rozpoczynające się od # (hash), więc od razu wyjaśniam co jest do czego): # najpierw plik zawierający certyfikat CA: CAfile = /etc/stunnel/cacert.pem # teraz Twój plik z kluczem dla stunnel cert = /etc/stunnel/stunnel.pem # włączamy logowanie (przynajmniej na początek) dla naszego programu debug = 7 output = /var/log/stunnel.log # potem katalog, w którym zostanie "zamknięty" stunnel (chroot) chroot = /var/run/stunnel/ # następnie plik, w którym trzymany będzie PID programu: # jest to ścieżka względna - do chroot (poprzedniego parametru): pid = /stunnel.pid # następnie użytkownik i grupa na prawach kogo działać będzie stunnel setuid = nobody setgid = nogroup To jest koniec konfiguracji "głównej". Zaraz dodamy usługi, a teraz parę słów wyjaśnień nt. chroot. Otóż program stunnel uruchamia się w swoim własnym, "wirtualnym" systemie plików. Nawet gdyby w programie została znaleziona dziura, intruz utknie w /var/run/stunnel/, gdyż ten katalog będzie widziany przez stunnel jako / (root). Dodatkowo program działa jako użytkownik nobody co dodatkowo osłabi potencjalnego napastnika. Dobra, wracamy do edycji stunnel.conf i dodajemy bezpieczny odbiór poczty - POP3s i IMAPs od razu (możesz dodać tylko jeden jeśli Twój serwer nie używa dwóch): [pop3s] accept = 995 connect = 110 [imaps] accept = 993 connect = 143 Tutaj nie ma co wyjaśniać - w nawiasie jest nazwa usługi z /etc/services, accept to port, na którym stunnel nadsłuchuje dla niej a connect to właściwy port, dla którego robi tunelowanie. Przypominam, że POP3/IMAP powinny działać normalnie na Twoim serwerku. A zaraz będą działać dodatkowo jako POP3s i IMAPs... A teraz chwila prawdy - uruchomienie stunnela. Po prostu wpisz (jako root) polecenie: stunnel I od razu obejrzyj sobie /var/log/stunnel.log - ten właśnie plik odpowie na (prawie) wszystkie Twoje pytania. Jeśli wszystko jest ok, po wydaniu polecenia netstat -a powinieneś zobaczyć oczekujące na połączenie odpowiednie porty (995/993). Jeszcze raz powtarzam: plik z logami odpowie na Twoje pytania. |
| 8. Odbiór poczty |
Chyba już czas na to, aby tą całą machinę wprawić w ruch... Ale trzasnąłem gadkę :). Dobra. Sprawa wygląda tak: Napiszę tutaj o konfiguracji Outlooka, który potrafi dogadać się poprzez SSL. Tutaj oczywista uwaga: jeśli używasz innego programu do odbioru poczty (to znaczy twoi użytkownicy. Od początku nie podejrzewałem Cię o używanie M$ Windoze), musisz sprawdzić czy umożliwia on odbiór poczty przez SSL. Nie wszystkie to potrafią... Wracamy do Outlooka: * jeśli komputery odbierały do tej pory pocztę przez nieszyfrowaną, wystarczy zmienić tylko jedną rzecz: Tools-->Accounts-->Mail-->Properities i klikasz na zakładce "Advanced" i zaznaczasz tam Secure SSL Connection. Znajdziesz to. * jeśli nie odbierały poczty, to konfigurujesz nowe konto normalnie, a na koniec zazanczasz to, co napisalem wyżej. |
| 9. Wysyłanie poczty |
Na początek podziękowania dla Zbyszka Kosno, który zaproponował mi dodanie tego punktu do niniejszej pracy. Muszę się przyznać, że nie miałem okazji tego wypróbować. Dostałem jednak potwierdzenie od SzAmO (thx!), że wszystko działa jak należy. Oto opis: Do pliku /etc/services dopisujesz: ssmtp 465/tcp i zapisujesz zmiany. Aby umożliwić zaszyfrowane przesłanie poczty na serwer do /etc/stunnel/stunnel.conf należy dopisać: [ssmtp] accept = 465 connect = 25 Pozostaje tylko w Outlooku, w miejscu opisanym wyżej, dodatkowo postwić "ptaszek" przy szyfrowanym wysyłaniu poczty (w razie potrzeby wpisać port 465). No i wypadałoby wywołanie stunnel wrzucić do jakiegoś pliku startowego... |
| Posłowie |
Jest to pierwsza wersja tego dokumentu i zawiera pewnie jakieś błędy/niedoróbki/potknięcia itp. Będę bardzo wdzięczny za wszelkie uwagi, komentarze, poprawki, wyrazy wdzięczności. Z góry przepraszam za powyższe i mam nadzieję, że będziecie mnie informować w których miejscach coś nie gra. Jako (częściowe) wytłumaczenie przedstawiam fakt, że większość tej pracy powstawała w późnych godzinach nocnych. Ostatnia wersja tego dokumentu znajduje się pod niżej wymienionym adresem. Kontakt ze mną: linio@terramail.pl Wesprzyj finansowo autora - kliknij tutaj |
|
=============================== Henryk Liniowski, Poznań 2002 http://linio.terramail.pl =============================== |