Elektronická posta, SMTP servery, POP-3/IMAP servery

Antonin Karasek (xkarase2@fi.muni.cz)


Obsah


Jak vypada doruceni mailu

Nejdrive by asi bylo dobre si rici, co je to vlastne mail. Jedna se o textovy soubor, jehoz prvni radky jsou formatu "Hlavicka: obsah", pak je jeden radek prazdny a nasleduje neco, cemu se rika telo mailu. Tohle telo muze mit i vice casti, kde kazda muze byt jineho MIME typu (RFC 2045). Povoleny jsou jenom tisknutelne ASCI znaky - takze pripadna binarni data je nutno kodovat na BASE64... Zajemce o ponekud presnejsi definici odkazu na RFC 822 a RFC 2822.

Takze ted si predstavte, ze jste mail-server, ktery dostal do ruky mail a hodla ho nejak dorucit. Jako kazdy spravny postak se tedy podivate na obalku (prvni radek mailu), precte te si adresu a zacnete dorucovat...

Ono je to v podstate docela jednoducha vec - Z adresy vas vetsinou bude zajimat jen to, co je za zavinacem - to je nazev domeny :o)) Pak se mrknete do DNS na MX (Mail eXchanger) zaznam a zjistite nazev stroje, ktery postu pro tuto domenu spravuje - obvykle byvaji tyhle zaznamy dva a vic (ocislovane podle priority) - kdyby nahodou ten primarni stroj vypadnul. Nazev stroje si zase prelozite na IP adresu a pak uz jenom otevrete TCP spojeni na port 25 a pozadate prislusny stroj o doruceni.

Nekdy se vam muze stat, ze tuhle domenu zrovana mate na starosti vy - pak se zase musite podivat do vlastni konfigurace, nejak prekonvertovat mailovou adresu na nazev souboru nebo adresare a do prislusneho objektu ho vlozit


Jak nakonfigurovat DNS

Toto je v podstate nejjednodussi cast cele prace - proste dopisete do zonoveho souboru radek typu:

                 IN MX 1 cernunnos.ceskyserver.cz.

Coz by napriklad v zone ceskyserver.cz znamenalo, ze postu pro domenu ceskyserver.cz spravuje pocitac cernunnos.ceskyserver.cz

Na zacatku radku nezapomente na nejake to bile misto :o)


Jak funguje a co umi SMTP

SMTP znamena Simple Mail Transfer Protocol. Je specifikovan v RFC 821 a RFC 2821. Ve sve zakladni podobe je to v celku jednoduchy protokol, ktery umoznuje predat mail z jednoho serveru na druhy obsahuje nejake uvitani (HELO ...), potom specifikaci odesilatele (MAIL FROM:<karasek@ceskyserver.cz>), specifikaci adresata (RCP TO:<xkas@fi.muni.cz>) a predani vlastni zpravy (DATA).

Komunikace muze vypadat napriklad takto (zacina server):

skatach:~# telnet ceskyserver.cz 25 Trying 81.0.235.158... Connected to cernunnos.ceskyserver.cz. Escape character is '^]'. 220 cernunnos.ceskyserver.cz ESMTP HELO taranis 250 cernunnos.ceskyserver.cz MAIL FROM:<karasek@ceskyserver.cz> 250 ok RCPT TO:<tonda@ceskyserver.cz> 250 ok DATA 354 go ahead Message-ID: <418F285C.5060808@ceskyserver.cz> Date: Mon, 08 Nov 2004 09:03:40 +0100 From: Antonin Karasek <karasek@ceskyserver.cz> User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-GB; rv:1.6) Gecko/20040115 X-Accept-Language: en-gb, en MIME-Version: 1.0 To: tonda@ceskyserver.cz Subject: pokus Content-Type: text/plain; charset=us-ascii; format=flowed Content-Transfer-Encoding: 7bit sdjfsdkf . 250 ok 1099897628 qp 28316 QUIT 221 cernunnos.ceskyserver.cz Connection closed by foreign host.

Jiste jste si vsimli, ze cokoli, co napsal server, zacinalo nejakym cislem. V podstate se da rict, ze cisla jsou vlastne to jedine, co server musi psat - to povidani za cislem neni zase tolik dulezite. v RFC 2821 je prehled techto kodu i s jejich vyznamem. Obecne plati, ze kody 2xx znamenaji uspech; 3xx inicializuji prenos zpravy (v RFC 2821 je jenom 354); 4xx zmanemaji docasnou chybu (to znamena "ted to nejde, ale zkus to za chvili" - mailservery to vetsinou zkouseji po ctyrech hodinach a pokud se jim to tyden nepodari, tak to vzdaji) a 5xx je premanentni chyba (napriklad "takovy mailbox neexistuje").

