L'interprete Sieve e il server Dovecot ManageSieve

19 aprile 2022 Roberto Puzzanghera 6 commenti

Il progetto Pigeonhole fornisce il supporto Sieve a livello di plugin per il Local Delivery Agent (LDA) di Dovecot e anche per suo servizio LMTP. Il plugin è un interprete Sieve che filtra i messaggi in arrivo usando uno script scritto in linguaggio Sieve. Lo script Sieve è fornito dall'utente e, con il suo utilizzo, l'utente può personalizzare come i messaggi in arrivo sono trattati. I messaggi possono essere spediti a una cartella specifica, reindirizzati, rispediti al mittente, scartati, etc.

Il Server Dovecot Managesieve è un servizio per gestire la collezione di script Sieve dell'utente.

Se vuoi supportare i filtri per le email, devi gestire le Sieve rules per mezzo del server dovecot-pigeonhole. Quando crei un filtro con la tua webmail o il tuo client di posta, stai scrivendo uno script in linguaggio Sieve per personalizzare il modo in cui i tuoi messaggi saranno recapitati, vale a dire se saranno inoltrati a qualcun altro, scartati o salvati in delle cartelle particolari. Ma per fare questo Dovecot deve agire anche come un Local Delivery Agent  al posto di vpopmail/vdelivermail, ovvero deve essere Dovecot a salvare i messaggi nella tua cartella Maildir. Questa guida cercherà di spiegare come raggiungere questo obiettivo.

La versione testata al momento della scrittura di questa pagina è la 0.5.20. E' consigliabile testare quanto sotto con l'ultima versione rilasciata.

cd /usr/local/src
wget https://pigeonhole.dovecot.org/releases/2.3/dovecot-2.3-pigeonhole-0.5.20.tar.gz
tar xzf dovecot-2.3-pigeonhole-0.5.20.tar.gz
chown -R root.root dovecot-2.3-pigeonhole-0.5.20
cd dovecot-2.3-pigeonhole-0.5.20

# the program has to find the dovecot-config file in /usr/local/dovecot/lib/dovecot/
./configure \
 --prefix=/usr/local/dovecot-pigeonhole \
 --with-dovecot=/usr/local/dovecot/lib/dovecot/
make

Se una versione precedente di pigeonhole è già installata, sarà bene rimuovere a questo punto il link simbolico prima di procedere con l'installazione:

rm /usr/local/dovecot-pigeonhole

Ora si può procedere con l'installazione

make install

cd /usr/local
mv /usr/local/dovecot-pigeonhole /usr/local/dovecot-2.3-pigeonhole-0.5.20
ln -s /usr/local/dovecot-2.3-pigeonhole-0.5.20 /usr/local/dovecot-pigeonhole

Configurazione

cd /usr/local/dovecot/etc/dovecot/conf.d
cp -p ../../../share/doc/dovecot/example-config/conf.d/20-managesieve.conf .
cp -p ../../../share/doc/dovecot/example-config/conf.d/90-sieve.conf .

Ora abilitare (se non è già stato fatto) il plugin nel file 15-lda.conf

protocol lda {
  mail_plugins = $mail_plugins sieve
}

e modificare il file conf.d/20-managesieve.conf secondo le proprie esigenze. Questo è il file che funziona per me e che si trova nella tarball:

##
## ManageSieve specific settings
##

# Uncomment to enable managesieve protocol:
protocols = $protocols sieve

# Service definitions

service managesieve-login {
 inet_listener sieve {
 port = 4190
 }
}

service managesieve {
}

# Service configuration

protocol sieve {
}

Ora modificare il file conf.d/90-sieve.conf. Queste impostazioni funzionano per me (questo file dovrebbe essere anche nell tua directory di configurazione se hai scaricato la mia tarball):

##
## Settings for the Sieve interpreter
##

# Do not forget to enable the Sieve plugin in 15-lda.conf and 20-lmtp.conf
# by adding it to the respective mail_plugins= settings.

plugin {
 sieve = file:~/.sieve;active=~/.sieve/dovecot.sieve
 sieve_before = /usr/local/dovecot/etc/dovecot/sieve/
 sieve_extensions = +notify +imapflags +spamtest
}

Ora riavviare dovecot

dovecotctl restart

Impostazione dei file dot-qmail per abilitare Dovecot LDA e Sieve

Leggere questo per maggiori informazioni su come funzionano i file dot-qmail.

La cosa importante da capire è che se si vogliono usare le Sieve rules, vdelivermail non dovrà più avere in carico il recapito dei messaggi ma questo sarà un compito che dovrà essere assolto da Dovecot LDA. In altre parole, in ogni dominio dove si vuole abilitare le regole sieve si deve modificare .qmail-default come segue:

|/var/qmail/bin/preline -f /usr/local/dovecot/libexec/dovecot/deliver -d $EXT@$USER

Naturalmente si può decidere di limitare le regole sieve solo a certi utenti, in questo caso è sufficiente ritoccare il file .qmail-utente nella cartella del dominio o nella cartella home dell'utente stesso.

Se è stata applicata la mia patch di vpopmail e se si è compilato con --enable-defauldelivery come suggerito in questa guida, il default delivery sarà copiato da /var/qmail/control/defaultdelivery. Pertanto sarà bene salvare in questo caso la linea scritta sopra:

echo '|/var/qmail/bin/preline -f /usr/local/dovecot/libexec/dovecot/deliver -d $EXT@$USER' > /var/qmail/control/defaultdelivery

