Elektronická pošta

Zdeněk Softič, xsoftic@fi.muni.cz

Obsah

Architektura elektronické pošty

Doručování elektronické pošty po Internetu se účastní tři druhy programů:

MUA

Mail User Agent (poštovní klient) je program který zajišťuje odesílání zpráv a vybírání schránek. Příkladem je např. Microsoft Outlook, Mozilla Thunderbird, Opera, Mutt, Pine a další. Je to v podstatě specializovaný editor, který umí kromě vytvoření zprávy také manipulovat se schránkami, odeslat zprávu nejbližšímu MTA protokolem SMTP a převzít zprávu ze serveru prostřednictvím POP3 nebo IMAP. Vlastním doručováním zprávy po síti až k adresátovi se klient nezabývá.

MTA

Mail Transfer Agent (poštovní server) běží obvykle jako démon a naslouchá na portu TCP/25. K tomuto portu se může připojit (navázat TCP spojení) buď poštovní klient, nebo jiný server, který předá zprávu k doručení. MTA zkontroluje, zda je zpráva určena pro systém, na kterém běží. Pokud ano, předá ji programu MDA (lokální doručení). Pokud je zpráva určena jinému počítači, naváže spojení s příslušným serverem a zprávu mu předá.

Při vyhledávání vzdáleného serveru, kterému má předat zprávu, musí MTA spolupracovat se systémem DNS. Provedením DNS dotazu na MX (Mail eXchanger) záznamy získá SMTP klient seznam IP adres mailserverů společně s preferenčním číslem každého z nich. Pokud klient dotazem nezíská žádné MX záznamy, ale pouze A (Address) záznam(y), je použit místo MX záznamu A záznam. Naopak klient nesmí použít A záznam, pokud byl nalezen alespoň jeden MX záznam. Pokud jsou přítomné MX záznamy, ale nejsou funkční, klient ohlásí chybu.

Klient se pak pokusí vytvořit SMTP spojení s jedním z těchto serverů počínaje tím, který má nejnižší preferenční číslo. Zprávu předá prvnímu serveru, se kterým se podaří vytvořit spojení.

Poštovní server obsahuje v konfiguraci řadu parametrů, pomocí kterých můžeme mimo jiné nastavit, pro které domény MTA přijímá zprávy. Stejně tak je možné určit, od koho bude nebo nebude zprávy přijímat, což je velmi důležité z hlediska bezpečnosti a ochrany proti spamu.

Nejčastějšími programy v roli MTA jsou postfix, sendmail, qmail, Microsoft Exchange a další.

MDA

Mail Delivery Agent neboli program pro lokální doručování

Server by mohl zprávy do uživatelských schránek ukládat přímo, ale výhodnější je k tomu použít specializovaný program. To umožňuje při doručování ještě dále zprávy zpracovávat nebo filtrovat. Příkladem může být třídění zpráv do různých schránek uživatele podle obsahu (odesilatele, subjektu a pod.), nebo odstraňování nežádoucích zpráv (viry, spam). Tyto volby si může každý uživatel nastavit samostatně nezávisle na ostatních.

Typickými představiteli MDA jsou procmail a maildrop. Postfix sam je schopen zařídit lokální doručování zpráv pomocí svých démonů local a virtual apod.

Protokoly

SMTP

Protokol SMTP (Simple Mail Transfer Protocol) je určen k předávání pošty od klienta k serveru a k posilání pošty mezi servery (pri předávání zprávy vystupuje odesílající server jako klient vzhledem k přijímajícímu serveru).

Protokol SMTP byl původně definován v RFC 821 (později byl rozšířen v RFC 2821). Komunikace standardně probíhá na TCP portu 25 jako komunikace klient -- server. Jako klient vystupuje buď MUA, který předává zprávu prvnímu MTA, nebo MTA, který předává zprávu dále (dalšímu MTA). Klient naváže spojení na příslušný port a zadává SMTP příkazy. Server na ně odpovídá a sestavuje obálku zprávy podle které je zpráva dále posílána. Každá odpověď serveru začíná třímístným kódem výsledku operace.

Po ustanovení spojení mezi klientem a serverem dochází k SMTP přenosu. V následující ukázce je vše, co začíná C:, odesláno klientem a vše, co začíná S:, odesláno serverem.

