Mailserver - Jak to celé funguje

Nyní se pokusím vysvětlit, jak to vlastně u mail serverů funguje a co se kde a jak děje. Mailserver, který budeme stavět, poběží na Linuxu a lze jej takto vytvořit všude tam, kde lze spustit postfix, dovecot a postgresql.

MTA aneb co všechno musí e-mail projít

Každý, kdo kdy poslal mail z e-mailového klienta (ne přes web), se pravděpodobně setkal s tím, že si ke svému účtu musel nastavit tzv. SMTP server. A co to ten SMTP server je? Ve většině případů na adrese SMTP serveru poslouchá MTA, nebo-li Mail Transfer Agent

MTA, jak již název napovídá, má za úkol přenášení mailů a to jak přenesení mailu od nás, když ho zrovna chceme poslat, tak i jeho cílové doručení. Tedy, nějaký MTA obdrží e-mail, který má doručit. Velice často jej obdrží právě po síti, přes protokol SMTP. A teď se musí rozhodnout co s ním. MTA se podívá, komu má e-mail přijít a následně se rozhoduje.

MTA, které máme nastavené v e-mailovém klientovi jako SMTP server, dosti pravděpodobně příjemce e-mailu nezná. Takže musí vymyslet způsob, jak e-mail doručit. Za standardního stavu MTA zjistí, na jaké IP adrese poslouchá MTA pro danou doménu příjemce. Potom jej kontaktuje a e-mail předá. Toto nastavení se dá samozřejmě změnit; MTA může stejně tak e-maily předávat jinému, přesně zadanému MTA; nezávisle na doméně anebo přijmutí e-mailu odmítat.

Na konci cesty se e-mail dostane k MTA, které daného příjemce již zná a ví, kam mu má mail doručit. Respektive toto MTA se podívá, kde má daný uživatel svůj mailbox a do něj zprávu uloží (případně zprávu předá MDA, viz dále). Ve chvíli, kdy je zpráva uložená v mailboxu, může si ji uživatel přečíst; např. stažením pomocí e-mailového klienta přes protokol POP3 nebo IMAP.

Politika doručování přes MTA, open relay, omezování

Jednoduše se dá říci, že MTA po obdržení e-mailu se podívá, jestli příjemce zná. Pokud ano, mail doručí, pokud ne, předá jej po internetu někam dál. Tenhle případ má jedno velké ale. Takto popsaná situace se označuje jako open relay; výraz značí, že dané MTA bez omezení doručí každý mail. Nebýt spamu, mohlo by to takhle klidně i být...

MTA, které klidně rozesílá spamy ostatním, se velice rychle dostane na blacklist. A to že se dostane na blacklist znamená, že ostatní od něj přestanou e-maily přijímat; třeba i ty vaše. Pokud si celý mailserver instalujete jenom pro účely doručování mailů, tedy abyste je mohli přijímat, lze relay bez problému zcela zakázat; MTA tedy bude přijímat pouze e-maily, které vzápětí může doručit. Nicméně z několika důvodů můžete chtít pro někoho relay povolit.

Například pokud někdo se často připojuje z různých sítí, není zrovna zábavné po každém připojení měnit v nastavení SMTP server na ten, který daný poskytovatel připojení zrovna nabízí. Jak ale zajistit, že zrovna vy můžete poslat přes své MTA e-mail dál? Je potřeba se autorizovat - protokol SMTP nabízí i autorizaci jménem a heslem. A dané MTA musí mít nastaveno, že autorizovaní uživatelé mají povolený relay.

Druhým případem je, že si chete vytvořit SMTP server pro nějakou svou síť. V tomto případě lze relay povolit pouze ze zadaných síťových rozsahů - tedy z těch, které patří vaše síti. Potom každý počítač v téhle síti má relay skrze toto MTA povolený, ale otatní ne.

Záložní MTA

Pokud by náš hlavní mailserver umřel, přestaly by nám chodit e-maily a případně lidem, kteří se nám budou snažit něco poslat, budou chodit chyby. Proti tomuto existuje jedna obrana. Pokud vlastníme doménu a můžeme editovat zónový soubor, vkládáme tam i tzv. MX záznamy. Zatímco klasický A záznam odkazuje z dané domény na nějakou IP adresu, případně CNAME, který odkazuje na jinou doménu, MX se zadává právě pro doručování pošty. MX záznam vypadá podobně jako CNAME - odkazuje celou naši doménu na nějaké jiné doménové jméno. Navíc se mu specifikuje priorita. Pokud se nějaký mailserver pokouší nám doručit e-mail, přečte si z domény MX záznamy (pokud žádný MX záznam není, tak typicky veme A, ale nemusí to udělat vždy...). Následně vybere ten s nejnižší prioritou a tam se mail pokusí doručit. Pokud se to nepovede, veme další s vyšší prioritou a zkouší to tam. Co se týče konfigurace, tak na záložním serveru běží také nějaké MTA (v našem případě to zase uděláme na postfixovi). Ten ovšem maily nikterak nedoručuje, jen pro zvolené domény maily přijme a pozdržuje je. Zároveň čeká, až se náš hlavní server probudí; jakmile zjistí, že hlavní server žije, přepošle mu všechny maily, které za tu dobu nasbíral. Díky tomu odesílatel nepozná, že nastal nějaký problém a zároveň my dostaneme všechny e-maily, které kdy kdo poslal. Samozřejmě, záložní MTA může také fungovat jako primární pro jiné domény.

MDA - hrajeme si na pošťáka

Ve chvíli, kdy se mail dostane k poslednímu MTA své cesty, je potřeba jej doručit. Většina MTA je schopna sama mail uložit do mailboxu uživatele, ale tím možnosti také končí. Druhou možností je použití MDA - Mail Delivery Agent. MDA obdrží od MTA zprávu a doručí jí do mailboxu uživatele sám. Obvykle má více možností co se zprávou dělat; typicky MDA zkoumá zprávu podle nějakých pravidel a tak může třeba zprávu zařadit do nějaké jiné složky v mailboxu, odeslat její kopii na mobil nebo cokoliv jiného. Mezi nejvíce známé MDA patří maildrop nebo procmail. Já v návodu použiju LDA, který je součástí balíku dovecot.

Pošta musí jít také přečíst - POP3, IMAP

Zatím jsem se zabýval pouze tím, jak se maily doručují. Aby to mělo nějaký smysl, musí být umožněno je uživateli i přečíst. Většina e-mailových klientů nabízí pro stahování zpráv protkoly POP3 nebo IMAP.

POP3 je poměrně velice jednoduchý a také toho moc neumožňuje. Obecně se používá jen pro to, aby se e-maily nacpaly ze serveru do počítače uživatele. Lze přes něj stahovat e-maily z Inboxu (do jiných složek POP3 nevleze, pač je neumí) a případně je i smazat.

IMAP je naproti tomu schopnější - obecně u IMAPu se předpokládá, že zprávy budou trvale na serveru a v případě potřeby se z něj stáhnout. IMAP umožňuje prolézání i všech složek na serveru, umožňuje zprávy mezi nima přesouvat nebo do nich ukládat (např. i odeslaní pošta může být na serveru).

V návodu se budu zabírat dovecotem, který umí oba tyto protokoly, včetně jejich zabezpečené varianty SSL.

Webmail

Webmail slouží jako náhrada e-mailového klienta - je to v podstatě takový e-mailový klient fungující v prohlížeči. Na internetu je spousta opensource webových mail klientů - obvykle se baví se serverem přes IMAP. V návodu se ještě pokusím předvést instalaci a rozchození webmailu (a nejen to) horde.