Portál AbcLinuxu, 26. dubna 2024 01:44

Stavíme poštovní server – 1 (Postfix)

12. 10. 2009 | Lukáš Jelínek
Články - Stavíme poštovní server – 1 (Postfix)  

E-mailové řešení pro firmu nebo třeba neziskové sdružení, ale i rozjezd hostingových služeb, jejichž součástí elektronická pošta bývá – to jsou případy, kdy potřebujeme „postavit“ poštovní server nebo sadu serverů. Možnosti výběru jsou velké, a to i pokud zůstaneme jen u svobodného softwaru. Jako základní stavební kameny si lze zvolit například Postfix a Dovecot (případně v kombinaci s dalšími programy). Právě řešením postaveným na těchto dvou programech bude věnován tento seriál.

Obsah

Proč právě…?

link

Proč si jako základ poštovního systému zvolit právě programy PostfixDovecot? Odpověď není až tak úplně jednoduchá, přesněji řečeno důvody jsou různé a většinou se jich uplatní hned několik najednou. Jsou samozřejmě případy, kdy bude vhodnější použít jiné programy, ale zmíněné dva bezproblémově vyhoví v široké škále situací, se kterými se setkáváme.

Vzhledem k té obsáhlosti zdůvodnění jsem se rozhodl zahájit seriál dvěma články, které budou věnovány obecnému popisu obou programů (tedy v tomto článku to bude Postfix, v příštím Dovecot) a představení důvodů, proč jsou tak vhodnými kandidáty pro nasazení na poštovních serverech.

Postfix a jeho historie

link

Postfix je poštovní server (Mail Transfer Agent, MTA), který plní základní úkoly při přenosu zpráv elektronické pošty. Mezi takové úkoly patří přebírání od klientů a od jiných poštovních serverů, směrování, předávání jiným serverům a doručování do schránek (jeho hlavním protokolem je SMTP, resp. ESMTP). Nestará se o přístup k poště (přes protokoly POP3 a IMAP4, ani přes webové rozhraní apod.), o ochranu proti spamu a virům (kromě využití „vhodného nastavení“, o kterém bude řeč v dalších dílech seriálu) ani o filtraci, třídění zpráv, automatické odpovídání a další „pokročilé“ funkce.

Že Postfix postrádá mnoho z funkcí, bez kterých si moderní poštovní server nelze představit, není vůbec na závadu. Lze ho totiž velmi snadno doplnit jinými programy, které tyto úkoly zastanou, a přitom není Postfix zbytečně zesložiťován a nafukován v případech, kdy takové funkce potřeba nejsou.

Historie programu Postfix

link

Program Postfix začal vyvíjet Wietse Zweitze Venema v IBM Thomas J. Watson Research Center ve druhé polovině 90. let. 14. prosince 1998 zveřejnila firma IBM tiskovou zprávu, kterou ohlásila vydání produktu Secure Mailer, což nebylo nic jiného, než program nazvaný též Postfix. Již před tímto oficiálním aktem byla k dispozici betaverze programu, tehdy pracovně nazvaného VMailer.

Cílem od samého počátku bylo nahradit dosud dominantní program Sendmail (který tehdy trpěl bezpečnostními chybami a byl obtížně konfigurovatelný) něčím mnohem bezpečnějším, robustnějším a snadněji spravovatelným. Na rozdíl od v zásadě monolitického Sendmailu byl VMailer/Postfix od počátku navržen jako silně modulární. Postfix je poskytován pod licencí IBM Public License (svobodná licence nekompatibilní s GNU GPL).

Přestože měl Wietse Venema původně v plánu po dokončení programu tento předat jiným lidem k další údržbě (aby se mohl věnovat jiným projektům), dodnes zůstává hlavním vývojářem a nové verze Postfixu stále vznikají poměrně rychlým tempem. Například nyní je aktuální řada 2.6.x (verze 2.6.0 byla vydána 12. 5. 2009), předchozí řada 2.5.x byla odstartována vydáním verze 2.5.0 dne 24. 1. 2008, již se připravuje řada 2.7.x. Aktuálně jsou (kromě řady 2.6.x) udržovány také řady 2.3.x, 2.4.x a 2.5.x.

Proč používat Postfix

link

Před podrobnějším rozvedením jednotlivých důvodů (včetně nezbytného technického pozadí) bude nejlepší uvést všechny tyto důvody pohromadě:

Postfix je flexibilní. Lze ho v prakticky neomezené míře přizpůsobovat konkrétním potřebám. Může sloužit jako pouhý jednoduchý odesílací nástroj pro linuxový stroj, ale také jako server pro velkou firmu (s přenosem mnoha zpráv za sekundu) nebo pro hostingové řešení (tedy mnoho schránek na velkém počtu domén atd.). Data pro svou práci může získávat ze široké škály různých zdrojů. Se zprávami může nakládat mnoha způsoby.

