Aliasy a záložní poštovní server

Správa linuxového serveru: Aliasy a záložní poštovní server

Tento díl osvětlí problematiku aliasů a prozradí vám, jak nastavit záložní poštovní server, který bude vaši poštu přijímat a uchovávat, zatímco bude váš hlavní poštovní server mimo provoz.

Aliasy

Aliasy představují metodu, jak více e-mailových adres směrovat do jediné schránky. Aliasy jsou definované v souboru /etc/aliases, kde jsou již připraveny výchozí aliasy (kupříkladu, dle RFC by každý SMTP server měl přijímat poštu směrovanou na postmaster@domena.tld a jeden z aliasů přeposílá tuto poštu rootovi). Syntax tohoto konfiguračního souboru je velmi jednoduchá:

alias: schranka

Tento záznam doručí poštu směřující na alias@domena.tld do schránky uživatele schranka. Specifikovat můžete ale i více příjemců, takže pokud třeba server spravuje více správců, můžete poštu pro roota posílat každému z nich:

root: michal@example.org, pepa@example.org, radek@example.org

Jste-li zvyklí po úpravě konfiguračního souboru restartovat server a očekávat, že se změna projeví, v tomto případě vás zaskočí mírně neintuitivní chování Postfixu. Pokud totiž provedete úpravu /etc/aliases a pouze restartujete poštovní server, změny se neprojeví. Postfix totiž nepracuje přímo s konfiguračním souborem /etc/aliases, ale s databázovým souborem (/etc/aliases.db), který se z tohoto souboru generuje. A to nikoliv automaticky, ale pouze na pokyn správce, příkazem:

newaliases

Teprve poté sdělte Postfixu, že si má znovu načíst konfiguraci:

service postfix reload

Zde je třeba dodat, že řada seznamů hodnot či pravidel se v Postfixu vytváří a spravuje tímto způsobem, tj. ze souboru si musíte nechat vygenerovat příslušný binární databázový soubor, a to příkazem postmap. Příkaz newaliases slouží pouze pro opětovné vygenerování databáze aliasů, kdežto postmap vám umožňuje vygenerovat databázi z libovolného (vhodně formátovaného) souboru:

postmap /etc/aliases

Nástroj newaliases de facto provede výše zmíněný příkaz.

Záložní poštovní server

Záložní poštovní server se hodí v situaci, kdy váš hlavní poštovní server vypadne. Přirozeně, rozumně nastavené poštovní servery by neměly doručování na váš poštovní server rovnou vzdát, měly by si poštu pro váš server uložit a zkoušet ji doručit, dokud neuplyne timeout (výchozí timeout v Postfixu je 5 dní).

Záložní servery se specifikují pomocí MX záznamů DNS. Každý poštovní server má přiřazenou prioritu, která je daná kladným přirozeným číslem, kde vyšší číslo značí nižší prioritu.

Tvorba záložního serveru může být velmi jednoduchá, ale skýtá jedno velké ale. Samotnou funkčnost záložního serveru lze zrealizovat přidáním domén, pro které chcete dělat záložní server, do proměnné relay_domains v /etc/postfix/main.cf:

relay_domains = example.com, example.org

Přirozeně, tyto domény nesmí být specifikovány v mydestination nebo jinde, kde se nastavuje nějaký typ místního doručování.

A nyní ono veliké ale. Za předpokladu, že je hodnota proměnné relay_recipient_maps prázdná, Postfix bude normálně přijímat veškerou poštu, která bude určena pro výše nastavené domény. Včetně pošty pro uživatele, kteří na hlavním poštovním serveru neexistují. Kdyby se totéž odehrálo na hlavním serveru, ten by prostě ohlásil, že daný uživatel neexistuje a odmítl poštu převzít. Záložní server v této konfiguraci však poštu přijme, a až bude hlavní server opět k dispozici, vygenerují se oznámení o nedoručení, která se rozešlou všem chudákům, které spammeři vyplnili do pole From.

Co s tím dělat? Kromě možnosti, že záložní poštovní server vůbec nebudete používat, zbývá volba relay_recipient_maps (v souboru /etc/postfix/main.cf), která vám umožňuje specifikovat platné uživatele domén, pro které váš server slouží jako záložní:

relay_recipient_maps = hash:/etc/postfix/relay_recipients

Následně vytvořte soubor /etc/postfix/relay_recipients a naplňte ho platnými adresami:

uzivatel1@example.com x
uzivatel1@example.org x
uzivatel2@example.com x
uzivatel2@example.org x

Pokud takový seznam nechcete nebo nemůžete vytvořit a výše popsaný problém vám nevadí, ponechte relay_recipient_maps prázdné, což zapříčiní, že Postfix bude přijímat všechnu poštu. Je-li tato volba neprázdná, bude Postfix odmítat všechno kromě položek v daném seznamu.

Unixové a virtuální poštovní účty

Standardní nastavení Postfixu, které jsem vám ukázal v jednom z minulých dílů, doručuje poštu všem lokálním unixovým účtům. Máte-li tedy uživatele michal a poštovní server na doméně example.com, bude se pošta směřující na michal@example.com doručovat do poštovní schránky uživatele michal. Obsluhuje-li server více domén, bude pošta ze všech domén směřovat na jediný unixový účet (tzn. pošta směřující na michal@example.czmichal@example.org a michal@example.com bude doručena do schránky uživatele michal).

U jedné domény nebo u osobního serveru je tato situace většinou tolerovatelná. Potřebujete-li však doručit poštu směřující na info@example.com a info@example.org do dvou různých schránek, musí přijít na řadu jiné řešení. Možnosti jsou zde v podstatě dvě:

Druhá z variant se často realizuje ve spolupráci s nějakou databází (MySQL, PostgreSQL), kde se uchovávají informace o účtech, zatímco pošta se směruje buď do souborů, nebo také do databáze. Jedná se o komplexní řešení, které bude probráno v jednom z následujících dílů.

První varianta je oproti druhé velmi jednoduchá. Přidejte do /etc/postfix/main.cf následující řádky:

virtual_alias_domains = example.org example.com
virtual_alias_maps = hash:/etc/postfix/virtual

Do proměnné virtual_alias_domains vložte seznam domén, pro které chcete tvořit virtuální aliasy, oddělovačem je zde mezera. Pozor! V žádném případě nesmíte stejnou doménu uvést v virtual_alias_domains a v mydestination! Doména může být vždy jen v jedné z těchto proměnných.

Proměnná virtual_alias_maps obsahuje odkaz na soubor /etc/postfix/virtual, který nyní musíte vytvořit, a to s obsahem podobným tomuto:

info@example.org michal
info@example.com radek
postmaster@example.com root
postmaster@example.org root
@example.com domenovykos

Zde je asi na první pohled vidět, co je jak nastaveno. Maily směřující na info@example.org budou doručeny uživateli michal, zatímco maily směřující na info@example.com budou doručeny uživateli radek. Je zde definován alias pro postmastera, který v případě obou domén doručí poštu rootovi. Příklad obsahuje i doménový koš, tedy zachytávání pošty pro všechny neexistující uživatele, a to v tomto případě do schránky uživatele domenovykos.

Nyní je třeba vygenerovat databázový soubor z /etc/postfix/virtual, což můžete provést nástrojem postmap:

postmap /etc/postfix/virtual

Následně nechte Postfix znovu načíst konfiguraci:

service postfix reload

Doporučuji poté toto nastavení otestovat zasláním testovacích e-mailů. To, jak byla pošta doručována a kam, si můžete ověřit z logů – v Debianu je to /var/log/mail.log.