NB: non usare i doppi apici nel comando di sopra, poichè in tal caso la variabile $EXT@$USER sarà sostituita l'account corrente (@root per esempio).

Se si è deciso di abilitare sieve per default, si può sempre modificare /var/qmail/control/defaultdelivery a condizione che si lasci vuoto il file .qmail-default dei domini appena creati (basta rimuovere la prima riga, mai cancellare il file se non si vuole compromettere il funzionamento di vpopmail), anche se ciò non è una buona idea. Infatti, modificare defaultdelivery e svuotare .qmail-default comporta il rischio di mandare in confusione qmailadmin quando si elencano le mailing-lists, poichè una mailing-list "default" fittizia appare in qualche caso (per lo meno questo è ciò che ho osservato io :-). Ogni commento su questo sarebbe gradito.

Impostare una regola sieve anti-spam

Info: http://tools.ietf.org/html/rfc5235 - http://wiki2.dovecot.org/Pigeonhole/Sieve/Examples

Se si è deciso di far in modo che simscan lasci passare lo spam con un punteggio al di sotto di spam_hits (file qmail/control/simcontrol), sarà il caso di metterlo nella cartella Spam. In tal caso sieve eseguirà uno script prima di processare gli script degli utenti cosicchè i messaggi di spam saranno scartati o spostati in Spam e le altre regole ignorate.

Prima di tutto creiamo una cartella dove salvare i nostri script globali e assegnamo all'utente vpopmail i privilegi di scrittura in questa cartella:

cd /usr/local/dovecot/etc
mkdir sieve
chown -R vpopmail.vchkpw sieve

Modifichiamo conf.d/90-sieve.conf per abilitare le estensioni necessarie di sieve e caricare lo script che vogliamo eseguire prima di quelli dell'utente:

sieve_extensions = +spamtest +spamtestplus +relational +comparator-i;ascii-numeric
sieve_before = /usr/local/dovecot/etc/sieve/

Ora creiamo lo script /usr/local/dovecot/etc/sieve/move-spam.sieve (l'estensione deve essere .sieve altrimenti il file sarà ignorato):

require ["fileinto"];
if anyof (header :contains "X-Spam-Flag" "YES")
{
 fileinto "Junk";
}
/* Other messages get filed into INBOX */

Ogni volta che si modificano i file globali si deve pre-compilarli usando il programma sievec (maggiori info qui):

su vpopmail
cd /usr/local/dovecot/etc/sieve
/usr/local/dovecot-pigeonhole/bin/sievec .

Test di managesieve

Prima di tutto controlliamo se il server risponde alla porta 4190 via telnet:

# telnet 0 4190

Trying 0.0.0.0...
Connected to 0.
Escape character is '^]'.
"IMPLEMENTATION" "Dovecot Pigeonhole"
"SIEVE" "fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date spamtest spamtestplus"
"NOTIFY" "mailto"
"SASL" "PLAIN LOGIN CRAM-MD5"
"STARTTLS"
"VERSION" "1.0"
OK "Dovecot ready."

Se si crea una sieve rule con il proprio client email (Mozilla Thunderbird ad esempio fornisce un add-on qui https://addons.mozilla.org/en-US/thunderbird/addon/2548/) o attraverso la webmail (leggere la prossima pagina riguardante Roundcube webmail), questo è ciò che si dovrebbe vedere nel log nel caso di un semplice filtro per redirect:

Oct 22 00:03:13 lda(test@yourdomain.net): Info: sieve: msgid=<c3445037f979a8cb793df1f858b7a4f9@somedomain.com>: forwarded to <someone@somewhere.net>

Commenti

Update Upload per questo pagina che comincia con un link Wrong

La pagina originale per upload del pluging è cambiata  va usata quella del sito ufficale del plugin pigeonhole su dovecot.org.

wget http://pigeonhole.dovecot.org/releases/2.2/dovecot-2.2-pigeonhole-0.4.3.tar.gz

Rispondi | Permalink

grazie dell'avviso

grazie dell'avviso, ora aggiorno :)

Rispondi | Permalink

Sbaglio o gli alias smettono di funzionare?

Ciao Roberto, apprezzo molto il tuo lavoro di documentazione per unire dovecot e vpopmail nel delivery locale delle email. Ma mi sbaglio o togliendo vdelivermail dal .qmail-default si perde la possibilità di gestire gli alias (valias) in quanto il delivery di dovecot non ne sa niente della loro esistenza?

Rispondi | Permalink

vpopmail e --enable-valias

Ciao Alessio, si l'ho notato anch'io. Ho scoperto però che si può ovviare al problema mettendo gli alias su mysql, ovvero compilando vpopmail con --enable-valias

Rispondi | Permalink

Io ho valias e non funziona,

Io ho valias e non funziona, solo vdelivermail sa se gli alias sono nel DB o nei file .qmail e se il delivery delle email lo fa dovecot-lda questa funzionalità è ignorata.

Sei sicuro che a te funzioni con valias? Chi dice a dovecot-lda di cercare e come cercare gli alias nel DB?

Rispondi | Permalink

Scusa la confusione

Scusa la confusione, ma è da un po' che non installo nuovi mail server.

Come ho scritto nella pagina di vpopmail:

--disable-valias Do not store aliases in MySQL, but as dot-qmail files. Note: it appears that dovecot-lda fails to deliver emails when valias is enabled.

Quindi è il contrario. dovecot-lda funziona senza valias. Ho infatti ricontrollato ed è cosi che sto compilando vpopmail

Rispondi | Permalink