E-mail server s Postfix, Dovecot a PostgreSQL

Po několika letech jsem byl znovu vystaven útrapám s nastavováním e-mailového serveru na Linuxu. Ne, že by se jednalo o nějak vyjímečně složitou záležitost, ale triviální problém to také není, a proto bych svůj postup chtěl zapsat - pro sebe i pro ostatní, kteří někdy někde budou muset nastavovat programy Postfix a Dovecot v součinosti s databází PostgreSQL.

Úvod

V minulosti jsem se pokusil celý instalační proces automatizovat, ale výsledná aplikace se nedá považovat za úspěch. Jedná se o Ruby on Rails aplikaci, která pomocí knihovny pro manipulaci s operačním systémem, spravuje nastavení, uživatele a přesměrování e-mailového serveru. Aplikace by teoreticky měla fungovat na většině linuxových distribucí, ale ty se často mění, takže vyladit a udržovat funkční instalační rutiny zabírá hodně času. Rozhodl jsem se vývoj na projektu zastavit a vyjma architektury serveru jsem jej při práci nepoužil.

Avšak i architekturu jsem malinko změnil. Původní je popsána v mé diplomové práci s názvem Řešení e-mailového serveru a aplikace pro jeho správu. Nová architektura by se nákresem dala vyjádřit asi takto:

-smtp--> [Postfix] -smtp--> [DSPAM] -smtp--> [Postfix] -lda--> [DOVECOT](Mailbox)
      |
     DKIM

Jedná se tedy o mnohem jednodušší architekturu. Rozdíl spočívá v odstranění Amawis a Spamassasin; zůstává jen Dspam, který reinjektuje Postfix. Změnilo se také databázové schéma, jelikož server má být součástí většího systému, kde by mělo fungovat jediné přihlášení napříč všemy systémy, což popíšu dále v textu.

Postup nastavení e-mailového serveru

Je zřejmé, že server se skládá z několika komponent, které je potřeba nainstalovat a nastavit v operačním systému. Já jsem jako OS použil Debian Wheezy, ale obecně lze postup a především konfigurační soubory použít pro jakýkoliv Linux/Unix. Postupoval byl následovný: Nebudu zde popisovat, jak jsem k jednotlivým konfiguracím dospěl, jen vystavím konfigurační soubory komponent a zmíním důležité věci. Informací ohledně e-mailových serverů je na Internetu dostatek, hlavně v angličtině. Nepovažuju konfiguraci za dokonalou, ale každopádně funguje a pro zajištění funkční pošty pro několik virtuálních domén docela stačí.

Instalace programů na Debian

Debian je jedna z nejrozšířenějších linových distribucí na serverech a v repozitářích má velké množství balíčků, které ovšem ve stabilním vydání nemusí být nejaktuálnější. Naštěstí všechny programy, které e-mailový server podle návrhu vyžaduje jsou v repozitářích přítomny, přestože některé (Dovecot > 2.0) v jsou jen v tzv. backports repozitářích.

Přidání backports repozitářů na Debian Wheezy je jednoduché:

echo "deb http://http.debian.net/debian wheezy-backports main" >> /etc/apt/sources.list
apt-get update

Zde ještě poznámka ohledně databáze. Pokud chcete, aby Postgre databáze byla na stejném stroji jako zbytek systému, doporučuju Vám nainstalovat nejnovější verzi, která ovšem není obsažena v repozitářích Debianu a opět musíte upravit /etc/apt/sources.list, abyste ji mohli nainstalovat (podrobnosti v angličtině). Já reálně používám dedikovaný databázový server, takže jsem instaloval jen PostgreSQL klienta.

Nyní lze instalovat programy. Pro instalaci Postfix, Dspam a OpenDKIM jako superuživatel spusťte:

apt-get install build-essential postfix postfix-pgsql postfix-pcre
apt-get install dspam libdspam7-drv-pgsql opendkim
a následně také nainstalujte Dovecot, ovšem z backports:
apt-get -t wheezy-backports install dovecot dovecot-dev dovecot-antispam dovecot-lmtpd dovecot-pgsql

Protože správce balíčků Apt automaticky instaluje závislé balíčky, měly by nyní být všechny komponenty připraveny pro konfiguraci.

Databázové schéma

Databáze má 3 tabulky, kam se ukládají data o virtuálních doménách, uživatelích a přesměrování. Kromě správného nastavení přístupu k databázi (soubor pg_hba.conf), se konfigurace vzdálené databáze nijak neliší od konfigurace lokálně nainstalované databáze. Dokonce vlastně ani není co nastavovat, stačí vytvořit databázi pomocí tohoto SQL skriptu. Jen nahraďte "xxx" za jméno databázového uživatele, který bude vlastnit databázi a k tomu vytvořte databázové uživatele "postfix" a "dovecot", kteří budou mít omezená přístupová práva k databázi tak, jak definuje uvedený SQL skript.

Nastavení programu Postfix

