Poštovní server
s virtuálními účty trochu jinak III
Filtry pro Dovecot
26.8.2011
Tento text je volným pokračováním článku Poštovní server s virtuálními účty trochu jinak
a článku Poštovní server s virtuálními účty trochu jinak II.
Testováno na distribuci GNU/Linuxu openSUSE 11.3. Programy Postfix (verze 2.7) a Dovecot (verze 1.2) používají uživatele vmail
(UID=999) a grupu vmail
(GID=999), viz kapitola "Zvýšení bezpečnosti" v předchozím dílu dole.
Všechny práce provádí root
.
Dovecot jako LDA pro Postfix
Nejprve naučíme Postfix doručovat do schránky pomocí programu Dovecot (Local Delivery Agent). Nejprve upravíme hlavní konfigurační soubor Postfixu:/etc/postfix/main.cf
virtual_transport = dovecot dovecot_destination_recipient_limit = 1A do konfiguračního souboru služeb Postfixu vložíme
/etc/postfix/master.cf
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/lib/dovecot/deliver -f ${sender} -d ${recipient}V konfiguračním souboru pro Dovecot upravíme následující oddíly:
/etc/dovecot/dovecot.conf
... protocol lda { ... postmaster_address = postmaster@domena1.xx # nutno vyplnit! auth_socket_path = /var/run/dovecot/auth-master } ... auth default { ... userdb static { ... args = uid=999 gid=999 home=/var/spool/mail/%u ... } ... socket listen { master { path = /var/run/dovecot/auth-master mode = 0660 user = dovecot group = vmail } client { path = /var/spool/postfix/private/auth mode = 0660 user = postfix group = vmail } } } ...Po změně konfiguračních souborech je nutné znovunačíst konfiguraci pro Postfix:
/etc/init.d/postfix reloadnebo v openSUSE:
rcpostfix reloadA pro Dovecot:
/etc/init.d/dovecot reloadnebo v openSUSE:
rcdovecot reloadNyní by měl Postfix využívat služeb programu Dovecot pro doručování dopisů do jednotlivých poštovních schránek. Poznáme to lehce z výpisu logu činnosti Postfixu, při příjmu dopisu se objeví řádek:
Aug 22 16:32:54 wd250 postfix/pipe[29729]: 614121C1B6B: to=<josef@domena1.xx>, relay=dovecot, delay=0.21, delays=0.1/0/0/0.11, dsn=2.0.0, status=sent (delivered via dovecot service)Pokud něco nefunguje vyplatí se pohlédnout do výše zmíněného logu, případně lze nastavit podrobnější log pro Dovecot:
/etc/dovecot/dovecot.conf
... log_path = /tmp/dovecot.log ...Aktuální nastavení programu Dovecot zjistíte příkazem
/usr/sbin/dovecot -n
a nastavení Postfixu příkazem /usr/sbin/postconf
.
Více o nastavení programu Dovecot najdeme na wiki Dovecot LDA
Dovecot filtry
V konfiguračním souboru pro Dovecot nastavíme možnost zpracování filtrů:/etc/dovecot/dovecot.conf
protocol lda { ... mail_plugins = sieve mail_plugin_dir = /usr/lib64/dovecot/modules/lda ... } plugin { sieve = /var/lib/sieve/%u.sieve }Řádek
sieve
v sekci plugin
, ukazuje, kde lze nalézt uživatelské filtry. Zástupné znaky %u
znamenají název poštovního účtu, tedy pro poštovní adresu josef@domena1.xx
se bude hledat filtr s názvem josef@domena1.xx.sieve
.
Adresář /var/lib/sieve
musí umožňovat grupě vmail
zápis (nutné pro automatickou kompilaci fitrů, viz níže)!
V sekci
plugin
mohou ovšem existovat i další nastavení.
Toto je cesta k globálnímu filtru, který je proveden pouze pokud neexistuje uživatelský skript:
sieve_global_path = /var/lib/sieve/default.sieveUmístění globálních filtrů, které je možno vkládat do uživatelských filtrů pomocí direktivy
include :global
:
sieve_global_dir = /var/lib/sieve/global/A toto je umístění osobních uživatelských filtrů, vkládaných pomocí direktivy
include :personal
:
sieve_dir = /var/lib/sieve/%u.libJednotlivé uživatelské filtry jsou při aktivaci kompilovány a výsledek je automaticky uložen s koncovkou
.svbin
, tedy například josef@domena1.xx.svbin
.
Ostatní filtry je možné ručně kompilovat pomocí příkazu:
sievec název_filtru
Jednoduché příklady uživatelských filtrů
Neobsahuje-li příchozí pošta vybrané hlavičky, je bez upozornění zahozena:if not exists ["From","Date"] { discard; }
Pokud příchozí pošta obsahuje v předmětu slovo "pozor" (nezáleží na velikosti písmen), bude automaticky přesunuta do složky
pozor
. INBOX je název jmenného prostoru:
require "fileinto"; if header :contains "subject" ["pozor"] { fileinto "INBOX.pozor"; }
Filtr pro automatickou odpověď. V nastavení
:address
je nutné uvést i všechny případné aliasy.
Příjemce automatické odpovědi pak obdrží tuto zprávy maximálně jednou za dva dny, bez ohledu kolik dopisů pro příjemce poslal (nastavení :days
).
require "vacation"; vacation :addresses ["josef@domena1.xx", "pepa@domena1.xx"] :days 2 :subject "Automaticka odpoved: momentalne jsem na dovolene" "Dobry den, bohuzel jsem prave na dovolene. Jakmile to bude mozne, ozvu se! Josef";
Filtr pro odmítnutí nadměrně velké zprávy. Odesílatel bude informován a další provádění filtru je ukončeno:
require "reject"; if size :over 2M { reject "Message over 2MiB size limit."; stop; }Pokud je nalezena syntaktická chyba v fitru, je založen chybový log (například
josef@domena1.xx.sieve.log
), kde lze nalézt popis chyby.
Mnohem bohatější ukázky možností filtrů najdete například na Dovecot Sieve plugin a FastMailWiki. Kompletní popis jazyka filtrů naleznete v RFC 5228.