Propojení Postfixadminu s Postfixem a Dovecotem a autentifikace virtuálních účtů

Správa linuxového serveru: Propojení Postfixadminu s Postfixem a Dovecotem a autentifikace virtuálních účtů

Minulý díl načal tvorbu řešení správy více domén na poštovním serveru za asistence webové aplikace Postfixadmin. V tomto dílu se dozvíte, jak Postfixadmin propojit s Postfixem a Dovecotem a jak vyřešit SMTP autentifikaci virtuálních účtů.

Postfixadmin

Problematika instalace a konfigurace nástroje Postfixadmin byly probrány v minulém dílu. Pokud jste jej tedy nečetli, začněte určitě jím.

Propojení s Postfixem

Propojení s Postfixem je popsáno v /usr/share/doc/postfixadmin/DOCUMENTS/POSTFIX_CONF.txt.gz. Doporučuji jej přinejmenším konzultovat, zejména pokud používáte novější verzi Postfixadminu. Tento návod by měl být aktuální pro verzi 2.3.5 a pro Debian Squeeze.

Do /etc/postfix/main.cf vložte následující řádky:

virtual_mailbox_domains = proxy:mysql:/etc/postfix/sql/mysql_virtual_domains_maps.cf
virtual_alias_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf
virtual_mailbox_maps =
   proxy:mysql:/etc/postfix/sql/mysql_virtual_mailbox_maps.cf,
   proxy:mysql:/etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf
virtual_mailbox_base = /var/mail/vmail
virtual_minimum_uid = 8
virtual_transport = virtual
virtual_uid_maps = static:8
virtual_gid_maps = static:8
local_transport = local:$myhostname virtual
local_recipient_maps = proxy:unix:passwd.byname $alias_maps $virtual_mailbox_maps

Pozor! Domény spravované Postfixadminem nesmí být uvedené v mydestination! Konfigurace naznačená výše by vám měla umožnit používat jak lokální doručování pro domény uvedené v mydestination, tak virtuální doručování pro virtuální účty domén spravovaných Postfixadminem.

Pokud se na obsah výše uvedených proměnných podíváte podrobněji, zjistíte, že se tato konfigurace odkazuje na řadu dalších souborů, které vytvoříte níže, a to v adresáři /etc/postfix/sql. Na názvech i cestách k jednotlivým souborům nezáleží, avšak musí se shodovat s názvy a cestami uvedenými v konfiguraci Postfixu.

Princip tohoto nastavení spočívá v definici databázových přístupových údajů a jednotlivých databázových dotazů, kterými Postfix získá potřebné informace. To samozřejmě znamená, že od této chvíle bude fungování Postfixu závislé na dostupnosti databázového serveru.

Vytvořte soubor /etc/postfix/sql/mysql_virtual_alias_maps.cf s následujícím obsahem:

user = uzivatel
password = heslo
hosts = localhost
dbname = nazev_databaze
query = SELECT goto FROM alias WHERE address='%s' AND active = '1'

Proměnné userpassword a dbname si upravte podle toho, jak jste nastavili Postfixadmin při instalaci. Pokud nevíte, podívejte se do souboru /etc/postfixadmin/dbconfig.inc.php, kde jsou správné hodnoty uvedeny. Tyto hodnoty je třeba upravit v každém souboru!

Vytvořte soubor /etc/postfix/sql/mysql_virtual_alias_domain_maps.cf s následujícím obsahem:

user = uzivatel
password = heslo
hosts = localhost
dbname = nazev_databaze
query = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('%u', '@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

Opět si přizpůsobte výše uvedené proměnné. Poté vytvořte soubor /etc/postfix/sql/mysql_virtual_alias_domain_catchall_maps.cf s následujícím obsahem:

user = uzivatel
password = heslo
hosts = localhost
dbname = nazev_databaze
query  = SELECT goto FROM alias,alias_domain WHERE alias_domain.alias_domain = '%d' and alias.address = CONCAT('@', alias_domain.target_domain) AND alias.active = 1 AND alias_domain.active='1'

Nezapomeňte si upravit proměnné. Následně vytvořte soubor /etc/postfix/sql/mysql_virtual_domains_maps.cf s následujícím obsahem:

user = uzivatel
password = heslo
hosts = localhost
dbname = nazev_databaze
query          = SELECT domain FROM domain WHERE domain='%s' AND active = '1'

Po úpravě proměnných vytvořte soubor /etc/postfix/sql/mysql_virtual_mailbox_maps.cf s následujícím obsahem:

user = uzivatel
password = heslo
hosts = localhost
dbname = nazev_databaze
query = SELECT maildir FROM mailbox WHERE username='%s' AND active = '1'

Po úpravě proměnných vytvořte soubor /etc/postfix/sql/mysql_virtual_alias_domain_mailbox_maps.cf s následujícím obsahem:

user = uzivatel
password = heslo
hosts = localhost
dbname = nazev_databaze
query = SELECT maildir FROM mailbox,alias_domain WHERE alias_domain.alias_domain = '%d' and mailbox.username = CONCAT('%u', '@', alias_domain.target_domain) AND mailbox.active = 1 AND alias_domain.active='1'

Následně restartujte Postfix:

service postfix restart

Abyste propojení otestovali, vytvořte v Postfixadminu doménu a poštovní schránku. Pokud neodškrtnete příslušné políčko, měl by být na danou adresu automaticky odeslán uvítací e-mail, který de facto danou poštovní schránku vytvoří (a to ve /var/mail/vmail). Můžete zkontrolovat, zda se příslušné adresáře vytvořily a zpráva přistála v příslušném maildiru v tomto umístění (maildir je tvořen třemi adresáři, curnew a tmp, jednotlivé e-maily jsou uloženy v samostatných souborech, nové e-maily směřují do adresáře new). Náhledem do logu (/var/log/mail.log) můžete odhalit problém, pokud se to Postfixu nepodaří. Doplním, že při ladění urychlíte opětovné pokusy o doručení příkazem pro vyprázdnění poštovní fronty:

postqueue -f

Propojení s Dovecotem

Nejprve upravte soubor /etc/dovecot/dovecot.conf následujícím způsobem:

mail_location = maildir:/var/mail/vmail/%u/

auth default {
  mechanisms = plain
  userdb sql {
    # Path for SQL configuration file, see doc/dovecot-sql-example.conf
    args = /etc/dovecot/dovecot-mysql.conf
  }
  passdb sql {
    # Path for SQL configuration file, see doc/dovecot-sql-example.conf
    args = /etc/dovecot/dovecot-mysql.conf
  }
}

first_valid_uid = 8

Při úpravách berte na vědomí, že konfigurační soubor Dovecotu, dovecot.conf, je hojně komentovaný a obsahuje prakticky všechny výše uvedené konstrukce a proměnné, ovšem s jinými hodnotami. Proto si dejte pozor, abyste někde něco neměli definované dvakrát. Následně vytvořte soubor /etc/dovecot/dovecot-mysql.conf s následujícím obsahem:

connect = host=localhost dbname=nazev_databaze user=uzivatel password=heslo
driver = mysql
default_pass_scheme = MD5-CRYPT

password_query = SELECT username AS user,password FROM mailbox WHERE username = '%u' AND active='1'
user_query = SELECT maildir, 8 AS uid, 8 AS gid FROM mailbox WHERE username = '%u' AND active='1'

I zde je třeba provést úpravu proměnných dbnameuser a password hodnotami specifikovanými v /etc/postfixadmin/dbconfig.inc.php. Povšimněte si části dotazu user_query, který obsahuje hodnoty UID a GID, pod kterými se má přistupovat k poště. Číslo 8 odpovídá uživateli a skupině mail v distribuci Debian. Aby Dovecot s takovým UID neodmítl pracovat, je třeba uvést stejné nebo nižší číslo v proměnné first_valid_uid(viz výše).

SMTP autentifikace a virtuální účty

Jelikož pro SMTP autentifikaci nejspíše využíváte SASL a povolujete vzdálený přístup k SMTP serveru prostřednictvím permit_sasl_authenticated v nastavení Postfixu (viz dřívější díly), výše uvedené úpravy vám neumožní odesílat poštu z virtuálních účtů (autentifikace vám selže). I pro tuto záležitost existuje řada možných řešení. Já uvedu řešení spočívající v autentifikaci prostřednictvím lokálního IMAP serveru. Upravte /etc/default/saslauthd následujícím způsobem:

MECHANISMS="rimap"
MECH_OPTIONS="localhost"
OPTIONS="-c -r -O localhost -m /var/spool/postfix/var/run/saslauthd"

A ještě upravte /etc/postfix/sasl/smtpd.conf, takto:

pwcheck_method: saslauthd
saslauthd_path: /var/run/saslauthd/mux
log_level: 3
mech_list: PLAIN LOGIN
auxprop_plugin: rimap

Poté restartujte saslauthd a postfix:

service saslauthd restart
service postfix restart

Nyní vyzkoušejte odeslat e-mail z některé z virtuálních schránek. Připomínám, že jako login je třeba použít celý e-mail včetně doménového jména, heslo pak odpovídá heslu dané poštovní schránky.