Tady už to začíná být zajímavější. Postfix v systému slouží jako MTA, takže přijímá a odesílá poštu tj. implementuje SMTP protokol. Postfix je tvořen z několika malých programů, které jsou řízeny programem master. Minimálně je potřeba nastavit program master (soubor /etc/postfix/master.cf) a pak způsob, jakým se budou e-maily přijímat a odesílat (soubor /etc/postfix/main.cf). Protože používáme databázi, musí se nakonfigurovat i přístupy k databázi.

Zde jsou hotové main.cf a master.cf. Nutno zmínit, že autentizace uživatele pro odeslání e-mailu se provádí pomocí Dovecot a že server vynucuje zabezpečené připojení, takže je potřeba vygenerovat certifikáty (viz dále v textu). Postfix při příjmu bude kontrolovat některé DNS záznamy domény a v případě potřeby lze nastavit, že bude kontrolovat, jestli se odesílatel nenachází na veřejně přístupných blacklistech.

Nastavení přístupu k informacích uloženým v databázi je celkem přímočaré - jedná se o sadu souborů, kde jsou vždy přístupové údaje k databázi a dotaz, který se má vykonat. Jedná se o soubory , , , a , kde stačí změnit přístupové údaje a vše by mělo fungovat.

Nastavení programu Dovecot

Dovecot má v systému dvě důležité funkce. Jednak se stará o doručování a vybírání e-mailových zpráv, tedy vykonává roli LDA a implementuje protokoly POP3 a IMAP, a jednak se pro ostatní služby stará o autentizaci uživatele, např. při odesílání zpráv pomocí protokolu SMTP (pokud tedy nechcete, aby zprávy přes server mohl posílat kdokoliv).

Co se týče LDA jsou v konfiguračním souboru dovecot.conf definovány výchozí složky uživatelovy schránky, povolené protokoly pro výběr pošty včetně TCP portů a systémový uživatel, který má přístupová práva ke schránkám virtuálních uživatelů. Dovecot prakticky využívá několik systémových uživatelů, především uživatele dovecot a vmail. Při instalaci balíčku na Debianu je uživatel dovecot vytvořen automaticky, ale uživatel vmail ne, takže je nutno ho vytvořit. V tutoriálech se tomuto uživateli často přiřazuje UID 5000, takže tak činím i zde. groupadd -g 5000 vmail useradd -g vmail -u 5000 vmail -d /var/vmail mkdir /var/vmail chown vmail:vmail /var/vmail

Autentizace se provádí na základě SQL dotazu 'passwordquery', který je umístěn v souboru dovecot-sql.conf.ext, kde je také definováno schéma pro uložení hesla. Dovecot podporuje několik schémat; já jsem vybral SHA512-CRYPT, protože pak není náročné implementovat ukládání uživatelů v takřka jakémkoliv jazyce (viz program *Rmailsmini* dále).

Za zmínku ještě stojí nastavení některých pluginů v souboru souboru dovecot.conf. Plugin quota zde má nastaveny výchozí limity velikostí schránek, které ale jdou individuálně přepsat pomocí hodnot v databázové tabulce boxes. V kombinaci s DSPAMem je užitečný plugin antispam, jenž automaticky učí DSPAM rozpoznávat spam jednoduchým přesunem zpráv do složky Spam.

Nastavení antispam filtru DSPAM

Zatím jedinou zbraní proti spamu v systému je program DSPAM. Jedná se o adaptivní filtr, což znamená, že rozpoznávat spam jej uživatel musí naučit a dále trénovat, avšak program by měl být velmi rychlý a zároveň velmi přesný.

Pro ukládání dat je doporučena databáze PostgreSQL, což se hodí do konceptu systému. Nejsnadnější nastavení je vytvořit uživatele dspam s přístupem k databázi dspam a importovat tabulky pomocí SQL skriptů, které jsou na Debianu uloženy v /usr/share/doc/libdspam7-drv-pgsql/sql/. psql -U dspam -d dspam > /usr/share/doc/libdspam7-drv-pgsql/sql/*.sql Přístupové údaje k databázi pro DSPAM jsou v souboru pgsql.conf.

DSPAM v systému běží jako démon, který je vyvoláván především programem Postfix - při každém příchozím e-mailu. Po kontrole je e-mail zaslán zpět Postfixu. Původně jsem zamýšlel e-maily po kontrole rovnou předávat k doručení programu Dovecot, ale to se mi nepodařilo rozchodit. Současné nastavení využívá rozšíření Postfixu pro regulární výrazy PCRE. Regulární výraz je v uložen v souboru /etc/postfix/dspamfilteraccess.

Generování kryptografických klíčů

Testování protokolů SMTP a IMAP telnetem

Nastavení DKIM a SPF

Zabezpečení systému

Závěr

Navazující článek
Roundcube webmail hosting zdarma na službě OpenShift
V přípravě

Pomocí tohoto návodu budete moci provozovat vlastního webmail klienta, oblíbený program Roundcube, zdarma včetně databáze na cloudové službě OpenShift.