Casem vznikla potreba tento protokol rozsirit o nejake dalsi funkce (komunikace nad SSL, autentizace, ...). Toto rozsireni se nazyva ESMTP (RFC 1869). Protokoly SMTP a ESMTP jsou v jistem smyslu kompatibilni. Vetsina dnesnich mailserveru podporuje oba dva. Klient se sam rozhodne, ktery umi a chce vyuzivat. Server pozna komunikaci protokolem ESMTP od komunikace SMTP podle pozdravu - pozdrav ESMTP je EHLO ...

Asi by bylo asi by bylo dobre rici, proc je vlastne dobra ta autentizace (SSL je asi jasna vec). SMTP protokol totiz nijak nespecifikuje, co se ma dale s tim mailem udelat (ulozit, poslta dal, ...). Kdysi byvalo zvykem, ze po prijeti mailu se k nemu mailserver choval stejne, jako by ho dostal napriklad od lokalniho uzivatele - tj. snazil se ho dorucit - podival se, jestli neni pro nektereho z jeho uzivatelu; pokud ano, dorucil ho, pokud ne, podival se do DNS a predal ho odpovednemu mailserveru. Tomuto chovani se dnes rika open-relay a obecne neni moc dobry napad svuj mail-server timto zpusobem nastavovat - je totiz velmi jednoduse zneuzitelny spamery - budou hrnout spamy na vas a vy jim je budete rozdistribuovavat. Vysledek bude ten, ze na black-listu se neocitnou oni, ale vy...

Na druhou stranu ale nekdy chcete, aby pres vas mohli odesilat postu vasi uzivatele - tj. nastavit si vas server jako server odchozi posty napriklad v Outlooku. V tomto pripade je nekdy velmi vhodne nastavit server tak, aby se uzivatel mohl autentizovat - po autentizaci se budete chovat jako open-relay - bez autentizace budete akceptovat jenom postu, ktera je vazne pro vas...


Jaky mailserver si vybrat?

Na dnesnim open-source trhu jsou k dispozici v podstate 3 mailservery, ktere stoji za uvahu. Je to Sendmail, Postfix a Qmail. Jeste byste mozna mohli zaslechnout o Eximu, ale ten je mozna pouzitelny, pokud spravujete jednu domenu a mate tak dva uzivatele :o)

