JustPaste.it

Poczta elektroniczna - Sieci komputerowe

1. Krótka historia

Mimo nowych możliwości jakie dają komunikatory, e-mail ciągle zyskuje na popularności i znaczeniu. Z badań rynku przeprowadzonych przez IDC wynika, że w roku 2005 można się spodziewać 36 miliardów e-maili dziennie! W roku 2000 w użyciu było około 505 milionów skrzynek poczty elektronicznej, w roku 2005 tą formą komunikacji ma się już posługiwać ok. 1,2 mld użytkowników.

Wszystko zaczęło się w roku 1971 w sposób, który trudno byłoby nazwać spektakularnym. Technik w BBN, Ray Tomlinson, przesłał e-mail między dwoma komputerami, które były połączone w sieci ARPAnet. Poszukując rzadko używanego znaku dla wyróżnienia poczty elektronicznej odkrył @ i w ten sposób ustanowił symbol nowej epoki.

Kolejnym krokiem milowym w historii poczty elektronicznej było opracowane w roku 1981 przez Erica Allmana oprogramowanie Sendmail. Umożliwiło ono po raz pierwszy wysyłanie za pomocą programu pocztowego wiadomości jednocześnie do wielu sieci. Dzisiejszy sukces e-maila był nie do przewidzenia w roku 1971 i wynalazek Thomlinsona zasłużył sobie tylko na kilka wzmianek w prasie. Dziś nie sposób wyobrazić sobie życia bez poczty elektronicznej, a dla wielu ludzi jest ona wręcz warunkiem funkcjonowania.

Poczta elektroniczna opiera się na trzech protokołach - SMTP do wysyłania oraz POP i IMAP do odbioru. Specyfikację każdego protokołu opisano w jednym lub kilku dokumentach RFC.

2. Simple Mail Transfer Protocol - SMTP

Zadaniem SMTP jest niezawodny i wydajny transport wiadomości. Protokół ten jest niezależny od protokołu sieciowego; zwykle stosowany jest standardowy protokół Internetu, TCP. Komunikacja odbywa się przez port 25.

Za wymianę wiadomości odpowiadają tzw. mail transfer agents (MTA). Najbardziej znanym MTA jest Sendmail. Użytkownik zwykle nie ma z nimi bezpośrednio do czynienia. Dostawą poczty do i z MTA zajmują się klienty pocztowe, takie jak Outlook czy KMail. MTA komunikują się między sobą za pomocą zwykłych znaków ASCII. Klient wysyła polecenia do serwera, który odpowiada za pomocą kodu numerycznego i opcjonalnego ciągu znaków.

Simple Mail Transfer Protocol ma jednak jedną, istotną wadę - po wysłaniu e-maila nie otrzymuje się żadnej wiadomości o jego dalszych losach. Specyfikacja przewiduje wprawdzie powiadomienie nadawcy w sytuacji, gdy wiadomość nie może być dostarczona. Nie jest określone jednoznacznie, jak taka wiadomość ma wyglądać. Zwykle jest to e-mail z komunikatem o błędzie i nagłówkiem niedostarczonej wiadomości. Ze względu na brak standardu, w praktyce rzadko udaje się ustalić, gdzie i dlaczego wystąpił błąd.

Dlatego też opracowano rozszerzenie SMTP, definiujące standardowe powiadomienia o błędach. Niestety bardzo niewiele serwerów obsługuje obecnie to rozszerzenie.

2.1. Proces SMTP

Rys.: Proces SMTP

Rys.: Proces SMTP
Źródło: Komar, B. (2002). TCP/IP dla każdego. Gliwice: Helion, strona 373

