Configurazione di Dovecot con Sieve
Lo scopo di sieve (e Managesieve) e` quello di consentire al client di posta (o webmail) di gestire dei filtri (scritti con il linguaggio Sieve, o anche compilati dal client il quale propone all'utente una interfaccia semplificata per la generazione dei filtri) che poi vengono salvati sul server, e applicati direttamente dal server alle mail in arrivo per l'utente. In questo modo i filtri, cosi` come le mail dentro le caselle IMAP, si "conservano" fra un client di posta e l'altro, e soprattutto vengono applicati alla mail in ingresso direttamente dal server e non dal client.
Questa configurazione e` basata su Debian 12 ma puo` essere piu` o meno adattata anche ad altre distribuzioni. La parte di interfaccia con l' MTA e` fatta per Exim 4.94 e superiore, e specificamente per la configurazione che trovate qui: ../Exim4-Dovecot.
Attenzione: molte cose sono cambiate fra debian 10 e debian 11, e anche fra 11 e 12, per quanto riguarda Exim. Per questo motivo se vi serve una configurazione più vecchia, andate a vedere la storia di questa pagina.
Installazione
Per installare i pacchetti che servono, eseguire
apt install dovecot-imapd dovecot-pop3d dovecot-managesieved dovecot-sieve
Configurazione di Dovecot con Sieve
Questa configurazione e` praticamente equivalente a quella indicata nella pagina ../Exim4-Dovecot che descrive un sistema completo di gestione della mail. Di fatto questi sono estratti da quella config con qualche spiegazione su come funzionano. I files dei filtri Sieve si trovano nella stessa directory dove si trova la maildir "principale" dell'utente, in questa configurazione dentro /var/vmail/<dominio>/<utente>/. L'accesso alla gestione dei filtri Sieve avviene tramite il protocollo Managesieve, sulla porta standard 4190/TCP, la quale andra` aperta sul firewall se occorre l'accesso dall'esterno. E` ovviamente prevista l'autenticazione, che e` la stessa (username e password) che si usa per accedere alla propria casella IMAP.
Questo e` il file /etc/dovecot/dovecot.conf
## ## usa questi protocolli (le versioni "s" sono comprese, quindi ## imap include imaps e pop3 include pop3s) ## protocols = imap pop3 sieve ## ## Configurazione da applicare se necessario, nel caso in cui il carico sia tale da causare superamenti dei limiti ## # aumento il numero massimo di processi, per facilitare il login di molta gente assieme. # aumento anche la RAM massima usata da un processo, per evitare che certe ricerche vadano in OOM. # dovrebbe essere fatto in modo piu` chirurgico, leggendo il manuale e non alla vecchia come faccio io # in quanto in Dovecot ogni tipo di processo puo` avere limiti diversi. # Il default è 100 processi ovvero 100 connessioni contemporanee, che spesso sono poche. # http://wiki2.dovecot.org/LoginProcess #default_process_limit=512 #default_client_limit=2048 #default_vsz_limit = 1 G ## ## Disabilita IPV6 (volendo) ## # listen=* ## ## autenticatori che accetto ## auth_mechanisms = plain login digest-md5 cram-md5 apop ## ## Consenti l'autenticazione plaintext sempre, anche senza SSL. ## Non e` sicuro ma lo uso in locale con la webmail ## disable_plaintext_auth = no ## ## Consenti di usare l' UID 8 per accedere alla mail ## (visto che tutta la mia mail dei virtual domanins e` di questo utente) ## first_valid_uid = 8 last_valid_uid = 8 first_valid_gid = 8 last_valid_gid = 8 ## ## Carica il certificato e la chiave privata per SSL da qui: ## ssl_cert = </etc/dovecot/ssl/dovecot.pem ssl_key = </etc/dovecot/private/dovecot.pem #ssl_cert = </etc/letsencrypt/hostname.cert #ssl_key = </etc/letsencrypt/hostname.key ## ## Il file con i parametri DH (necessario da Devuan Beowulf / Debian 10 in poi) ## per generarlo, usa "openssl dhparam 4096 > dh.pem" ## ssl_dh=</etc/dovecot/dh.pem ## ## Mostra in "ps" chi e` l'utente che usa il processo ## verbose_proctitle = yes ## ## Scrive nel log le date come le voglio io ## log_timestamp = "%Y-%m-%d %H:%M:%S " ## ## Per loggare tutte le azioni degli utenti imap e pop serve questo plugin ## mail_plugins = $mail_plugins mail_log notify plugin { # Events to log. Also available: flag_change save mailbox_create mail_log_events = delete undelete expunge copy mailbox_delete mailbox_rename save mailbox_create flag_change # Also available: flags vsize from subject mail_log_fields = uid box msgid size from subject flags } ## ## Per debuggare. TOGLILI QUANDO FUNZIONA! ## # auth_debug_passwords = yes # mail_debug = yes # verbose_ssl = yes ## ## Questa credo che serva solo per i lock delle mailbox e non delle maildir, ma male non fa. ## mail_privileged_group = mail ## ## Sieve e Managesieve ## # NOTA: il default di managesieve e sieve e` creare una directory "sieve" nella home dell'utente. # questa viene creata correttamente perche` la home e` definita nello userdb e finisce in # /var/vmail/<dominio>/<utente>/sieve. # il file del filtro attivo e` di default ".dovecot.sieve" ma lo rinomino in "dovecot-sieve" # senza il "." all'inizio altrimenti viene confuso con una cartella imap che ovviamente non esiste. plugin { sieve = ~/dovecot.sieve } ## ## LDA (per usare i filtri sieve, uso l' LDA di Dovecot richiamato da Exim) ## lda_original_recipient_header = Envelope-to # questo va assieme alla opzione "envelope_to_add" nel trasporto in exim lda_mailbox_autocreate = yes lda_mailbox_autosubscribe = yes protocol lda { mail_plugins = $mail_plugins sieve } ## ## Configurazioni generali del sistema di autenticazione ## service auth { user = Debian-exim # questo socket e` quello su cui si autentica Exim per l' SMTP autenticato unix_listener auth-client { mode = 0666 } } ## ## Configurazione dell'autenticazione degli utenti su file di testo ## diviso in due parti: ## - passdb definisce da che database (files di testo in questo caso) leggo username ## e password e in che formato li leggo ## - userdb definisce dove si trova la mail e come la si accede a seconda ## di che utente sei (in questa config e` uguale per tutti, tranne che per ## il percorso dei files della maildir, infatti uso un driver "static") ## passdb { args = username_format=%n scheme=plain /etc/vmail/users/%d driver = passwd-file } userdb { args = uid=mail gid=mail home=/var/vmail/%d/%n mail=maildir:/var/vmail/%d/%n driver = static } ## ## configurazioni del protocollo imap ## protocol imap { imap_client_workarounds = mail_max_userip_connections = 30 } ## ## configurazioni del protocollo pop ## protocol pop3 { pop3_logout_format = top=%t/%T, retr=%r/%R, del=%d/%m, size=%s pop3_uidl_format = %08Xu%08Xv } ## ## Configurazione dell'utente di default per i socket ## del servizio stats. Questa modifica si rende necessaria ## se si usa dovecot-lda con un utente che non sia "dovecot" ## (per esempio "mail") altrimenti dovecot-lda non riesce a ## scrivere le stats e riporta warning ad ogni mail consegnata ## ## Questa modifica è necessaria da Debian 10 / Devuan Beowulf in poi. ## (versione di Dovecot 2.3.4.1) ## service stats { unix_listener stats-reader { user = mail group = mail mode = 0660 } unix_listener stats-writer { user = mail group = mail mode = 0660 } }
Configurazione di Exim
La configurazione generale di Exim e` al di fuori dello scopo di questa documentazione, qui faccio riferimento sempre alla configurazione in ../Exim4-Dovecot che comprende il supporto per Sieve e usa dovecot-lda.
Se vi state facendo la vostra configurazione, fate riferimento a questo esempio per il vostro delivery locale.
Attenzione: a seconda della versione di Exim, se pre o post introduzione del concetto di taint per le variabili, le cose cambiano parecchio. Questa config è valida per 4.94 e successivi, quindi post-taint
# Delivery locale agli utenti virtuali con Dovecot LDA e supporto SIEVE # La configurazione "return_fail_output" e il "-e" nella command line di dovecot mandano l'errore di dovevot come delivery failure al mittente # in caso in cui ci siano errori permanenti che tornano dal processo dovecot-lda (tipicamente il 77 che infatti non e` un temp_error) virtual_user_dovecot_delivery: driver = pipe command = /usr/lib/dovecot/dovecot-lda -e -d $local_part_data@$domain_data message_prefix = message_suffix = delivery_date_add # questa riga aggiunge un header "Envelope-to:" che poi Dovecot legge (e` specificato nella config di dovecot) # e serve perche` non posso piu usare "-a $original_local_part@$original_domain" in command line envelope_to_add return_path_add log_output user = mail return_fail_output temp_errors = 64 : 69 : 70: 71 : 72 : 73 : 74 : 75 : 78
Questo trasporto richiama l'eseguibile dovecot-lda (attenzione al percorso del file, che non e` detto che sia esattamente questo se non usate Debian) passandogli parametri ricavati da variabili interne di Exim, facendo fare a lui l'operazione di scrivere nella maildir dell'utente, eventualmente applicando il filtro Sieve se e` presente.
Client Managesieve per Thunderbird
Al momento per Thunderbird esiste solo un plugin per gestire i filtri Sieve, si chiama "sieve" ed e` alla versione 0.2.0 (agosto 2012). Funziona, ma non e` per nulla completo o particolarmente user friendly. Se si vuole usarlo a fianco al client di Roundcube, consiglio di usare prevalentemente il client di Roundcube, e di uniformarsi alla sua sintassi e alla sua logica di funzionamento. Il vantaggio del client di Thunderbird e` che consente di editare a mano (come testo puro) il file dei filtri, mentre quello di default di Roundcube non lo permette. La configurazione del client e` molto semplice: username e password sono quelle dell' IMAP e Thunderbird se le gestisce da solo, non occorre nemmeno reinserirle. Per ogni account IMAP presente e` possibile abilitare o meno la funzione Managesieve (perche` non e` detto che tutti gli account siano su un server che lo supporta).
Client Managesieve per Roundcube
In Roundcube esiste un plugin che gestisce Sieve, va attivato durante l'installazione e poi funziona "out of the box". (esiste dalla versione 0.8 in poi)
Bug noti
- 7/10/2012 - La versione di Dovecot in squeeze-backports (1:2.1.7-2~bpo60+1) va in segfault quando si tenta di usare il comando per validare gli script. Questo per esempio la fa piantare sistematicamente quando si apre il plugin sieve di Thunderbird, a meno che non si disabiliti nel medesimo il sistema di "validate as you type". Il bug e` noto e dovrebbe anche essere risolto, ma in Debian Backports ancora non c'e` l'aggiornamento.