Mailserver - Dovecot

K tomu, aby jsme náš nový mailserver mohli začít používat, nám chybí poslední - stahování zpráv. Jako poslední důležitý krok tedy provedeme instalaci IMAP/POP3 serveru Dovecot.

Co po něm budeme přesně chtít? Aby si pustil svůj POP3 a IMAP server, dokázal používat SSL certifikát pro šifrovaná spojení, aby použil pro přihlašování tabulku z databáze postfix_users, doručoval svým delivery agentem to co má a stačil to filtrovat a navíc ještě akceptoval nastavení quoty a tedy aby nepřijímal e-maily, pokud má uživatel plnou schránkou.

LDA (dovecotí delivery agent) používá pro filtrování jazyk Sieve. Sieve skripty (pokud není specifikováno jinak) se uloží v homu uživatele do .dovecot.sieve (a po prvním spuštění se přeloží). Nicméně, pokud chceme umožnit uživatelům, aby si filtr nastavili sami, tak není vždy zrovna dobré umožnit jim přístup na filesystem serveru. Od toho dovecot umí ještě cosi s názvem managesieve. Dovecot tedy poslouchá na portu 2000 a je schopný přes síť pracovat s tímto souborem. Jinak na tvorbu, úpravu a i uploadování těchto skriptů je například plugin do Thunderbirdu a zvládá jej i Ingo (součástí horde, které potom použijeme na webmail).

Při instalaci dovecotu je potřeba tedy dbát na to, aby měl podporu SSL, Sieve, managesieve a Postgres (MySQL). Při psaní návodu byla použita verze 1.1.7-r1 (tehdy jako stable). S novějšími verzemi se může konfigurace mírně lišit (podle toho co jsem tak četl, tak například verze 1.2+ má jiný plugin pro sieve; viz dokumentace dovecotu).

dovecot.conf

Hlavní konfigurační soubor dovecotu může vypadat třeba takto:

base_dir = /var/run/dovecot/
protocols = imap imaps managesieve pop3 pop3s
listen = *, [::]
disable_plaintext_auth = no
shutdown_clients = yes
ssl_cert_file = /etc/ssl/cert.pem
ssl_key_file = /etc/ssl/cert.key
ssl_ca_file = /etc/ssl/root.crt
ssl_verify_client_cert = no
login_dir = /var/run/dovecot/login
login_chroot = yes
login_user = dovecot
login_process_size = 64
mail_location = maildir:~/.maildir
auth_executable = /usr/libexec/dovecot/dovecot-auth
auth_process_size = 256
protocol imap {
mail_plugins = quota imap_quota
}
protocol pop3 {
mail_plugins = quota
}
protocol lda {
postmaster_address = admin@spamik.cz
mail_plugins = cmusieve quota
mail_plugin_dir = /usr/lib/dovecot/lda
sendmail_path = /usr/lib/sendmail
auth_socket_path = /var/run/dovecot/auth-master
}
protocol managesieve {
listen = *:2000
login_executable = /usr/libexec/dovecot/managesieve-login
mail_executable = /usr/libexec/dovecot/managesieve
managesieve_max_line_length = 65536
sieve_storage = ~/sieve
sieve = ~/.dovecot.sieve
managesieve_implementation_string = dovecot
}
auth default {
mechanisms = plain
passdb sql {
args = /etc/dovecot/sql.conf
}
userdb sql {
args = /etc/dovecot/sql.conf
}
user = root
socket listen {
master {
path = /var/run/dovecot/auth-master
mode = 0600
user = mailsystem
group = mailsystem
}
client {
path = /var/spool/postfix/private/auth
mode = 0660
user = postfix
group = postfix
}
}
}
plugin {
quota = maildir: User quota
quota_rule = *:storage=0
}