Typowe połączenie SMTP składa się z następujących etapów:

  • Klient SMTP inicjuje połączenie z serwerem SMTP. Klient korzysta z losowo wybranego portu o numerze powyżej 1024 i łączy się z portem serwera o numerze 25. Serwer sygnalizuje akceptację połączenia komunikatem 220 - ready.
  • Klient żąda ustanowienia sesji poprzez wysłanie polecenia HELO (ang. Hello) lub EHLO (ang. Extended Hello). Polecenie to powinno zawierać pełną nazwę (FQDN) klienta. Serwer odpowiada komunikatem 250 - ok.
  • Klient informuje serwer, kto wysyła wiadomość, wykorzystując polecenie MAIL FROM: -adres-, gdzie -adres- jest adresem poczty elektronicznej użytkownika wysyłającego. Zazwyczaj odpowiada on adresowi zwrotnemu określonemu w programie pocztowym klienta. Serwer ponownie powinien odpowiedzieć komunikatem 250 - ok.
  • Klient określa następnie wszystkich odbiorców, do których wiadomość jest skierowana. Korzysta w tym celu z polecenia RCPT TO: -adres-. Jeżeli serwer obsługuje wielu odbiorców, dla każdego z nich przesyłane jest kolejne polecenie RCPT TO:. Odpowiedzią serwera na informację o każdym kolejnym odbiorcy jest komunikat 250 - ok.
  • Klient informuje o gotowości do przesyłania właściwej wiadomości komunikatem DATA. Serwer odpowiada komunikatem 250 -ok-. Określa również ciąg znaków, który spodziewa się otrzymać na znak końca treści wiadomości. Najczęściej jest to [CR][LF].[CR][LF]. Potem następuje przesłanie do serwera tejże treści. Wiadomość przesyłana jest przy użyciu znaków 7-bitowego ASCII. Jeżeli towarzyszą jej załączniki, muszą one zostać przetworzone do tej postaci. Wykorzystuje się do tego celu mechanizm BinHex, uencode lub MIME.
  • Po zakończeniu transmitowania wiadomości, klient wysyła polecenie QUIT kończące sesję SMTP. Serwer odpowiada komunikatem 221 -closing-, co oznacza, że nastąpiło zakończenie sesji. Jeżeli klient wysyła następną wiadomość, proces ponownie rozpoczyna się od polecenia MAIL FROM:.
Rys.: Droga e-maila od nadawcy do odbiorcy

Rys.: Droga e-maila od nadawcy do odbiorcy
Źródło: "PC World Komputer PRO". Nr 3/2003

2.2. Polecenia protokołu SMTP

Polecenie definiują sposób przesyłania e-maili. Zgodnie ze specyfikacją implementacja SMTP musi obsługiwać co najmniej osiem poleceń:

POLECENIEOPIS
HELOInicjuje połączenie i identyfikuje nadawcę SMTP dla odbiorcy SMTP
MAILInicjuje transakcję pocztową
RCPTIdentyfikuje pojedynczego adresata
DATAIdentyfikuje wiersze następujące po poleceniu jako dane pocztowe od nadawcy
RSETPrzerywa bieżącą transakcję pocztową
SENDDostarcza pocztę do terminala
SOMLDostarcza pocztę do terminala. Jeżeli ta operacja się nie powiedzie, poczta zostanie dostarczona do skrzynki pocztowej
SAMLDostarcza pocztę do terminala. Poczta jest również dostarczana do skrzynki pocztowej
VRFYWeryfikuje nazwę użytkownika
EXPNRozwija listę dystrybucyjną
HELPSprawia, że odbiorca wysyła przydatne informacje
NOOPŻąda, by odbiorca wysłał odpowiedź OK, ale w przeciwnym razie nie określa żadnych działań
QUITŻąda, by odbiorca wysłał odpowiedź OK, a następnie zamknął kanał transmisyjny
TURNŻąda, by odbiorca przejął rolę nadawcy. Jeżeli zostanie otrzymana odpowiedź OK, to nadawca staje się odbiorcą

Tabela 1. Polecenia SMTP

2.3. Kody odpowiedzi SMTP

Kody odpowiedzi SMTP gwarantują, że klient jest na bieżąco informowany o statusie serwera. Każde polecenie wymaga kodu odpowiedzi od serwera. Klient decyduje o sposobie dalszego postępowania wyłącznie na podstawie otrzymanych zwrotnie kodów numerycznych.

KODZNACZENIE
211Odpowiedź stanu systemu lub pomocy systemowej
214Komunikat pomocy
220Usługa gotowa
221Usługa zamyka kanał transmisyjny
250Żądane działanie poczty OK, zakończone
251Użytkownik nielokalny; przekażę do ścieżki przekazywania
354Rozpocznij wprowadzanie poczty
421Usługa niedostępna, zamykam kanał transmisyjny
450Żądane działanie poczty nie zostało podjęte: skrzynka pocztowa niedostępna
451Żądane działanie zostało przerwane
452Żądane działanie nie zostało podjęte: niewystarczająca ilość pamięci systemowej
500Błąd składniowy, polecenie nierozpoznane
501Błąd składniowy w parametrach lub argumentach
502Polecenie nie zostało implementowane
503Zła kolejność poleceń
504Parametr polecenia nie został implementowany
550Żądane działanie poczty nie zostało podjęte: skrzynka pocztowa niedostępna
551Użytkownik nielokalny; spróbuj wykorzystać ścieżkę przekazywania
552Żądane działanie poczty zostało przerwane: przekroczona alokacja pamięci
553Żądane działanie nie zostało podjęte: niedozwolona nazwa skrzynki pocztowej
554Transakcja nie powiodła się

