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.

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

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”.

Managesieve

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:

Sieverules1

Sieverules2

Použitím sieve filtrů také snadno vyřešíte automatickou odpověď v nepřítomnosti, která je často uživateli vyžadována:

Sieverules3

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;
}

 

Like this:

Další témata