Mailserver - Nastavení databáze
Aby to bylo přehledné a případně šla udělat nějaká aplikační aministrace, použijeme pro uchovávání dat databázi. V databázi tedy budou informace o doménách, které budeme znát, jednotlivé uživatele, kteří existují, aliasy k jejich schránkám a další. Sám jsem použil jako databázi postgres; přiložený dump databáze je z postgresu. Bez problémů lze použít také MySQL, na rozdíly se dále v konfiguraci pokusím upozornit. Při vytváření databáze - v MySQL jde použít datový typ enum, který postgres neumí; místo něj mám nadefinované jednotlivé kontroly pro hodnoty. Druhým rozdílem je, že v postgresu se u datového typu boolean používají jako hodnoty 't' a 'f' (jako true a false). MySQL čistě boolean neumí, obvykle se nahrazuje malým číslem a pak se tedy porovnává '0' a '1'.
Struktura databáze
V následujících odstavcích bude podrobně popsána celá struktura použité databáze. Pro případné urychlení jsem také udělal dump struktury z postgresql databáze (dump je shodný s tímto; pro vlastní použití ale lze jméno schématu a případně uživatelů napravit přes najít/nahradit).
Tabulka: postfix_access
V této tabulce jsou víceméně definovány pravidla, na základě kterých se naše MTA bude se vzdáleným vůbec bavit či ne. Přístup se definuje v políčku access, kde možné hodnoty jsou OK, REJECT nebo libovolná regulérní odpověď (třeba 550 nepujde to). Pokud je v políčku type vepsáno recipient, porovnává se obsah políčka se source s tím, co naše MTA obdrželo jako adresáta pro mail. Pokud tedy víme, že náš MTA bude přijímat e-maily z domény spamik.cz, vložíme záznam s type recipient, source spamik.cz a access OK. V source může být také e-mailová adresa.
Type sender funguje obdoným způsobem, ale porovnává se to s tím, co naše MTA obdrželo jako odesílatele e-mailu. Pokud nás tedy obtěžuje jedna e-mailová adresa, můžeme jí takto zablokovat (source je daná e-mailová adresa, type sender, access REJECT).
Type client se týká domény, odkud se nějaké jisté MTA na nás připojuje. Zadáním access REJECT, type client a source jouda.com zajistíme, že MTA na jouda.com nám nic nepředá.
Název sloupce | Datový typ | Popis |
---|---|---|
id | integer (default hodnota ze sekvence) | Číselný identifikátor |
source | varchar (128) | Hodnota, která se porovnává |
access | varchar (128) | Odpověď, která nastane při shodě (OK, REJECT, případně jiná odpověď) |
type | varchar (128) | Typ hodnoty, která se porovnává |
Tabulka: postfix_transport
Tato tabulka specifikuje, jak budou doručovány e-maily pro jednotlivé domény. Způsob doručování je ve sloupečku destination. My se budeme zabývat a používat hodnotami virtual:, local: a dovecot:
virtual: značí, že e-maily pro tuto doménu se budou doručovat přímo virtuálním uživatelům. Tedy postfix po tomto si vyhledá příjemce v seznamu virtuálních mailboxů (což v našem případě je databáze), najde si cestu k jeho mailboxu a tam zprávu doručí.
local: řekne postfixovi, že e-maily z této domény patří lokálním uživatelům - tedy postfix nehledá cestu k jejím mailboxům v databázi, ale doručí je tam, kam je to pro lokální systémové uživatele zadané (obykle někam do jejich home složky).
dovecot: znamená, že mail bude doručen přes delivery agenta dovecotu (MDA). Postfix tedy pouze zjistí, jaká je pravá e-mailová adresa adresáta (v případě, že e-mail má jít na alias, tak postfix zjistí, kam alias směřuje) a předá to LDA a ten se již dál stará o doručení pošty.
Název sloupce | Datový typ | Popis |
---|---|---|
id | integer (default hodnota ze sekvence) | Číselný identifikátor |
domain | varchar (128) | Doména, pro kterou pravidlo platí |
destination | varchar (128) (omezen na local:, virtual: a dovecot:) | Způsob zpracování e-mailů v této doméně |
Tabulka: postfix_users
Nejdůležitější tabulka, nese záznamy o virtuálních uživatelích, podle kterých potom postfix určuje, kde má daný uživatel mailbox a kam má zprávu doručit. Tabulku také používá i dovecot pro autorizaci uživatelů.
Název sloupce | Datový typ | Popis |
---|---|---|
id | integer (default hodnota ze sekvence) | Číselný identifikátor |
varchar (128), unikátní | E-mail zadaného uživatele, zároveň slouží jako přihlašovací jméno | |
password | varchar (128) | Heslo daného uživatele; z bezpečnosti sem budeme dávat pouze otisk jeho hesla |
name | varchar (255) | Jméno daného uživatele (jen pro přehlednost) |
uid | integer | UID uživatele v systému určeného pro doručování mailů virtuálním uživatelům (viz dále v návodu; default hodnotu doporučuji dát jako uid daného vytvořeného uživatele) |
gid | integer | To samé jako uid, ale platí pro GID dané skupiny |
maildir | varchar (255) | Relativní cesta k samotnému maildiru daného uživatele od base složky pro doručování e-mailů virtuálním uživatelům (pokud budeme mít maily v /home/mails a uživatel jarda bude mít maildir v /home/mails/jarda/.maildir/, bude v tomto sloupci jarda/.maildir/). Lomítko na konci je povinné; značí, že se jedná o maildir! |
quota | varchar (64) | Omezení velikosti schránky daného uživatele |
access | boolean | Značí, zda má uživatel přístup pro vybírání schránky |
postfix | boolean | Značí, zda je schránka aktivní pro doručování zpráv |
homedir | varchar (255) | Cesta do domovského adresáře virtuálního uživatele; ne přímo do maildiru (v příkladě výše by to bylo /home/mails/jarda) |
admin | boolean | Zatím nevyužitá hodnota; bude fungovat pro web managment uživatelů, který se pokusím napsat a označí tohoto uživatele jako správce mailserveru |
domainadmin | boolean | Podobně jako admin; tato hodnota označí uživatele jako správce dané domény |
Tabulky postfix_alias a postfix_virtual
V těchto tabulkách se specifikují aliasy. Podstatné jsou dva sloupce - v jednom se specifikuje daný alias a v druhém umístění, kam se má přesměrovat (třeba cílová e-mailová adresa). V tabulce postfix_virtual jsou aliasy pro virtuální uživatele (tedy pro ty, kteří jsou uvedeni v postfix_users), tabulka postfix_alias je pro lokální účty.
Název sloupce | Datový typ | Popis |
---|---|---|
id | integer (default hodnota ze sekvence) | Číselný identifikátor |
alias | varchar (128) | Daný alias, který se bude přesměrovávat |
destination | varchar (128) | Umístění, kam se email přepošle (např. lokální uživatel) |
Název sloupce | Datový typ | Popis |
---|---|---|
id | integer (default hodnota ze sekvence) | Číselný identifikátor |
varchar (128) | E-mail aliasu, který se přesměruje | |
destination | varchar (128) | E-mail skutečné schránky, kam alias směřuje |
Tabulky postfix_trash a postfix_email
Postfix_trash slouží pro zapínání doménového koše. V tabulce se uvede doména, pro kterou má být koš zaplý a e-mail, kam všechny budou chodit.
V tabulce e-mail se uvádějí výjimky, které nemají skončit v koši. Pokud tedy například zapnu doménový koš na doméně spamik.cz a budu chtít, aby e-maily z admin@spamik.cz skončily někde jinde, než všechny ostatní z koše, uvedu admin@spamik.cz do této tabulky.
Název sloupce | Datový typ | Popis |
---|---|---|
id | integer (default hodnota ze sekvence) | Číselný identifikátor |
varchar (128) | Doména, na které se zapne doménový koš (ve formátu @domena.neco) | |
destination | varchar (128) | Adresa, kam se maily přesměrují |
Název sloupce | Datový typ | Popis |
---|---|---|
id | integer (default hodnota ze sekvence) | Číselný identifikátor |
varchar (128) | E-mailová adresa, která nespadá do doménového koše |
Uživatelé v databázi a jejich práva
Na všechno, co potřebujeme, se dá vystačit s jedním uživatelem. Osobně to ale nedoporučuji; takhle se dají případně i snáze hledat problémy. Vytvořil jsem uživatele dva, jednoho jsem pojmenoval postfix, druhého dovecot. Jak jejich jména napovídají, uživatel postfix bude používat MTA, dovecot zase POP3/IMAP server. Co se týče jejich oprávnění; obou uživatelům stačí, když budou smět dělat SELECTy, nic jiného nevyžadují. Konkrétně postfix by měl mít práva SELECT na všechny tabulky, dovecotu stačí jenom na tabulku postfix_users.