E-mail server s Postfix, Dovecot a 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ý:- Instalace komponent
- Nastavení PostgreSQL
- Nastavení Postfix
- Nastavení Dovecot
- Nastavení Dspam
- Generování kryptografických klíčů
- Testování protokolů SMTP a IMAP telnetem
- Nastavení DKIM a SPF
- Zabezpečení systému
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.