Postfix je škálovatelný. Pro svůj běh si vystačí s omezeným prostředím, ale je-li třeba (a je-li správně nastaven), může stejně tak využít i možnosti poskytované mnohaprocesorovým strojem s velkou pamětí a rychlými síťovými rozhraními.

Postfix je funkčně bohatý. Přestože řadu úkolů poštovního serveru vůbec neřeší (třeba komplexní antispamovou filtraci), ve své funkční doméně toho nabízí opravdu hodně. Týká se to způsobu směrování, doručování a předávání zpráv, možností autentizace a autorizace, formálních kontrol zpráv a relací, komunikace s pomocnými programy atd.

Postfix je snadno spravovatelný a konfigurovatelný. Konfigurační soubor je složen z jednoduchých pravidel typu parametr=hodnota, není potřeba znát žádnou speciální syntaxi, všechno je dobře zdokumentováno. Pokud něco nefunguje nebo se chová anomálně, Postfix to dá srozumitelným způsobem vědět do logu.

Postfix je stabilní, robustní a bezpečný. Modulární koncepce znamená, že problémy jedné komponenty neohrožují funkci ostatních komponent. Havaruje-li některá komponenta, je restartována, ale s ohledem na zátěž systému. Bezpečnost je zajišťována hned několika způsoby – minimalitou práv, důslednou separací práv mezi moduly, možností zcela izolovat většinu modulů pomocí chroot, definicí různých omezení v konfiguraci a dalšími pomocnými metodami.

Postfix má nízké systémové nároky. Běží jen ty komponenty, které se skutečně používají. Nevyužívají se žádné paměťově náročné knihovny ani žravé algoritmy. Náročnost lze ještě dále snížit vhodnou konfigurací.

Architektura poštovního systému Postfix

link

Postfix je složen z hlavního modulu nazvaného master a z výkonných modulů, realizujících konkrétní úkoly. Modul master (v závislosti na své konfiguraci) výkonné moduly spouští a kontroluje jejich funkci. V případě, že nějaký modul neočekávaně skončí, master ho restartuje. Pokud jsou ale s nějakým modulem nadále problémy, čeká se po stanovenou dobu (výchozí hodnota je 1 minuta), aby nebyl systém zbytečně zatěžován neúspěšnými starty.

Architektura systému Postfix

Lze určit, kolik instancí (procesů) kterého modulu smí maximálně běžet, jak dlouho má služba čekat na příchozí spojení před svým ukončením, jak často má master probouzet určitý modul atd. Těmito parametry lze ovlivňovat spotřebu prostředků (a na druhou stranu i rychlost odezvy a průchodnost) v závislosti na konkrétních potřebách a možnostech. Tak lze například seškrtit spotřebu tam, kde není potřeba vysoký výkon, a naopak poskytnout dostatečné možnosti na silném stroji a při velkých nárocích na výkon.

Modul master může spravovat i komponenty, které nejsou součástí programu Postfix. Typicky se může jednat třeba o situaci, kdy finální doručení do schránky provádí nějaký doručovací agent (třeba z programu Dovecot, bude popsán v příštím dílu seriálu). Dále může také stejná komponenta vystupovat ve více rolích, tedy master s ní nakládá různým způsobem (toto zase využíváme například při externí antispamové filtraci).

Součástí systému jsou samozřejmě také nástroje pro jeho ovládání. Přímo v balíku jsou k dispozici jednoduché konzolové utility, ale Postfix lze ovládat i jinými programy – ať už přímo, nebo nepřímo (přes zmíněné utility).

Průchod zpráv systémem Postfix

link

Cesta zpráv celým systémem může být poměrně komplikovaná. Bez dostatečného poznání, jaký úkol má na této cestě který modul, se však Postfix špatně konfiguruje. Ve velmi obecné rovině to ukazuje následující obrázek:

Průchod zpráv systémem Postfix

Zpráva se může do systému dostat několika cestami. Nejčastěji bude přijata přes síťovou SMTP relaci (případně přes QMQP, ale to je hodně vzácná věc), u lokálně odesílaných zpráv (od běžných poštovních klientů, ale třeba i od systémových programů nebo od PHP skriptů) také přes rozhraní „sendmail“ (příkaz se syntaxí odpovídající stejnojmennému programu, byť zde tuto funkcionalitu zajišťuje Postfix). Při síťovém příjmu zprávu přijímá modul smtpd (zajišťuje komunikaci na serverovém socketu).

Na vstupu zprávu zpracuje modul cleanup, který se postará o opravu a doplnění hlaviček, případně provede expanzi cílových obálkových adres (může využít služeb modulu trivial-rewrite) a vloží zprávu do fronty příchozích zpráv (incoming). Poté notifikuje správce fronty (qmgr), že je ve frontě nová zpráva.

Správce si udržuje „aktivní frontu“, což je jakési okno do skutečných front (příchozích a odložených zpráv) – tyto zprávy zkouší předávat dál. Pokud se mu to podaří, zpráva se odebere z fronty. Nepodaří-li se to, zpráva se umístí do fronty deferred (odložené zprávy), pokud tam dosud nebyla, a po nějaké době se opět aktivuje pro další doručovací pokus.