C: navázání spojení se serverem (zpravidla na TCP portu 25)
S: 220 mail.example.com ESMTP Postfix
C: HELO example.net
S: 250 Hello example.net
C: MAIL FROM: <sender@example.net>
S: 250 Ok
C: RCPT TO: <friend@example.com>
S: 250 Ok
C: DATA
S: 354 End data with <CR><LF>.<CR><LF>
C: Subject: test message
C: From: sender@example.net
C: To: friend@example.com
C:
C: Hello,
C: This is a test.
C: Goodbye.
C: .
S: 250 Ok: queued as 12345
C: QUIT
S: 221 Bye

Příkaz HELO je pozůstatkem starší verze protokolu SMTP a je použit v případě, že server nepodporuje novější rozšíření SMTP protokolu (Extended SMTP, ESMTP). Klient podporující ESMTP po navázání spojení se serverm začína komunikovat příkazem EHLO (Extended HELLO) a pouze pokud server odpoví, že příkaz nezná, použije klient příkaz HELO. Server jako odpověď na EHLO pošle seznam příkazů z rozšíření, které podporuje. Příklad následuje:

C: EHLO example.net
S: 250-mail.example.com
250-PIPELINING
250-SIZE 104857600
250-VRFY
250-ETRN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN

Podoba e-mailové zprávy

Je potřeba rozlišovat mezi obálkou zprávy a vlastní zprávou s hlavičkami a tělem.

Obálku zprávy vytváří MTA při odesílání zprávy dále. Obálka obsahuje minimálně dva údaje: adresu odesílatele (MAIL FROM) a adresu příjemce (RCPT TO). Je dúležíté si uvědomit, že adresa příjemce uvedená na SMTP obálce nemusí být shodná s adresátem vlastní zprávy. Důvodů k tomu je hned několik - například ten, že jedna a tatáž zpráva může mít kromě svého "hlavního" příjemce (vyjádřeného v hlavičce zprávy v položce To:) také jednoho či několik příjemců běžných či slepých kopií (vyjádřených v položkách Cc:, resp. Bcc:). Když je pak zpráva doručována těmto příjemcům kopií, je na obálce "nadepsána" jejich adresa, zatímco v položce To: v rámci vlastní zprávy zůstává nadále adresa hlavního adresáta.

Vlastní zpráva je složena výlučně z ASCII znaků (7 bitů, 128prvková abeceda) a je členěna do řádku oddělených dvojicí znaků <CR> a <LF>. Obálka zprávy je přenášena taktéž ve formě textu na začátku přenosu.

Zpráva obsahuje dvě základní části: hlavičku a tělo. Hlavička se skládá z položek začínajícíh na prvním znaku řádku (mohou pokračovat i na dalších řádcích, ale ne od první pozice) a od těla je oddělena prázdnám řádkem.

Krom základních položek - From, To, Sender, Reply-To, Return-Path - popisujících původce zprávy, příjemce,odesílatele apod., hlavička obvykle obsahuje mj. také určitý počet položek Received, které obsahují záznamy o cestě zprávy mezi jednotlivými MTA.

MIME (Multipurpose Internet Mail Extensions) je internetový standard který rozšiřuje původní standard RFC822 o možnost posílání zpráv s diakritikou, obrázků, zvuků, elektronický podpis a šifrování zprávy atd. Rozšiřuje formát emailu o:

POP3

POP3 (Post Office Protocol version 3) je internetový protokol, který se používá pro stahování emailových zpráv ze vzdáleného serveru na klienta. POP3 protokol byl standardizován v roce 1996 v RFC 1939.

Při použití POP3 si klienti poštu ze svého poštovního serveru pouze stáhnou, odpojí se a můžou si číst doručené emaily libovolně dlouho a být při tom odpojeni od Internetu. Nevýhodou je, že není možné definovat, které zprávy se budou ze serveru stahovat, vždy se stáhnou všechny. Pro práci s poštou přímo na serveru slouží modernější protokol IMAP.

Protokol POP3 má pro své účely vyhrazen TCP port 110. Komunikace probíhá na principu výměny zpráv mezi klientem a serverem, podobně jako u SMTP.

Příklad komunikace:

S: <server naslouchá na TCP portu 110>
C: <otevření spojení>
S:    +OK POP3 server ready <1896.697170952@dbc.mtview.ca.us>

Klient posílá jméno a heslo (USER, PASS) -->
C:    USER mrose
S     +OK User accepted
C:    PASS mrosepass
S     +OK Pass accepted

