Poštovní server Postfix

Radek Hladík, xhladik2@fi.muni.cz


Obsah


Úvod

Postfix je zástupcem programů zvaných MTA (Mail Transport Agent). Snaží se být přesným opakem programu sendmail, t.j. malý, bezpečný, flexibilní a rychlý SMTP server. Sám jeho autor, Wietse Venema, uvádí, že se snaží být konkurencí programu qmail. Dále se snaží do maximální možné míry zůstat kompatibilní s programem sendmail. Hlavní výhodou programu Postfix je jeho jednoduchá instalace (bývá obsažen ve většině distribucí ve formě balíčku) a jednoduchá konfigurace (velmi přehledný a dobře komentovaný konfigurační soubor). Další výhodou je jeho modularita. Díky těmto uvedeným vlastnostem je MTA Postfix vhodný i v nasazeních, kde jsou požadavky na snadnost instalace/obsluhy.


Základní vlastnosti


Instalace

Program Postfix je součástí většiny větších distribucí (většinou i ve formě balíčku). V případě RedHat Linuxu je dokonce k dispozici grafická utilitka, která umožňuje přepínat mezi standardním sendmailem a volitelným Postfixem. Pokud chcete překládat ze zdrojových kódů, najdete je na stránkách projektu. Kompilace je velmi jednoduchá a je dobře popsána v souboru INSTALL. Další, zlatá střední, cesta je použít předpřivené zdrojové balíčky. Poměrně kvalitní balíčky vyrábí Tuomo Soini. Tyto balíčky obsahují i některé další patche. Instalace je jinak dobře popsána v howto Patricka Koettera (viz. odkazy na konci textu).


Konfigurace

Program Postfix má velmi dobře dokumentované a přehledné konfigurační soubory. Používá konfigurační soubor master.cf, ve kterém jsou vypsány jednotlivé podprogramy a jejich parametry (způsob spouštění, limity,....). Tento program většinou měnit nepotřebujeme, maximálně zakomentujeme řádky s podporgramy, které nejsou v našem případě potřeba.

V souboru main.cf se nachází hlavní konfigurace. Uvedu zde některé základní konfigurační parametry:

myhostnameJméno počítače, kde Postfix běží (pokud není parametr zadán, vezme se automaticky ze systému).
Např.: myhostname = host.local.domain
mydomainJméno domény, kde Postfix běží (pokud není parametr zadán, vezme se automaticky z parametru myhostname).
Např.: mydomain = local.domain
myoriginOznačuje doménu, která se přidá k adrese odchozích zpráv (z tohoto počítače)
Např.: myorigin = $myhostname
mydestinationUrčuje, pro které destinace bude Postfix na tomto stroji přijímat poštu.
Např.: mydestination = $myhostname localhost.$mydomain
mynetworksUrčuje, které sítě jsou pro Postfix "důvěryhodné". Toto se projeví například tak, že v implicitní konfiguraci Postfix přijímá poštu (relaying) pouze od počítačů v těchto sítích. Toto se dá samozřejmě změnit, viz další parametr.
Např.: mynetworks = 168.100.189.0/28, 127.0.0.0/8
relay_domainsNastavení, pro které domény má Postfix přijímat (relay) poštu.
Např.: relay_domains = $mydestination
relayhostServer, kterému se má předávat veškerá pošta. Toto je zvlášť vhodné v instalacích, kde se veškerá pošta přeposílá na další SMTP server (například, pokud je náš SMTP server za firewallem a nemůže navazovat spojení ven).
Např.: relayhost = smtp.dmz.firma.cz
luser_relayUživatel, kterému se má posílat pošta pro nenalezené uživatele (tzv. doménový koš).
Např.: luser_relay = uklizecka
mailbox_commandPříkaz, který se má zavolat na uložení zprávy do schránky. Používá se hlavně ve spojitosti s programem procmail, který umožňuje zprávy různě třídit a filtrovat.
Např.: mailbox_command = /usr/bin/procmail

Dalším důležitým konfiguračním souborem je sendmailovský /etc/aliases (někdy /etc/postfix/aliases). Tento na každé řádce obsahuje záznam typu:
adresát: cíl1,cíl2,....,cíl n

Jako cíl může být uvedeno: e-mailová adresa, lokální schránka, soubor s adresami nebo název programu, kterému se zpráva předá.

Například tedy
root:          pepa@novak.cz,|/usr/bin/vacation
honza:              honza,jan@novak.cz,123456@sms.cz

První řádka zajístí, že všechny příchozí zprávy pro root budou přesměrovány na adresu pepa@novak.cz a programu /usr/bin/vacation. Druhá řádka potom zajistí přesměrování mailů pro uživatele honza na zadané adresy a zároveň uložení do schránky honza. Každá změna v souboru aliases musí vetšinou být "přeložena" pomocí příkazu newaliases do souboru aliases.db, který postfix standardně používá.


Relaying a další zabezpečení

V dnešní době je potřeba klást důraz na zabezpečení služeb, které instalujeme a používáme. Hlavní nevýhodou protokolu SMTP je jeho přílišná důvěřivost. V dnešní době, kdy se spamy (nevyžádané e-maily) stávají velkým problémem, je potřeba řešit zabezpečení protokolu SMTP nějakými dodatečnými řešeními.