Tabela 2. Kody odpowiedzi SMTP

2.4. Mail Routing i DNS

Gdy serwer SMTP odbierze wiadomość od klienta, odpowiada za routing e-maila. System nazw domen (DNS) odgrywa centralną rolę nie tylko w dziedzinie dostępu do serwerów internetowych i FTP, lecz również w kwestii przesyłania wiadomości elektronicznych.

W systemie DNS przewidziano specjalne wpisy dla e-maili - rekordy MX. Serwer identyfikuje komputer docelowy za pomocą tak zwanego mail exchange record domeny. W tym celu pyta serwer DNS i otrzymuje listę serwerów (mail exchanger), które odbierają wiadomości dla tej domeny. Każdy mail exchanger ma określony priorytet o długości 16 bitów. Serwer SMTP próbuje zatem po kolei dostarczyć wiadomość do któregoś z serwerów zgodnie z priorytetem.

Zasadniczo wiadomość może przechodzić przez wiele serwerów SMTP. Wbrew szeroko rozpowszechnionemu mniemaniu, jakoby e-maile mogły kilkakrotnie okrążyć Ziemię, zanim w końcu dotrą do odbiorcy, w rzeczywistości z reguły przechodzą tylko przez dwa serwery SMTP. Zapobieganie powstawaniu takich pętli jest właśnie zadaniem rekordów MX. Mimo to w wyjątkowych przypadkach może się zdarzyć, że taka pętla powstanie, na przykład w sytuacji gdy informacje routingowe są niekompletne lub nieaktualne. Taki przypadek zachodzi na przykład przy zmianie dostawcy usług internetowych.

Rys.: DNS i e-mail

Rys.: DNS i e-mail
Źródło: "PC World Komputer PRO". Nr 3/2003

2.5. Multipurpose Internet Mail Extension (MIME)

W treści e-maili stosuje się 7-bitowy tekst ASCII. Zawiera on 128 znaków, jednak bez narodowych znaków specjalnych. W tej wersji nie można więc pisać z polskimi ogonkami. RFC 2045 definiuje MIME, który eliminuje problemy, gdy w e-mailu użyto innego zestawu znaków niż US ASCII.

Treść e-maila MIME może być w dalszym ciągu przesyłana jako tekst ASCII, bez względu na zawartość. Jedynym warunkiem stosowania jest obsługa przez klienta pocztowego. MIME dodaje do nagłówka pewne elementy, które objaśniają odbiorcy strukturę treści.

ELEMENTPARAMETROPIS
Wersja MIME1.0Określa wersję MIME.
Typ zawartościTekst, obraz itp.Określa zawartość e-maila. W przypadku typów "tekst" i "multipart" dochodzi informacja o zestawie znaków oraz identyfikator części tekstowej.
Content Transfer Encoding7bit, 8bit, binary, quoted-printableCharakteryzuje algorytm kodowania danych

Tabela 3. Nagłówek MIME

2.5.1. Typy MIME

MIME nie tylko umożliwia przesyłanie e-maili z załącznikami, lecz jednocześnie zapewnia informację, którą klient pocztowy wykorzystuje do wybrania właściwego programu edycyjnego. Służy do tego element nagłówka "Typ zawartości". MIME dzieli typy danych (typy mediów) na siedem grup głównych z wieloma podgrupami. Każde rozszerzenie nazwy pliku przypisane jest do jednego z "typów mediów".

NAZWATYPOPIS
tekstplaintekst niesformatowany
richtexttekst z prostym formatowaniem (kursywa)
enricheduproszczona i rozszerzona forma richtext
multipartmixedwieloczłonowa treść, elementy przetwarzane są sekwencyjnie
parallelwieloczłonowa treść, elementy przetwarzane są równolegle
digestwyciąg z e-maila
alternativewieloczłonowa treść o identycznej zawartości logicznej
messagerfc882zawartością jest inna wiadomość rfc822
partialzawartością jest fragment e-maila
external-bodyzawartością jest wskazówka do właściwej wiadomości
applicationoctet-streamdane binarne
postscriptdane postscriptowe
imagejpegformat iso 10918
gifcompuserve graphic interchange format (gif)
audiobasickodowany format 8-bitowy
videompegformat iso 11172