Komentáře:

  • protocols: jaké protokoly budou funkční (imaps a pop3s jsou zabezpečené varianty)
  • listen: na jakých síťových rozhraních bude dovecot poslouchat (toto nastavení znamená na všech, ten : tvar je pro IPv6)
  • ssl_cert_file, ssl_key_file, ssl_ca_file jsou obvyklá nastavení k SSL cerifikátům. Dovecot umí použít i zašifrovaný klíč k certifikátu a dá se mu zde napsat k němu heslo; nám je to ovšem stejně prd platné, když to neumí postfix
  • mail_location určuje, kde je mailbox daného uživatele. V tomto případě je nastaveno, že je v jeho homu ve složce maildir; samotný home uživatele se pak zjišťuje z databáze.
  • mail_plugins znamená, jaké pluginy budou pro daný protokol zapnuty. U LDA (delivery agenta) se navíc zapíná cmusieve (Poznámka: U Dovecotu od verze 1.2 se místo implementace cmusieve používá sieve. Základní konfigurace jako zde je stejná, pouze se liší název uvedeného pluginu!), tedy analyzátor sieve skriptů (v novějších verzích dovecotu, které momentálně nejsou jako stable, se patrně dá použít i jiný plugin, viz dokumentace Dovecotu).
  • sieve_storage a sieve: tato část se týká samotné uložení filtrovacích skriptů. Sieve storage oznařuje, kde je úložiště všech skriptů, v tomto případě jej tedy strkáme do homu uživatele do složky sieve. Sieve potom odkazuje na soubor se skriptem, který se vykonává. Managesieve to řeší tak, že na dané místo udělá symlink na uložený sieve skript.
  • passdb a userdb: passdb specifikuje databázi hesel, userdb potom databázi, kde se o uživateli získává zbytek informací (home složka atd). V obojím je odkaz na jiný soubor, který také budeme muset napsat (viz dále).
  • client { ... } - tato část umožňuje autentifikaci uživatelů v postfixu (jelikož náš postfix využívá právě dovecot pro zjišťování údajů)
  • quota_rule je výchozí hodnota pravidla pro quotu; tedy tato hodnota je aplikována v případě, že u uživatele v databázi není specifikováno jinak (jak se hodnota specifikuje je uvedeno v části o obsluze). 0 znamená, že schránka je neomezená.

/etc/dovecot/sql.conf

Poslední konfigurační soubor pro dovecot, je v něm nakonfigurovaný dotaz do databáze pro ověření hesla a zjištění údajů o uživateli. Soubor vypadá takto:

driver = pgsql connect = host=localhost dbname=mailsystem
user=dovecot password=heslo default_pass_scheme = SSHA
password_query = SELECT email AS user, password FROM hellmachine.postfix_users WHERE (email = '%u' AND access = 't')
user_query = SELECT homedir AS home, uid, gid, quota AS quota_rule FROM hellmachine.postfix_users WHERE (email = '%u' AND access = 't')

  • driver: specifikuje použitou databázi, pgsql říká, že se jedná o Postgres, pro MySQL by to bylo například mysql
  • connect: připojovací řetězec, specifikuje se v něm adresa, kde beží databáze, jméno databáze, jméno uživatele a jeho heslo
  • default_pass_scheme: způsob, jakým je uloženo heslo v databázi. Já jsem se rozhodl pro otisk SSHA; ostatní možnosti, které dovecot umí použít, jsou v jeho dokumentaci.
  • password_query: dotaz pro ověření hesla. Dovecot potřebuje jako výstup hodnoty pojmenované jako user a password (proto to AS). %u je nahrazeno jménem uživatele, který se pokouší přihlásit; druhá podmínka zajišťuje, že se přihlásit smí jenom aktivní uživatelé ('t' je jako true, u MySQL není boolean, takže třeba '1')
  • user_query: dotaz pro získání zbytku informací o uživateli. Podmínky platí stejně jako předtím, navíc získáváme hodnoty home (domovská složka tohoto uživatele), uid, gid (UID a GID lokálního uživatele, pod kterým bude provedena manipulace s mailboxem) a quota_rule (přepisuje výchozí quota_rule v konfiguráku; tímto můžeme každému uživateli nastavit quotu jinak).

Komentáře

Díky moc za článok, užitočné informácie díky :)