Prvním a nejjednodušším způsobem je omezení příjímání pošty na určitou množinu adresátů a odesílatelů. Každá přenášená zpráva, která na náš SMTP server dorazí, pro to může mít jeden ze dvou důvodů. První možností je, že přišlá zpráva je adresována někomu, pro koho je náš SMTP server nastaven přijímat poštu. Druhá možnost je, že zpráva je od někoho, pro koho je náš SMTP server nakonfigurován jako odchozí server. Servery, které přijímají zprávy od kohokoli a komukoli se nazývají "open-relay" a jedná se o poměrně velkou bezpečnostní díru. Dnes je běžnou praxí u většiny internetových poskytovatelů kontrolovat, zda na počítačích jejich zákazníků na portu 25 neběží SMTP server a zda není open-relay. V případě, že takový server objeví, většinou zablokují spojení na tento server do doby, než si zákazník problém vyřeší. Otestovat, zda je váš SMTP server správně nakonfigurováný je velice snadné:

# telnet 127.0.0.1 25
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
S:220 radbook.twobears.cz ESMTP Postfix
C:helo dobryden
S:250 radbook.twobears.cz
C:mail from:kde@nic.cz
S:250 Ok
C:rcpt to:tu@nic.cz
S:554 <tu@nic.cz>: Recipient address rejected: Access denied

Postfix implicitně přijímá poštu z a pro následující případy: klientovo IP odpovídá $mynetworks, klientova doména odpovídá $relay_domains a nebo adresát odpovídá $relay_domains. Toto chování se dá měnit parametrem smtpd_recipient_restrictions.

Jako další vhodné zabezpečení umí Postfix (pomocí TLS patche) používat protokoly SSL a TLS. Tyto potom umožňuje používat jak pro spojení, kde vystupuje jako SMTP server, tak i pro spojení, kde se nachází v pozici SMTP klienta. Toto nastavení je velice vhodné v prostředích, kde znáte všechny SMTP servery, se kterými váš Postfix komunikuje, a všechny podporují SSL/TLS. Druhá možnost využití je při kombinaci s SMTP autentifikací.

Postfix lze nastavit tak, aby od určitých klientů požadoval autentifikaci jménem a heslem. Teprve až po úspěšné kontrole jména a hesla jim povolí relaying. Toto je velmi elegantní řešení problému cestujících klientů (v terminologi IPv6 nazývaných Road Warriors). Jedná se o klienty, kteří se k SMTP serveru připojují od různých poskytovatelů, a tedy s různými IP. Dříve se tento problém řešil pomocí "technologie" POP before SMTP, kde se uživatel nejprve musel připojit na POP3 server, tam se autentifikovat a potom se pro SMTP server automaticky nastavilo časové okno, ve kterém je pro dané IP povolen relaying. Toto řešení využívá faktu, že většina poštovních klientů stahuje novou poštu a odesílá napsané zprávy v jedné dávce (je ovšem potřeba, aby klient poštu nejprve stáhnul a až po té odeslal). Dnes vzrůstá obliba mobilních zařízení a POP before SMTP přestává postačovat. Proto je možné Postfix nastavit, aby příchozí klienty autentifikoval pomocí knihovny SASL. V kombinaci s tímto je pak velmi vhodné používat zabezpečení protokolu pomocí SSL/TLS.


Srovnání s "konkurencí"

Nebudu zde psát, že MTA Postfix nemá konkurenci, protože by to nebyla pravda. V dnešní době se hojně používají MTA exim,Postfix,qmail a sendmail (v abecedním pořádku).
S MTA exim žádné zkušenosti nemám, takže srovnávat nemohu.
Největším "soupeřem" Postfixu je qmail z dílny Dana Bernsteina. Dan je poměrně neortodoxní softwareový inženýr a jeho programy jsou poměrně "těžko stravitelné". Qmail je bezpochyby značně kvalitní program, o čemž svědčí i fakt, že jeho autor vypsal odměnu 500 dolarů za odhalení první bezpečnostní chyby v programu (stejně jako u djbdns). Ovšem konfigurace a instalace již není standardní; Dan nepoužívá skript configure, používá vlastní systém spouštění a zastavování daemonů, často používá vlastní formáty souborů a věci, které se mu nelíbí, neimplementuje (např. podporu pro IPv6).
Program sendmail je velkotonážní SMTP server, který mívá problémy s bezpečností. Ani jeho konfigurace není jednoduchá a každý Unixový Guru se Guruem stává až ve chvíli, kdy zvládné konfiguraci sendmailu :)
Velikou výhodou Postfixu jsou instalace, kde je potřeba používat SMTP server, ale není to prioritní věc (domácí firewall, pracovní stanice,...). Nainstalovat a nakonfigurovat Postfix je otázka pár desítek minut, ale zároveň si tím nezavíráme dveře k případnému rozšíření... Postfix je ovšem možno nasadit i ve velmi zatížených provozech, ale zde asi budeme porovnávat více kandidátů a budeme mít poměrně různorodé a specifické požadavky.


Odkazy

www.postfix.org
Postfix SMTP AUTH (and TLS) HOWTO
SRPM balíčky od Tuomo Soiniho RFC 821
RFC 1651