Jak putuje e-mail
Odchozí pošta, napsaná v poštovním programu (MUA – Mail User Agent), je v unixovém světě předávána odesílacímu programu (MSP – Message Submission Program), který se stará o její odeslání (býval jím /usr/bin/mail, /usr/lib/sendmail, dnes to standardně bývá /usr/sbin/sendmail). Je to program, který předá poštu dále. Výhoda je v tom, že uživatelský program nemusí vědět nic o poštovních protokolech a stará se pouze o interakci s uživatelem. Navíc se o konfiguraci a správu odchozí pošty stará správce systému.
MSP předává poštu dále programu pro přenos pošty (MTA – Mail Transport Agent). V dobách izolovaných sítí procházela pošta přes více MTA, než byla doručena. Dnes se většinou omezuje na jeden server (tzv. SMTP server) – místo, kde se pošta přechovává před doručením (Relay).
Z klikacích operačních systémů pronikl systém vše v jednom (All In One) – mnoho z těchto systémů MSP obchází a poštu předává rovnou vzdálenému SMTP serveru, platí však za to nutností konfigurace odchozí pošty pro každého uživatele zvlášť a nutností odesílat poštu v době připojení a aktualizovat nastavení všem uživatelům při každé změně SMTP serveru (následkem toho řešení vše v jednom potřebují zvláštní identitu pro připojení přes různé providery). Zvlášť nepříjemné to je tehdy, používáme-li k vyřizování pošty více takových programů. Naštěstí lze naprostou většinu programů vše v jednom přimět, aby spolupracovaly s místním MTA, a tím problémy s obcházením MSP odpadnou.
MTA komunikuje s cílovým serverem (nebo dalšími MTA), aby doručil poštu pro příjemce. Na cílovém serveru předá dalšímu článku štafety – doručovacímu programu (MDA – Mail Delivery Agent). MDA může poštu ještě dále třídit a naloží s ní podle uživatelem zadaných pravidel – nejčastěji putuje do přidělené schránky. Pak již pošta čeká jen na to, až si ji vyzvedneme. Schránka může být i na pracovním počítači, ale většinou je to nepraktické – pokud by nebyl připojen v době, kdy nám dojde nová pošta, snadno by se mohlo stát, že se vrátí odesílateli jako nedoručitelná. Na cílovém serveru však pošta počká, dokud si ji nevyzvedneme.
Veškerá komunikace, kterou jsme doposud popsali, probíhá v protokolu SMTP (Simple Mail Transport Protocol), jemuž je vyhrazen TCP port 25, nebo jeho rozšířenou verzí ESMTP (mimo jiné s podporou osmibitového přenosu).
Ke konečnému doručení z poštovního serveru do našeho počítače se již používají jiné protokoly: POP (Post Office Protocol; nejčastěji se lze setkat s verzí POP3), protokol, jehož úkolem je stáhnout poštu do pracovního počítače, nebo IMAP (Internet Mail Access Protocol, dnes ve verzi IMAP4), který je navržen nejen ke stahování pošty, ale i pro dálkovou práci s ní. Na straně poštovního serveru k tomu samozřejmě musí běžet příslušný démon, který v těchto protokolech komunikuje. Existuje mnoho rozšíření protokolu POP3, spočívající na přihlašování bezpečnějším než je heslo v textové podobě – APOP (MD5), RPOP (RPOP), KPOP (Kerberos), POP3+OPIE (OTP) a další protokoly, spočívající na rozšíření ESMTP – ETRN a ODMR (On-Demand Mail Relay). Pro přístup k poště lze samozřejmě použít i standardní metody vzdáleného přístupu jako NFS nebo LDAP.
Ke stažení pošty lze použít specializované programy nebo opět řešení vše v jednom.
Někdy je výhodné, aby tento program přeposlal poštu dále opět v protokolu SMTP (například v malé firmě s vytáčeným připojením, kdy jeden počítač vyzvedne poštu pro všechny a rozešle ji po firmě). Nejčastěji však poštu předá MDA, a ten ji konečně doručí až na místo.
A teprve pak se pošta objeví v poštovním programu příjemce.
Klasické programy
Ve většině distribucí GNU-Linuxu naleznete „klasické“ programy pro většinu těchto činností.
Historická role MSP a MTA připadá ve většině distribucí na Sendmail. Je to robustní, schopný a dnes již snad i bezpečný monolitický program.
Role standardního MDA připadá programu Procmail. Jeho schopností filtrovat poštu využívá denně množství uživatelů na třídění pošty a programů a k odhalování nevyžádané pošty.
Roli programu pro vyzvedávání pošty pak většinou plní Fetchmail (dříve zvaný popclient).
Ke každému z těchto programů existují alternativy, jako například Qmail, Maidrop a Postfix nebo Vpopmail a další.
Původní Unixový MUA – mail nebo jeho následníka mailx již dnes skoro nikdo nepoužívá, neboť existuje obrovské množství lepších programů. Program tohoto jména najdete v distribucích nanejvýš pro potřeby skriptů.
POP a IMAP servery takového jednoznačného favorita nemají a existuje velké množství implementací.
Sendmail
Sendmail je program s historickými kořeny, a tak zvládá i věci, které dnes, v době světové pavučiny, ztratily svůj význam – doručování pošty do různých typů sítí, jakými byly Bitnet, Decnet, UUCP, a dokonce i doručování faxem.
Ještě v nedávných letech patřila k programátorskému folklóru pravidelná aktualizace Sendmailu kvůli nově nalezené bezpečnostní díře. To je však dnes již minulostí.
Při typické konfiguraci moderních instalací běží sendmail jako dva démony – jeden, privilegovaný, běží jako SMTP server, čeká na spojení na TCP portu 25 a stará se o odeslání čekající pošty z fronty v /var/spool/mqueue. Druhý, neprivilegovaný, občas nahlédne do neprivilegované fronty /var/spool/clientmqueue s poštou nepřijatou k odeslání (většinou proto, že se nepodařilo kontaktovat cílový server) a pokusí se o její opětovné odeslání.
Jak probíhá činnost Sendmailu při odesílání pošty? Poštovní program spustí neprivilegovanou instanci programu Sendmail (program je sgid a běží pod skupinou smmsp) a předá mu data zprávy. Sendmail se pokusí kontaktovat SMTP server a předat mu poštu k vyřízení. Pokud se to povede, SMTP server data poměrně rychle převezme a další osud pošty je na něm. Pokud se to nepovede, uloží poštu k pozdějšímu doručení do neprivilegované fronty /var/spool/clientmqueue a dále se o její osud nestará.
Jak se chová démon Sendmail jako SMTP server? Když mu dojde požadavek na port 25, ověří si oprávnění (většinou bývá povoleno uživatelům z místní sítě odeslat poštu kamkoliv a uživatelům zvnějšku doručit poštu místním uživatelům). Provede další testy, a pokud je vše v pořádku, poštu převezme a pokouší se ji doručit. Přitom používá frontu /var/spool/mqueue, kam si odkládá procházející poštu a poštu, kterou se zatím nepodařilo odeslat. Pokud se odeslání podaří, smaže ji z fronty a jeho úkol je splněn. Pokud ne, periodicky se pokouší odeslat ji znovu. Pokud se to nepovede ve stanoveném čase, pošle nejdříve odesílateli varování, po delší době pak chybové hlášení a poštu z fronty vyřadí.
Druhá, neprivilegovaná instance démonu Sendmail běží pod skupinou smmsp a uživatelem smmsp a hlídá, zda do neprivilegované fronty /var/spool/clientmqueue nepřibyla nějaká neodeslaná pošta. Tu se pak periodicky pokouší odeslat místnímu SMTP serveru. V ostatních ohledech se chová podobně jako první instance (až na to, že nehlídá port 25).
Typická přístupová práva pro adresáře a soubory Sendmailu vypadají asi takto:
-r-xr-sr-x root smmsp /usr/sbin/sendmail* drwxrwx--- smmsp smmsp /var/spool/clientmqueue/ drwx------ root root /var/spool/mqueue/
Stav neprivilegované fronty lze kontrolovat příkazem mailq -Ac, stav privilegované fronty může superuživatel ověřit příkazem mailq. Ke statistice mailového provozu slouží mailstats. S dalšími programy se seznámíme později.
U starších instalací programu Sendmail s jedinou frontou se spouštěl jediný démon. Všechny instance byly spouštěny jako suid s právy superuživatele a nepřijatou poštu ukládaly rovnou do fronty /var/spool/mqueue. Od této konfigurace bylo z bezpečnostních důvodů v nových verzích upuštěno.
Většina správců systému nahlédne do konfiguračního souboru, zhrozí se a již se více nepokouší Sendmail konfigurovat. A přitom existuje jednoduchý a elegantní postup, jak sendmail přizpůsobit svým požadavkům. Je jim množina m4 maker, s jejichž pomocí vytvoříme krátký konfigurační soubor, a ten pak zpracujeme makroprocesorem. Příslušná makra možná naleznete ve vaší instalaci, ale určitě v balíčku se zdrojovým kódem. Spolu s ním nalezneme i README, kde jsou základní informace o jednotlivých volbách.
Příště si ukážeme, jak lze Sendmail s jejich pomocí nakonfigurovat.