Další osud zprávy může být velmi rozličný. Starají se o něj doručovací agenty, konkrétně moduly smtp, lmtp, local, virtual nebo pipe. Modul smtp je SMTP klient, předává tedy zprávu nějakému dalšímu SMTP serveru – tím může být cílový server, relay server nebo třeba nějaký filtrační mechanismus. Totéž platí i pro modul lmtp, jehož protokol LMTP se však používá poměrně zřídka. Modul local doručuje místním příjemcům (uživatelům počítače), modul virtual pak virtuálním příjemcům (typická funkce pro poštovní hosting). A konečně pipe předává zprávy spouštěnému externímu programu.

Speciálními případy doručovacích agentů jsou moduly discard a error. Ty totiž ve skutečnosti nikam dál nedoručují. Modul discard zprávu prostě zahodí, error ji vrátí s dočasnou chybou retry nebo trvalou chybou error. Takové chování těchto speciálních agentů se využívá v situacích, kdy nelze z nějakého důvodu zprávu někam normálně doručit.

Další moduly programu Postfix

link

Kromě uvedených modulů se nakládání se zprávami a dalších činností poštovního serveru Postfix účastní ještě další moduly. Následující seznam bude jen heslovitý, protože na detailní popis jednotlivých modulů nastane pravý čas později.

Přítomnost jednotlivých modulů v běžícím serveru a jejich interakce s jinými moduly závisí na konfiguraci serveru. Například modul tlsmgr se spouští jen v případě, že se používá TLS komunikace. Většina modulů může běžet s minimálními právy (a v prostředí chroot), takže lze omezit potenciální bezpečnostní rizika, která by z nich pramenila.

Informační zdroje programu Postfix

link

Postfix může využívat celou škálu informačních zdrojů (tabulek). Co si pod tímto obecným pojmem představit? Z pohledu významu třeba seznamy doručovaných domén, mapování adres na schránky, aliasy, blacklisty a whitelisty, autentizační informace apod. Jednotlivým modulům stačí mít k dispozici potřebné informace a nezáleží na tom, odkud a jak se získají. Z pohledu člověka, který rozhoduje o způsobu nasazení a správy serveru, to však samozřejmě důležité je.

Proto Postfix podporuje řadu různých metod, jak potřebné informace získávat. Lze tak na jednu stranu velmi rychle zprovoznit jednoduchý server, ale současně také mít možnost pracovat s externími databázemi různého typu. Toto jsou obecně podporované metody:

Ne vždy jsou všechny metody k dispozici (vyžadují zakompilování do serveru a často také podporu v systému, např. u databází), navíc ne vždy lze každou z nich použít, též samozřejmě různé metody jsou vhodné v různých případech. Například metodu unix nelze použít k ničemu jinému, než je ověřování uživatelů. Proměnné prostředí nebo statické hodnoty se zase hodí jen pro skutečně primitivní informace.

V každém případě tato široká škála poskytuje dostatek možností, jak si server maximálně přizpůsobit „k obrazu svému“, tedy pro určité použití. Komu by přece něco scházelo, existují implementace dalších metod, případně si lze vytvořit něco vlastního (ať už přímo přes příslušné API nebo třeba pomocí dotazování přes TCP). Jinak pro ověřování uživatelů Postfix podporuje standardizovanou metodu SASL, což lze s výhodou využít například při jeho spolupráci s programem Dovecot, ale i v jiných případech.

To je všechno?

link

Zatím ano. Toto byl jen takový velice letmý průlet tím, co Postfix všechno umí. Výčty modulů a metod jsou tu jen pro ilustraci šíře záběru tohoto programu. Mnohem zajímavější to ale bude, až se ukáže v praxi. To bude ale až přespříště, protože příště se stručně představí jeho společník: program Dovecot. Bez přístupu k poště by poštovní server rozhodně nebyl plnohodnotný. A Dovecot toho má skutečně dost co nabídnout, ve vzájemném porovnání je Postfixu zcela rovnocenným soupeřem.

Seriál Stavíme poštovní server (dílů: 17)

První díl: Stavíme poštovní server – 1 (Postfix), poslední díl: Stavíme poštovní server – 17 (optimalizace výkonu).
Následující díl: Stavíme poštovní server – 2 (Dovecot)

Související články

Mailserver s odvirováním pošty
DKIM – podepisujeme e-maily na serveru
SPAM - greylisting ve firmě
Spam: naučte se bránit
MessageWall - kladivo nejen na spam
Jsme na dovolené - automatická odpověď

Odkazy a zdroje

postfix.org

Další články z této rubriky

PowerDNS – přívětivý a jednoduchý DNS server
Bootování ze sítě: pxelinux a kořenový adresář na NFS
Těžký život Do Not Track
OpenAFS – servery
Architektura IPv6 – konfigurace adres a objevování sousedů (2)

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.