Tabela 4. Ważniejsze typy MIME

2.6. Zabezpieczenie sesji SMTP

SMTP to protokół notorycznie nadużywany przez hakerów do wysyłania użytkownikom najróżniejszych niespodzianek. Łatwość takiego wykorzystania protokołu pocztowego wynika wprost z jego "ufnej" natury.

Działanie protokołu SMTP opiera się na technice określanej mianem przekazywanie SMTP (ang. SMTP relaying). Klient łączy się z serwerem SMTP i przekazuje wiadomości do odbiorcy przez ich "odbicie" na serwer SMTP.

Standardowo serwer SMTP pozwala przekazywać (odbijać) wiadomości dowolnym klientom. Wraz ze wzrostem problemu nieuprawnionego wysyłania wiadomości wiele organizacji blokuje swoje serwery SMTP, ograniczając możliwości korzystania z przekazywania SMTP. Typowe rozwiązania to:

  • Ograniczenie przekazywania do wybranych podsieci IP. Można skonfigurować serwer SMTP tak, aby przyjmował wiadomości wyłącznie od stacji pracujących w wybranej podsieci IP. Mimo że sprawdza się to w odniesieniu do klientów w sieci lokalnej, nie może być stosowane przez organizacje, w której użytkownicy zmieniają miejsca korzystania z poczty elektronicznej. Ponieważ użytkownik zmieniający miejsce pobytu korzysta z usług różnych ISP, zdefiniowanie wszystkich wymaganych podsieci jest praktycznie niemożliwe.
  • Wprowadzenie uwierzytelniania SMTP. Protokół SMTP przewiduje możliwość uwierzytelniania klientów jeszcze zanim zaczną oni wysyłać wiadomości. Choć wydaje się to rozwiązaniem najlepszym, wiąże się z pewnym ryzykiem, ponieważ uwierzytelnianie opiera się na jawnym przesyłaniu hasła.
  • Wyłączanie przekazywania SMTP. W przypadku serwerów poczty, takich jak Microsoft Exchange Server 2000, pozwalających klientom łączyć i uwierzytelniać się przy użyciu rozwiązań firmowych, przekazywanie SMTP można wyłączyć. Wówczas usługi specyficzne dla serwera pocztowego będą przyjmować wyłącznie wiadomości kierowane do Internetu. Z opcji tej nie można skorzystać, gdy w sieci pracują klienty protokołu POP3 lub IMAP4.

Poza ograniczeniami przekazywania, wymiana danych SMTP może być chroniona przy użyciu SSL, czyli mechanizmów opartych na technologii klucza publicznego. Zabezpieczenia SSL opierają się na zabezpieczonej wymianie klucza sesji używanego do szyfrowania całości komunikacji między klientem a serwerem.

Kiedy klient SMTP łączy się z usługą SMTP serwera pocztowego, otrzymuje klucz publiczny serwera. Procedura jest następująca:

  • Klient łączy się z serwerem SMTP. W miejsce standardowego portu TCP 25 wykorzystywany jest port TCP 465.
  • Serwer SMTP przesyła klientowi swój certyfikat. Jednym z jego atrybutów jest klucz publiczny serwera.
  • Klient weryfikuje certyfikat serwera: sprawdza powiązanie z zaufanym głównym organem certyfikującym (CA), kontroluje znacznik czasu, porównuje nazwę wymienioną w certyfikacie z pełną kwalifikowaną nazwą serwera i zestawia numer seryjny z listami certyfikatów unieważnionych.
  • Po udanej weryfikacji klient generuje losowy klucz sesji, szyfruje go przy użyciu klucza publicznego serwera i wysyła klucz do serwera. Serwer z kolei odszyfrowuje klucz sesji przy użyciu własnego klucza prywatnego i zwraca potwierdzenie, będące dla klienta zarazem potwierdzeniem tożsamości serwera.
  • Do serwera przesyłana jest nazwa użytkownika i hasło (zaszyfrowane przy użyciu klucza sesji).

3. Literatura

  • Komar, B. (2002). TCP/IP dla każdego. Gliwice: Helion.
  • Scrimger R., LaSalle P., Leitzke C., Parihar M., Gupta M. (2002). TCP/IP. Biblia. Gliwice: Helion.
  • "PC World Komputer PRO". Nr 3/2003.
Przedruk za zgodą autora

 

Źródło: jm.webmaster