S:    +OK mrose's maildrop has 2 messages (320 octets)
C:    STAT
S:    +OK 2 320
C:    LIST
S:    +OK 2 messages (320 octets)
S:    1 120
S:    2 200
S:    .
C:    RETR 1
S:    +OK 120 octets
S:    <POP3 server posílá 1. zprávu>
S:    .
C:    DELE 1
S:    +OK message 1 deleted
C:    RETR 2
S:    +OK 200 octets
S:    <POP3 server posílá 2. zprávu>
S:    .
C:    DELE 2
S:    +OK message 2 deleted
C:    QUIT
S:    +OK dewey POP3 server signing off (maildrop empty)
C:  <uzavření spojení>
S:  <server čeká na další spojení>

IMAP

IMAP (Internet Message Access Protocol) je protokol pro přístup k e-mailovým schránkám. V současné době se používá verze IMAP4 (IMAP version 4 revision 1 - IMAP4rev1) definována v RFC 3501.

Na rozdíl od protokolu POP3 je optimalizován pro práci v dlouhodobě připojeném režimu, kdy zprávy zůstávají uloženy na serveru a průběžně se stahují, když jsou potřeba. Rozdíly zahrnují podporu pro práci více připojených klientů zároveň, uchovávání stavů zpráv na serveru, podporu více složek včetně zanoření, prohledávání zpráv na straně serveru nebo například zobrazovat obsahy zpráv bez příloh a tím šetřit linku. Výhodou protokolu IMAP je možnost pracovat s poštou na různých místech (různých počítačích nebo přes webové rozhraní k mailboxu) a stále mít k dispozici stejné zprávy a stejnou strukturu složek (včetně například složky s odeslanou poštou).

Příkladem IMAP serveru může být například Courier-IMAP, který je součástí MTA Courier, může být ale instalován a používán samostatně a obsahuje i POP3 démona. Podmínkou pro jeho nasazení je použití formátu poštovních schránek Maildir.

Konfigurace

Postfix

Jedním z často používaných MTA je Postfix. Vznikl v roce 1998 jako alternativa k Sendmailu nabízející větší bezpečnost, snadnější konfiguraci a vyšší výkon.

Postfix není jeden monolitický program, ale siť vzájemně komunikujících programů - démonu, které mohou být podle potřeby spouštěny. Každý démon je odpovědný za jeden úkol a plní jej s využitím co nejstriktněji definovaných oprávnění. Pouze jeden proces postfixu (master) běží pod účtem superuživatele a jen několik dalších (local, virtual, pipe) zapisuje na disk nebo spouští externí programy.

Nejůležitějšími konfiguračními soubory jsou main.cf a master.cf. Soubor main.cf obsahuje hlavní nastavitelné parametry serveru a jeho podsystémů. Soubor master.cf potom obsahuje nastavení procesů serveru Postfix (které programy a jak spouštět např. pro příjem zpráv, přepis hlaviček/obálky, lokální/nelokální relay apod.).

Některé soubory s tabulkami:

Soubory s tabulkami se nepoužívají přímo, pro urychlení se používají databáze, které se vytvářejí pomocí příkazu postmap(5) (resp. postalias(5) pro tabulku aliasů).

Místo ukládání tabulek do souborů je možné využít další typy uložišť (Berkeley DB, SQL, LDAP), případně mohou být vyhledávací tabulky založeny například i na regulárních výrazech - seznam všech možností.

Soubor main.cf obsahuje dvojice parametr = hodnota, $parametr určuje hodnotu parametru (nemusí být definována před použitím $parametr; není-li definována vůbec, použije se implicitni hodnota). "#" se používá pro komentář.

Nejdůležitější parametry:

# hostname systému, na kterém běží server
myhostname = doto-alpha.lab.fi.muni.cz

# lokální doména
mydomain = lab.fi.muni.cz

# doména, kterou mají uvedenou zprávy odesílané z tohoto serveru
myorigin = $mydomain

# pro tyto domény je server cílový (lokální doručení)
mydestination = $myhostname, localhost.$mydomain, localhost.localdomain,
        localhost, $mydomain

# síťová rozhraní, na kterých je sledován provoz
inet_interfaces = all

# komu povolit relay (odesilani posty):
# host - jen z tohoto počítače
# subnet - všechny počítače v podsíti
# class - všechny počítače ve stejné IP třídě A/B/C
mynetworks_style = subnet
# mynetworks = 10.0.50.0/24, 127.0.0.0/8

# které doméně povolit relay, pokud neprojde $mynetworks resp. $mynetworks_style
relay_domains = $mydestination

# kterému počítači zaslat zprávu, jestliže jí nevyhovuje žádný záznam v
# tabulce transport
relayhost = [doto-alpha.lab.fi.muni.cz]

Literatura