Sendmail je asi nejstarci zijici mailserver. Ma tu smulu, ze byl napsan v dobe, kdy byl Internet jeste docela pratelske misto, vsichni se meli radi a zili vedle sebe v miru a harmonii. Jeho autor moc nepocital s tim, ze by na Sendmail mohl nekdo nejak utocit. Vysledkem je program, ktery funkcne vazne outstanding, ale co chvili se v nem obevi nejaka vazna bezpecnostni dira. Navic je jeho konfigurace trochu netrivialni. Tim ovsem netvrdim, ze je Sendmail nepouzitelny - pouziva ho napriklad Seznam (nebo to tak aspon vypada, kdyz se vytelnetite na smtp.seznam.cz na port 25... Doporucuji pro velmi zkusene spravce.

Postfix vznikl jako projekt sponzorovany IBM. Bohuzel s nim nemam prakticke zkusenosti, ale spravci, kteri s nim pracuji si ho vetsinou nemuzou vynachvalit. Byl psan s durazem na bezpecnost. To je bohuzel vse, co vim. Pokud nekdy budete instalovat produkcni mailserver, budete mit cas si s tim trochu pohrat a nebudete potrebovat webove rozhrani pro vytvareni a nastaveni uctu, doporucuji vyzkouset. Dluzno zminit, ze Postfix je preferovan ja default mailserver ve vetsine distribuci a ze ho najdete napriklad i v OS Panther, coz je serverova verze operacniho systemu pro Mac.

Qmail je jednim z programu napsanym panen Bernsteinem (pokud se chcete trochu pobavit a neco se o panu Bernsteinovi dozvedet, doporucuji precist tuto stranku). Byl take psan s durazem na bezpecnost. Je velmi modularni sklada se z nekolika programu - napriklad qmail-smtp obsluhuje prichozi SMTP spojeni, qmail-local dorucuje postu lokalne, ... Ma trochu nezvykly zpusob konfigurace, ale da se na nej zvyknout. Hlavni problem je v tom, ze licence pod kterou byl Qmail uvolnen umoznuje jeho distribuci (vyhradne ve zdrojovem kodu - nesmite distribuovat binarky) pouze v nezmenene podobe. Tzn. muzu napsat patch, ale rozhodne nemuzu cekat, ze ho pan Bernstein zacleni do Qmailu a vyda novou verzi. Ve skutecnosti uz nejaky ten rok zadna nova verze Qmailu nevysla. Praxe je takova, ze vam pravdepodobne nebude Qmail v jeho zakladni podobe stacit a budete muset nejaky ten patch sehnat. Jenomze - predstavte si, ze potrebujete napriklad rozsirit Qmail, aby umel SMTP autentizaci a zaroven SMTP pres SSL. Existuje patch, ktery umi prvni vec, taky existuje patch, ktery umi druhou vec, ale urcite nemuzete aplikovat oba naraz... Tenhle konkretni proble tedy je zrovna resitelny, protoze existuje i patch, ktery to umi oboje (viz dale), ale patchu na Qmail jsou desitky a urcite se vam muze stat, ze byste chteli pouzit dva zaraz - coz neni zas tak jednoduche...

Me osobne prijde Qmail docela dobre ohybatelny na docela hodne veci - hlavne diky tomu, ze vzdy ohybate jen jeden program z celeho celku, ale je opravdu mailserver pro programatory - co si nenapisete, to nemate - Qmail sam poskytuje jakysi zaklad.

Na druhou stranu, pokud potrebujete jenom bezne veci - jako jednoduchou webovou spravu mailu, jednoduche pridavani dalsich virtualhostu, diskusni forum a antivirovy a natispamovy filtr, je Qmail mozna nejlepsi volba. Existuji velmi uzitecne programy, ktere s nim spolupracuji a take stranka, na ktere je velmi dobre popsana instalace. S trochou stesti se da vsechno, co potrebujete pro hostingovy mailserver, nainstalovat za dopoledne...

Jeste by asi bylo vhodne se zminit o baliku net-Qmail. Je to v podstate distribuce Qmailu, ktera obsahuje jeste nekolik patchu. Tyto patche rozsiruji Qmail o SMTP-SSL a SMTP autentizaci. V praxi to vypada tak, ze tenhle balik rozbalite, napisete "make" - tim aplikujete uvedete patche, pak vlezete do adresare Qmail a napisete "make" znovu - cimz zkompilujete opatchovany Qmail. Tyto silenosti je nutno pachat prave kvuli zminovane licenci Qmailu...


Instalace Qmailu

Nez zacnete s vlastni instalaci, je v celku dobry napad se neco dozvedet o tom, jak Qmail funguje. Toto je popasano uplne uzasne na strankach Qmail big picture. Jak uz jsem rekl, Qmail se sklada z nekolika vice mene nezavislych programu, ktere spolu navzajem komunikuji a snazi se pokud mozno co nejmene predpokladat o tom, jak se chova ten druhy. Vysledek je ten, ze pokud najdetechybu v jednom z nich, jeste to neznamena, ze budete schopni prolomit cely system...

Neprijde mi smysluplne abych opisoval HOWTO, ktera jsou velmi dobre napsana. Spise sem napisu odkazy. HOWTO pro instalaci Qmailu existuji dve (teda urcite jich existuje vic - ale tato dve jsou pouzivana sirokou verejnosti a tudiz i otestovana). Jeto Qmail Toaster a Life with Qmail. Za zminku take stoji jeste jeden Qmail Toaster je to jemenovec prvne jmenovaneho - jeho webova stranka se tvari velmi schopne. Tento projekt pouziva i nejaky vlastni software. Sam jsem ho netestoval, ale urcite to drive nebo pozdeji udelam...

Life with Qmail je tak trochu out-of-date. Popisuje instalaci Qmailu + IMAP serveru. Na druhou stranu to neni jen steb-by-step HOWTO, ale vysvetluje i vyznam nekterych konfiguracnich voleb. Vrele doporucuji alespon precist...

Qmail Toaster se v soucasne dobe stale vyviji. Neni uz postaven na Qmailu, ale na baliku net-Qmail. Je to opravdu step-by-step navod, ktery nepredpoklada nic o tom, jestli vam slovo Qmail neco rika nebo ne. Proste kopirujete prikazy do prikazove radky a na konci mate nainstalovany Qmail s antivirovym a antispamovym filtrem, s webovou administraci, s moznosti odesilat a cist maily pres webove rozhrani a s POP3 a IMAP serverem.


Konfigurace Qmailu

Qmail se konfiguruje pomoci nekolika souboru umistenych v adresari /var/qmail/control. Kazdy soubor prislusi jedne konfiguracni directive - cili nazev souboru je zaroven nazev teto directivy a jeho obsah je jeji hodnota. Klasicky konfigurak nehledejte... Pokud pouzijete Qmail Toaster, tak vam tato cast v podstate odpada. Jestli chcete od Qmailu neco specialniho, tak doporucuji nejdriv prosudovat Qmail big picture - tim zjistite, ktery program vlastne chcete konfigurovat a potom se podivat do manualove stranky prislusneho programu - ty jsou standartne v adresari /var/qmail/man. Pokud vas zrovna zajima, na co presne je ten ktery konfiguracni soubor, podivejte se bud do Life with Qmail nebo zkuste prikaz:

$ find /var/qmail/man -type f -exec grep -l nazev_souboru {} \;

Tak me napadlo, ze jsem jeste nerekl, kam se ty maily vlastne dorucuji. Puvodne se pouzival jeden soubor, do ktereho se davaly maily jeden za druhym - oddelene prazdnym radkem. Tento ponekud kostrbaty zpusob se naziva mbox a dodnes se pouziva - v nekterych pripadej je to dokonce i docela vhodne reseni - napriklad jsou timto zpusobem reseny maily na Aise.

Maildir je format, ktery zavedl Qmail. Jedna se o adresar, ktery ma 3 podadresare: cur, new a tmp. Adresar new slouzi pro neprectenou postu, cur pro prectenou a adresar tmp je uzitecny pro dorucovani mailu. Pak je tam jeste par rezijnich souboru, ktere nas nemusi moc zajimat :o)


