transparent a virus... Dodał: grzywka18 Dnia: 2008-05-13 11:19:58 hmm Dodał: dzibi Dnia: 2007-12-12 10:01:14 Bez tytułu Dodał: grzywka18 Dnia: 2007-12-11 17:46:06 Bez tytułu Dodał: termid Dnia: 2007-05-09 18:01:11 Bez tytułu Dodał: sarelo33 Dnia: 2006-12-30 23:50:14 Jest ok ale.. Dodał: theviant Dnia: 2006-11-16 08:10:05
Google
Newsletter
Zapisz się na nasz newsletter, jeżeli chcesz być na bieżąco informowany o aktualnościach..
Stunnel - tunelowanie poczty po SSL
piątek, 08 sierpnia 2003 -
Napisał: Artur Kulda (19496 odsłon)
Poczta elektroniczna jest jedną z najczęściej
wykorzystywanych usług internetowych, korzysta z niej praktycznie każdy. Jest
to także usługa bardzo osobista - każdy ma własny adres email, a
czytanie cudzej poczty jest jednym z największych przestępstw przeciwko
netykiecie. Poufność korespondencji, która chronić można za pomocą PGP, to
jednak tylko jedna strona medalu. Drugim największym problemem związanym z
poczta elektroniczna jest bezpieczeństwo protokołu POP3 używanego do jej ściągania
z serwera. POP3 wymaga zalogowania do serwera, przy czym hasło oraz login użytkownika
są przesyłane otwartym tekstem i łatwe do podsłuchania. Do niedawna jednym z
głównych źródeł takich informacji uzyskiwanych za pomocą snifferów był
telnet, jednak w ciągu ostatnich kilku lat został on praktycznie wyeliminowany
przez bezpieczne SSH. Problem jednak nadal istnieje, jako ze ogromna większość
ludzi nadal ściąga swoja pocztę po POP3 bez żadnej dodatkowej ochrony. W międzyczasie
wynaleziono rozszerzenia POP3 (takie jak APOP), mające za zadanie
zabezpieczenie procesu logowania przed podsłuchaniem, ale maja one szereg wad wychodzących
w praktyce. Jedną z nich jest także to, ze nie są one zbyt chętnie wdrażane
przez producentów oprogramowani klienckiego, co niestety jest dość poważnym
argumentem w dobie dominacji Windows na stacjach roboczych. W chwili obecnej
najlepszym rozwiązaniem, posiadającym szereg zalet i, co istotne, wspieranym
przez przemysł komputerowy jest protokół SSL. Z punktu widzenia klienta jest
to przeważnie kwestia jednego przełącznika w konfiguracji programu
pocztowego. Postawienie serwera POP3/SSL wymaga trochę więcej zaangażowania
od administratora, ale wysiłek ten z pewnością się opłaci.
Główne zalety tunelowania POP3/SSL to:
- szyfrowana jest całość transmisji, włącznie z nagłówkami i treścią
ściąganych listów;
- protokół SSL jest powszechnie uznanym standardem, dostępnym na
praktycznie wszystkie używane obecnie platformy;
- z kryptograficznego punktu widzenia SSL jest protokołem sprawdzonym i
bezpiecznym;
1. Wstęp
Do naszych celów będzie jedynie potrzebny program stunnel,
który można zainstalować z paczki za pomocą polecenia pkg_add lub z portów
(co oczywiście polecam) /usr/ports/security/stunnel. Zakładam z góry,
że serwer poczty pop3 i smtp jest już poprawnie skonfigurowany i działa bez
problemów. Plik konfiguracyjny znajduje się w katalogu /usr/local/etc/stunnel/stunnel.conf
2. Oprogramowanie
Dla potrzeb tego artykułu nie ma większego
znaczenia, z jakiego systemu operacyjnego korzystamy, pod warunkiem ze jest to
system unixowy ;). Wykorzystywane oprogramowanie jest dostępne w postaci źródeł
i kompiluje się na wszystkich popularnych odmianach Unixa, z Linuxem i BSD na
czele.
Oprzemy się na następujących pakietach oprogramowania: - OpenSSL Biblioteki oraz aplikacje kryptograficzne, stanowiące serce protokołu SSL.
Dostępne w postaci binarnej dla wszystkich dystrybucji Linuxa oraz BSD (pakiet
openssl), a w przypadku OpenBSD jest dostępny od razu w standardowej
dystrybucji. W przypadku innych systemów operacyjnych konieczne może być
skompilowanie pakietu ze źródeł dostępnych na wielu serwerach. - Stunnel Uniwersalny demon proxy, pozwalający na tunelowanie po SSL praktycznie
dowolnych protokołów, z POP3 włącznie. W największym skrócie, stunnel
potrafi przyjąć połączenie SSL i przesyłać rozszyfrowane dane dalej, do
zadanego serwera, a następnie zwracać otrzymane wyniki z powrotem przez
bezpieczny tunel. Również dostępny w postaci gotowych pakietów oraz jako kod
źródłowy. - Solid?POP3 Tunelowanie POP3 nie wymaga żadnej świadomości tego faktu ze
strony demona serwującego ten protokół, ale jeśli nie wybrałeś jeszcze żadnego
innego, to polecam właśnie spop3d. Wszystkie wymienione wyżej programy są
dostępne jako open-source, są rozwijane od dłuższego czasu i nie miały
w przeszłości problemów z bezpieczeństwem.
3. Garść teorii
3.1 Tunelowanie POP3/SSL
Tunelowanie POP3 po SSL odbywa się w sposób
przezroczysty dla tego pierwszego protokołu. Nie wie on nic o tym, ze
faktycznie cała konwersacja odbywa się wewnątrz szyfrowanego tunelu SSL. Jest
to bardzo wygodne, ponieważ nie wymaga żadnego szczególnego wsparcia ze
strony samego serwera POP3 i pozwala na łatwe adaptowanie tego rozwiązania dla
innych protokołów pocztowych, np. SMTP lub IMAP. Konfiguracja nie wymaga wiec żadnych
zmian w serwerze POP3, działającym na porcie 110. Zamiast tego na porcie 995
(zarezerwowanym dla POP3/SSL) uruchamiamy stunnel, przyjmujący zaszyfrowane połączenia
od klientów. Połączenie to jest rozszyfrowywane przez stunnela i
przekierowywane, już jako zwykły protokół POP3, na port 110 tego samego
serwera. Chroniony w ten sposób jest najbardziej narażony na podsłuch odcinek
pomiędzy klientem a serwerem, zakładamy natomiast oczywiście, ze połączenia
w ramach samego serwera są bezpieczne. Odpowiedzi serwera wracają ponownie do
stunnela, który wysyła je do klienta w tym samym zaszyfrowanym tunelu SSL.
Klient nie wie nic o tych manipulacjach - dla niego po prostu wygląda to
jak protokół POP3 tunelowany po SSL na porcie 995.
3.2 Certyfikaty SSL
Protokół SSL, pomimo ze stosunkowo prosty,
wykorzystuje do uwierzytelnienia złożony standard jakim jest X.509, będący częścią
Infrastruktury Klucza Publicznego (Public Key Infrastructure). Jego celem jest
upewnienie klienta, ze faktycznie łączy się z tym serwerem, z którym chciał
się połączyć. Certyfikaty X.509 opierają się o kryptografie klucza
publicznego i są hierarchiczne, tzn. organizacje wyższego poziomu mogą poświadczać
certyfikaty organizacji niższego poziomu. Weryfikacja legalności certyfikatu
otrzymanego na samym dole takiego drzewa certyfikacji wymaga sprawdzenia całej ścieżki,
aż do samej góry. Koncepcje stojące za X.509 są stosunkowo proste, lecz złożoność
samego standardu bardzo utrudnia ich zauważenie i, paradoksalnie, ten mały
krok stanowi z reguły najtrudniejsza część konfiguracji serwera SSL. W 90%
bowiem procentach przypadków cała ogromna infrastruktura X.509 nie jest nam
potrzebna, wykorzystujemy bowiem drobny jej ułamek. Wystarczy tylko wiedzieć,
ze będziemy musieli wygenerować na własne potrzeby dwa certyfikaty. Licząc
od końca, będzie to certyfikat (klucz publiczny) samego serwera POP3/SSL oraz
drugi, certyfikat naszego mikrourzędu certyfikującego (Certifying Authority),
którym poświadczymy certyfikat serwera.
4. Konfiguracja SSL
Zaczniemy od przygotowania certyfikatów dla
serwera POP3/SSL. Warto pamiętać, ze certyfikat X.509 jest w tym wypadku związany
z nazwa serwera i łączący się z nami klient będzie automatycznie porównywał
wskazana mu nazwę maszyny z nazwą przedstawioną mu w certyfikacie. Dlatego ważne
jest, by nazwa skonfigurowana w certyfikacie była taka sama, jak ta podawana
klientom, np. mail.domena.pl. Z drugiej strony, dzięki temu możemy ten sam
certyfikat wykorzystać do wielu różnych usług na tej samej maszynie (np.
SMTP/SSL, IMAP/SSL).
4.1 Certyfikat CA
Certyfikat jest tak na prawdę kluczem
publicznym serwera, wraz z jego opisem oraz sygnaturą instytucji wyższego
poziomu. Występuje zawsze w parze z kluczem prywatnym, od którego
wygenerowania zaczniemy. Stworzymy klucz RSA o długości 1024 bitów i
zapiszemy go do pliku cakey.pem:
# openssl genrsa -out
cakey.pem 1024
Generating RSA private key, 1024 bit long modulus
.................++++++
......................++++++
e is 65537 (0x10001)
Następnie, z klucza prywatnego generujemy
klucz publiczny, dokładając do niego informacje o serwerze. To wszystko
stanowi Certificate Signing Request, czyli po prostu niepodpisany jeszcze
certyfikat X.509.
# openssl req -new -key
cakey.pem -out cacsr.pem
Using configuration from /usr/lib/ssl/openssl.cnf
-----
Country Name (2 letter code) [AU]:PL
State or Province Name (full name) [Some-State]:Malopolska
Locality Name (eg, city) []:Krakow
Organization Name (eg, company) [Internet Widgits Pty Ltd]:ABA sp. z o.o.
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:ABA sp z o.o
Email Address []:
Jak widać, podajemy podstawowe informacje o
samym serwerze oraz jego właścicielu. W prawdziwym X.509
organizacja występująca o oficjalnie podpisany certyfikat musi dowieść, ze
dane te są prawdziwe i że ma prawo posługiwać się podana nazwa. Właśnie
formalne potwierdzenie prawdziwości tych danych jest sednem procesu
certyfikacji.
W tej chwili powinniśmy zgłosić nasz CSR do podpisania, jest to jednak proces
kosztowny i niepotrzebny, jeśli stawiamy serwer na potrzeby firmy, a zależy
nam głównie na poufności transmisji. Standard SSL przewiduje na szczęście
cos takiego, jak certyfikaty self-signed, czyli podpisane przez te sama osobę,
która wystawia CSR. W tym celu bierzemy podpisywany CSR, podpisujący klucz
prywatny i wynik zapisujemy do pliku cacert.pem.
# openssl x509 -req -in
cacsr.pem -signkey cakey.pem -out cacert.pem
Signature ok
subject=/C=PL/ST=Malopolska/L=Krakow/O=ABA sp. z o.o.
/CN=mail.aba.krakow.pl/Email=
Getting Private key
Tego certyfikatu CA możemy teraz używać
wielokrotnie do podpisywania różnych certyfikatów roboczych dla poszczególnych
usług. W tym wypadku zrobimy to dla serwera mail.aba.krakow.pl, dla którego
musimy powtórzyć cały proces z pewnymi różnicami.
4.2 Certyfikat serwera
Tak jak poprzednio, generujemy klucz prywatny
RSA i zapisujemy go do pliku pop3key.pem:
# openssl genrsa -out
pop3key.pem 1024
Następnie generujemy CSR podając te same dane
firmy, z jedną różnicą. Zamiast nazwy firmy w polu Common name podajemy nazwę
serwera:
# openssl req -new -key
pop3key.pem -out pop3csr.pem
...
Common Name (eg, YOUR name) []:mail.aba.krakow.pl
...
Pole to będzie później wykorzystywane przez
klientów do porównania z nazwą serwera, z którym się połączyli. Następny
krok to już tylko złożenie podpisu. Nasz mikrourząd certyfikujący podpisze
swoim kluczem nowy certyfikat serwera mail.aba.krakow.pl:
# openssl x509 -CA
cacert.pem -CAkey cakey.pem -req -CAcreateserial -in pop3csr.pem -out
pop3cert.pem
Signature ok
subject=/C=PL/ST=Malopolska/L=Krakow/O=ABA sp z o.o.
/CN=mail.aba.krakow.pl/Email=
Getting CA Private Key
Do złożenia podpisu wykorzystujemy jak widać
klucz prywatny CA (to on faktycznie składa podpis), klucz publiczny CA, czyli
jego certyfikat (są tam dane CA). Dane wejściowe to CSR serwera, a na wyjściu
otrzymujemy jego podpisany certyfikat. Opcja -CAcreateserial powoduje stworzenie
pliku zawierającego numery kolejnych certyfikatów, wystawianych przez tego CA.
Ta szczypta biurokracji jest tutaj niezbędna.
5. Konfiguracja Stunnela
Teraz musimy przygotować środowisko do
uruchomienia Stunnela. W tym celu połączymy dwa pliki, klucz oraz certyfikat
serwera w jeden, umieszczony przykładowo w katalogu stunnela
# cd /usr/local/etc/stunnel
# cat pop3key.pem pop3cert.pem >> pop3.pem
Plik pop3.pem powinien mieć tak ustawione prawa, aby stunnel
mógł go bez problemu odczytać, czyli np. -rw-r----- stunnel stunnel
pop3.pem wykonujemy poniższe polecenia aby nadać odpowiednie prawa
Program zgłasza komunikaty na temat swojego
działania za pomocą sysloga do pliku, który podaliśmy w opcjach
konfiguracyjnych.
Od tej pory klienci powinni móc się już łączyć
na ten port i ściągać przez niego pocztę. Najprostszy test to nawiązanie
takiego połączenia ręcznie za pomocą klienta SSL:
Fakt zgłoszenia się serwera POP3 jest wystarczającym
dowodem na poprawność instalacji. Jeśli usługa nadal nie działa poprawnie,
to przyczyn należy szukać gdzie indziej - na przykład w konfiguracji filtrów
pakietowych lub programów pocztowych.
Autor: Paweł Krawczyk kravietz(at)aba.krakow.pl
Nowe wersje tego dokumentu dostępne są pod adresem http://ipsec.pl
Poprawki wprowadzone na potrzeby systemu
FreeBSD:
Artur Kulda arti(at)bsd4u.org
Komentarze:
start przy uruchomieniu kompa Dodane przez przemo w dniu - 2006-09-05 11:01:40
... i jeszcze dodajemy do /etc/rc.conf stunnel_enable="YES"
Tylko zarejestrowani użytkownicy mogą pisać komentarze. Prosze zaloguj się i dodaj komentarz.
Możesz zainstalować
dodatkowe programy
używając systemu portów
dostępnego w
FreeBSD. Jeśli chcesz
zainstalować jakiś
program, możesz go
ściągnąć,
skompilować i
zainstalować pisząc po
prostu
# cd
/usr/ports/_kategoria_/_n
azwa_portu_
# make install &&
make clean
jako root. System portów
ściągnie źródła programu,
zaaplikuje odpowiednie
łatki,
tak by program mógł
działać na FreeBSD,
skompiluje je,
zainstaluje, zarejestruje
jego instalację, by
później zautomatyzować
jego deinstalacje, oraz
wyczyści
tymczasowo użytą
przestrzeń dyskową.
Możesz usunąć
zainstalowany port, jeśli
uznasz że w końcu nie
jest on Tobie potrzeby
wpisująć
# cd
/usr/ports/_kategoria_/_n
azwa_portu_
# make deinstall
oczywiście jako root.