User Tools

Site Tools


linuxdebian:dovecot-sieve

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.
linuxdebian/dovecot-sieve.txt · Last modified: by kurgan