Protokoly POP3 a IMAP

Tak ted uz dokazeme dostat postu do nejakeho adresare nebo souboru na serveru. Jenomze jak ji dostat k uzivateli? Pokud spravujete UNIXovy server typu Aisa, tak nemate problem - proste ta posta bude chodit uzivatelum do $HOME a je uz na nich, co s tim budou pachat. Pokud ale mate uzivatele, kteri neumi zachazet s prikazovou radkou nebo jim to nechcete umoznit, potrebujete zpusob, jak tu postu dostat napriklad do Outlooku. K tomu mohou slouzit dva protokoly POP3 (RFC 1939) nebo IMAP (RFC 3501). Je zrejme, ze takovy protokol urcite musi umet autentizaci - takze tohle zvladaji oba. Oba take umi neco jako MD5 autentizaci - coz je zpusob, jak zajistit, aby hesla nesla po siti jen tak. Vetsina postovnich klientu take podporuje moznost provozovat POP3 nebo IMAP nad SSL.

Protokol POP3 je jednodusi ze obou uvedenych. V podstate zna jen par prikazu - umis stahnout hlavicky zprav, stahnout zpravy, stahnout neprectene zpravy a smazat zpravu. Mozna jeste par dalsich veci.

Protokol IMAP je o neco dokonalejsi - umi navic prohledavat zpravy. Zobrazit zpravy s nejakym filtrem (treba na odesilatele), atd. Vetsina postovnich klientu se chova tak, ze pokud je nastavite, aby pouzivali IMAP, budou zpravy nechavat na serveru a stahovat je jen pokud je uzivatel bude chtit precist. Co se tyce mazani zprav, tak ma IMAP jedu Windows-like vlastnost - zpravu musite nejdriv oznacit jako smazanou a potom teprve rict neco jako "vysypat kos" (to jenom tak pro zajimavost).

Obecne plati, ze POP3 je off-line protokol a IMAP on-line protokol. Dalsi obecne pravidlo byva, ze tam, kde dostanete schranku zadarmo (Seznam), budete mit jen POP3 a tam, kde za to platite, dostanete IMAP...


Instalace a konfigurace IMAP serveru

Pokud budete postupovat podle Qmail Toasteru, nainstalujete Courier IMAP. Ja ale pouzivam jinou alternativu - Dovecot. Neptejte se me proc - jsou to spis historicke duvody - kdyz jsem svuj mailserver instaloval, byl jsem trochu paranoidni a vychazel jsme z toho, ze se crackarovi lepe utoci na rozsireny program. Navic je Dovecot psan s durazem na bezpecnost a vykon. Dnes ho pouzivam spise proto, ze jsem zvykly na jeho konfiguraci a nemam zadny duvod ucit se neco jineho. Umoznuje i takove veci, jako mit napriklad hesla v LDAPu nebo v SQL. Zvlada jak POP3, tak IMAP a navic oboje i pres SSL. Pri jeho konfiguraci vas budou asi zajimat hlavne tyto volby:

protocols = pop3 imap # specifikuje protokoly, na ktere ma Dovecot reagovat - jeste je mozne # pripsat pop3s a imaps - ale to byste museli generovat SSL certifikat... first_valid_uid = 80 last_valid_uid = 90 first_valid_gid = 80 last_valid_gid = 90 # pokud se uzivatel prihlasi a meli bysme menit UID procesu, toto zablokuje # zjiskani UID, ktere byste vazne nikomu dat nechteli... auth_userdb = passwd # bude brat uzivatele a hesla z /etc/passwd - pouziva funkci getpwnam() auth_passdb = shadow # getspnam() auth_user = non_root # uzivatel, pod kterym bezi autentizacni proces...