Mailserver - Postfix

Pokud máme připravenou databázi, přichází čas na nainstalování a nastavení MTA. Já jsem se rozhodl pro postfixe. Při psaní tohoto návodu byl použit postfix verze 2.5.5, takže případně u jiných verzí se může chování se stejným konfigurákem nějak lišit. Postfix musí mít podporu sasl, ssl a postgres (mysql).

Co tedy budeme po našem MTA chtít? Takže zaprvé jej musíme naučit rozeznávat, které maily má akceptovat a na které kašlat. Vysvětlíme mu tedy, jaké e-mailové schránky a aliasy máme, vysvětlíme mu, jak si je má vzít z databáze a jak je má následně doručit. Následně mu také povolíme SSL a povolíme se uživatelům přihlašovat. Příhlášení uživatelé pak můžou e-mail poslat kamkoliv.

Na začátek bude ještě třeba vytvořit si na stroji uživatele, pod kterým budou doručovány e-maily všem virtuálním schránkám. Můžete použít klidně i nějakého existujícího uživatele; já jsem si vytvořil nového. Respektive vytvořil jsem si skupinu mailsystem a následně uživatele mailsystem, který do této skupiny spadá. Tento uživatel musí být vlastníkem daných virtuálních schránek! Vlastník virtuální schránky se konkrétně nastavuje v databázi ve sloupcích uid a gid. Uid a gid uživatele jde zjistit například z /etc/passwd.

V konfiguraci se tedy budeme zabývat hlavně soubory /etc/postfix/main.cf a master.cf. Dále vytvoříme složku /etc/postfix/pgsql a do ní budeme vkládat konfiguraci pro selektování jednotlivých položek z databáze. V případě, že použijete MySQL databázi, nebudou cesty k souborům uvozeny pgsql:/, ale mysql:/.

main.cf

Konfigurák main.cf v mém případě tedy vypadá takto:

  1.  

Konfigurák není uplně nejkratší a některé volby si zaslouží podrobnějí vysvětlění. Takže popořadě:

  • home_mailbox značí, kde se nachází mailbox lokálních uživatelů. Cesta je zadaná relativně od jejich home složky.
  • alias_maps vrací seznam všech aliasů, v tomto případě opět pro lokální uživatele (tedy ty, co v systému skutečně existují). Jako hodnota se uvádí cesta k souboru, kde bude nastavení, jak tyto data dostat z databáze.
  • transport_maps je množina záznamů určující, jak se které e-maily budou doručovat (možnosti jako hledání v lokálních uživatelích, virtuálních, doručení přes MDA apod.)
  • virtual_maps jsou víceméně aliasy pro virtuální uživatele. Navíc je zde přidán doménový koš a e-mailové adresy, které spadají mimo doménový koš.
  • local_recipient_maps určuje platné příjemce mailů, obsahuje tedy aliasy pro lokální uživatele, mailboxy virtuálních uživatelů a seznam lokálních uživatelů
  • virtual_mailbox_base je cesta k místu, kde budou mailboxy virtuálních uživatelů. Kompletní cesta k mailboxu vznikne tím, že se k virtual_mailbox_base přidá část maildir v databázi u uživatele.
  • virtual_mailbox_maps je seznam virtuálních uživatelů
  • virtual_uid_maps a virtual_gid_maps je mapování uid a gidu na skutečného uživatele/skupinu, pod kterým se e-mail doručí. V databázi by měla být v políčkách hodnota uid a gid uživatele, kterého jsme si vytvořili.
  • smtpd_recipient_rescription vyjadřuje na základě jakých podmínek bude e-mail přijat po tom, co je znám adresát. V tomto případě je tedy přijato vše, co postfix zná jako své uživatele, které může doručit; můžou se libovolně posílat e-maily ze síťových rozsahů, které jsou na stroji nastaveny a také autorizovaní uživatelé můžou posílat kamkoliv. Ostatní je odmítnuto
  • myhostname je hostname daného stroje. Od samotné domény pro maily se může lišit (například maily pro doménu spamik.cz můžou chodit na mail s hostname mail.spamik.cz)
  • mydomain je samotná doména
  • message_size_limit je limit velikosti jedné zprávy (doporučuju nastavit nižší číslo než mám já; já to trochu přepísk :) )
  • mailbox_size_limit je limit velikosti schránky
  • virtual_mailbox_limit je limit velikosti virtuální schránky
  • smtpd_sasl_type - hodnota dovecot označuje, že se budeme autorizovat proti dovecotu. Tedy v tomto případě bude autorizace k SMTP serveru naprosto shodná, jako k POP3/IMAP
  • smtpd_sasl_auth_enable povolí autorizaci přes SASL
  • smtpd_use_tls povolí SSL spojení
  • smtpd_tls_key_files - cesta ke klíči, který patří k SSL certifikátu
  • smtpd_tls_cert_file - cesta k našemu SSL certifikátu
  • smtpd_tls_CAfile - cesta ke kořenovému certifikátu certifikační autority, která náš certifikát vydala
  • smtpd_tls_auth_only zajistí, že autorizovat se mohou pouze šifrovaná spojení

master.cf

Pravděpodobně master.cf budete mít nějaký defaultní, nicméně některé věci do něj musíme doplnit. Master.cf může vypadat takto:

  1.  

Dosti pravděpodobně vám budou chybět 3 věci:

  • smtps: bez tohoto řádku postfix nebude poslouchat na zabezpečeném portu 465
  • mailsystem: tato položka je shodná se jménem uživatele, kterého jsme si vytvořili pro virtuální schránky
  • dovecot: specifikuje, jak se budou e-maily předávat delivery agentu od dovecotu

Nastavení databáze

To hlavní bysme měli, nyní ještě musíme nastavit jednotlivé soubory, které jsme uvedli v main.cf, pro přístup do databáze. Poznámka: pokud je v položce table napsáno neco.necojineho, znamená to, že tabulka je pojmenována necojineho a je ve schématu neco. MySQL schémata nemá, tudíž se píše jenom necojineho. Zároveň u MySQL je potřeba dávat pozor na podmínky - MySQL nemá datový typ boolean a pokud tedy použijete třeba tinyint jako tuto hodnotu, nebudete porovnávat 't', 'f', ale třeba '0', '1'!.

Uváděné hodnoty jsou myslím celkem srozumitelné, tak pouze uvedu konfigurační soubory a nebudu je blíže komentovat.

aliases.cf

  1.  

client.cf

  1.  

email.cf

  1.  

recipient.cf

  1.  

sender.cf

  1.  

transport.cf

  1.  

trash.cf

  1.  

virtual-gid.cf

  1.  

virtual-maps.cf

  1.  

virtual-uid.cf

  1.  

virtual.cf

  1.