Sieve filtry na serveru v režii Dovecotu a Roundcube
Filtrování pošty již na serveru je docela častá funkce, kterou uživatelé po mailserveru vyžadují. Při instalaci nového mailserveru postaveného na kombinaci Postfix + Dovecot + MySQL jsem zprovoznil i Sieve filtry a webové rozhraní pro jejich správu.
Použitý software
Na serveru je operační systém Linux – distribuce CentOS ve verzi 6. Mailserver je postaven nad osvědčenou kombinací Postfix+Dovecot (+ Amavis, ClamAV, Spamassasin, Postgrey) s uživateli v MySQL. Uživatelé jsou spravováni přes webové rozhraní Postfixadmin.
Uživatelé mají přístup k poště přes IMAPs/POP3s a webmail. Jako webmail používáme už delší dobu Roundcube, který je uživatelský docela použitelný.
Roundcube implementuje systém pluginů, které umožňují rozšířit webmail o další důležité funkce.
Dovecot ve verzi 2.0beta6 se stará o poštovní schránky. Zajišťuje doručení mailů převzatých z postfixe do schránky (=LDA) a zpřístupňuje poštu uživatelům přes IMAPs/POP3s (používáme pro přístup protokoly zabezpečené SSL, pouze lokálně pro webmail je obyč. IMAP).
Třídění pošty
Poštu na serveru je vhodné třídit již při doručování do schránky. Často se pro třídění pošty používají nástroje jako je procmail nebo maildrop, které umožňují napsat do konfiguračního souboru filtrovací pravidla. Správa souboru většinou probíhá lokálně přímou editací v textovém editoru. Jazyk pro zápis filtrů je pro každý z těchto nástrojů jiný. Za předpokladu, že poštu třídí procmailu/maildropu znalí uživatelé je to asi akceptovatelné řešení.
Jenže v běžném prostředí používají poštu i uživatelé neznalí nebo znalí a “líní” a vyžadují GUI pro správu filtrů. V takovém případě je vhodné použít Dovecot s podporou sieve filtrů a k tomu vhodné GUI. Sieve filtry je možné spravovat jak přímou editací konfiguračního souboru na disku tak použít i GUI, ať už je to plugin do “tlustého” mailového klienta (např. pro Thunderbird) nebo do webmailu (pluginy managesieve nebo sieverules pro Roundcube). Nástroje pro úpravu sieve filtrů provádějí správu přes management server ke kterému se přihlašují stejně jako k IMAPu.
Nastavení software
Postfix
Postfix je nastaven tak aby poštu pro všechny virtuální uživatele (uživatele z MySQL) doručoval přes Dovecot. Postfix používá stejnou databázi uživatelů jako Dovecot. Použití Dovecotu jako LDA je důležité, právě při doručování probíhá zpracování a aplikace filtrů.
V /etc/postfix/main.cf je uvedeno:
virtual_transport = dovecot dovecot_destination_concurrency_limit = 1 dovecot_destination_recipient_limit = 1
V /etc/postfix/master.cf je vytvořen transport “dovecot”:
dovecot unix - n n - - pipe flags=DRhu user=vmail:vmail argv=/usr/libexec/dovecot/deliver -f ${sender} -d ${user}@${nexthop} -m ${extension}
Dovecot zpracovává poštu pro virtuální uživatele pod jedním uživatelským UID a GID - vmail:vmail. Řešit pro každého uživatele mailserveru vlastní UID a GID je zbytečné, zvlášť když většina uživatelů pošty nemá ani přístup do shellu.
Dovecot
Konfigurace Dovecotu je v nové verzi rozstrkaná do většího množství konfiguračních souborů umístěných v adresáři /etc/dovecot/conf.d/. Nebudu zde popisovat kompletní konfiguraci Dovecotu, ale pouze to co se týká sieve filtrů.
V souboru /etc/dovecot/dovecot.conf je nutné přidat “sieve” k podporovaným protokolům:
protocols = imap pop3 sieve
Další změny jsou již prováděné v konfiguračních souborech v adresáři /etc/dovecot/conf.d/.
V souboru “15-lda.conf” aktivujte plugin sieve a zapněte automatické vytváření schránek:
mail_plugins = sieve lda_mailbox_autocreate = yes lda_mailbox_autosubscribe = yes
V konfiguračním souboru “90-sieve.conf” nastavte kde se mají sieve filtry ukládat.
plugin { sieve = ~/.dovecot.sieve sieve_dir = ~/sieve sieve_extensions = +notify +imapflags recipient_delimiter = + }
Volba sieve_dir=~/sieve znamená, že se filtry uloží do “domácího adresáře” uživatele do adresáře sieve/.
Abyste mohli sieve filtry spravovat přes management server, je nutné ho nastavit, to se provádí v souboru “20-managesieve.conf”:
service managesieve-login { inet_listener sieve { port = 4190 } } service managesieve { } protocol sieve { mail_max_userip_connections = 100 managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date managesieve_notify_capability = mailto }
Zkontrolujte také jestli správně získáváte informace o uživatelských schránkách v napojení Dovecotu na MySQL. V našem případě musí být v konfiguračním souboru “/etc/dovecot/dovecot-sql.conf.ext” zapsán správně user_query.
user_query = SELECT CONCAT('/home/posta/', maildir) AS home, 'Maildir/' AS maildir, 491 AS uid, 489 AS gid FROM mailbox WHERE username = '%u' AND active='1'
Dovecot pracuje s proměnnou “home”, když nebude proměnná home nastavena nebo bude ukazovat do špatného adresáře, nebude možné korektně spravovat sieve filtry a vlastní filtrování také nebude fungovat. Používáme “standardní” schema v MySQL dodávané s postfixadminem, takže jsem musel trošku dotaz user_query přetvořit. V našem případě se home proměnná naplní hodnotou “/home/mail/domain.tld/username/”.
Roundcube
Součástí Roundcube je managesieve plugin, který umožňuje spravovat sieve filtry docela pohodlným způsobem. V Roundcube ho stačí aktivovat zápisem do konfiguračního souboru “config/main.inc.php”:
$rcmail_config['plugins'] = array('managesieve');
Dále je nutné provést základní konfiguraci pluginu managesieve:
V adresáři plugins/managesieve/ zkopírujte soubor config.inc.php.dist do config.inc.php
V souboru config.inc.php nastavte správně port případně další volby:
<?php $rcmail_config['managesieve_port'] = 4190; $rcmail_config['managesieve_host'] = '%h'; $rcmail_config['managesieve_auth_type'] = null; $rcmail_config['managesieve_auth_cid'] = null; $rcmail_config['managesieve_auth_pw'] = null; $rcmail_config['managesieve_usetls'] = false; $rcmail_config['managesieve_mbox_encoding'] = 'UTF-8'; $rcmail_config['managesieve_replace_delimiter'] = ''; $rcmail_config['managesieve_disabled_extensions'] = array(); $rcmail_config['managesieve_debug'] = false; ?>
Pro nastavení Roundcube již není nic víc potřeba. Filtry je možné nastavit v “Osobní nastavení->Filtry”.
Plugin managesieve umožňuje klikáním nastavit různé akce, ale pro zkušenější uživatele je často vhodnější přímá editace filtrů v textovém editoru. Proto raději používám plugin sieverules, který umožňuje jak klikat tak i přímou editaci:
Použitím sieve filtrů také snadno vyřešíte automatickou odpověď v nepřítomnosti, která je často uživateli vyžadována:
Ukázka sieve filtrů spravovaných Dovecotem a jejich uložení na disku:
[root@mailserver config]# cd /home/posta/zdenda.com/zdenda/ [root@mailserver zdenda]# ls -la celkem 20 drwx------ 4 vmail vmail 4096 20. srp 22.56 . drwx------ 3 vmail vmail 4096 20. srp 22.41 .. lrwxrwxrwx 1 vmail vmail 21 20. srp 22.30 .dovecot.sieve -> sieve/roundcube.sieve -rw-r--r-- 1 vmail vmail 156 20. srp 22.56 .dovecot.svbin drwxr-xr-x 18 vmail vmail 4096 21. srp 12.41 Maildir drwxr-xr-x 3 vmail vmail 4096 20. srp 22.34 sieve [root@mailserver zdenda]# cat sieve/roundcube.sieve require ["fileinto"]; # rule:[spam] if header :contains "X-Spam-Flag" "YES" { fileinto "Spam"; stop; }