L'interprete Sieve e il server Dovecot ManageSieve

30 gennaio 2025 by 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.

Installare come segue:

PIGEONHOLE_VER=2.4.0
cd /usr/local/src
wget https://pigeonhole.dovecot.org/releases/2.4/dovecot-pigeonhole-${PIGEONHOLE_VER}.tar.gz
tar xzf dovecot-pigeonhole-${PIGEONHOLE_VER}.tar.gz
chown -R root:root dovecot-pigeonhole-${PIGEONHOLE_VER}
cd dovecot-pigeonhole-${PIGEONHOLE_VER}

# 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-${PIGEONHOLE_VER}
ln -s /usr/local/dovecot-2.3-pigeonhole-${PIGEONHOLE_VER} /usr/local/dovecot-pigeonhole

Configurazione

A partire dalla versione 2.4.0 non abbiamo più degli esempi di file di configurazione su cui basarci, ma se hai scaricato quelli preparati da me sei a posto. I file di configurazione importanti per il server sieve sono 20-managesieve.conf e 90-sieve.conf.

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

protocol lda { 
 # Boolean list of plugins to load 
 mail_plugins { 
    sieve = yes 
 } 
}

Non è necessario modificare nulla nel file conf.d/20-managesieve.conf:

##
## 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 {
}

Abilitare il protocollo sieve nel proprio local.conf:

protocols { 
  sieve = yes 
}

Il file  conf.d/90-sieve.conf definisce dove bisogna ricercare gli script sieve creati dall'utente e lo script globale che useremo per spostare lo spam nella cartella Junk.

# Used by both the Sieve plugin and the ManageSieve protocol 
# https://doc.dovecot.org/latest/core/plugins/sieve.html#script-storage-type-personal 
sieve_script personal { 
 driver = file 
 path = ~/.sieve 
 active_path = ~/.sieve/dovecot.sieve 
}

mailbox Junk { 
 # moves spam into Junk 
 sieve_script report-spam { 
   type = before 
   cause = copy 
   path = /usr/local/dovecot/etc/sieve/move-spam.sieve 
 } 
}

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.

Se si vogliono usare le sieve rules il delivery agent dovrà essere settato su Dovecot-LDA. Ciò può essere ottenuto abilitando Dovecot-LDA nel file dot-qmail che dovrà gestire il recapito dei messaggi in questo modo:

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

Allo stesso tempo vorremmo avere il controllo anche sui rendirizzamenti di qmail, che al contrario necessaita di vpopmail vdelivermail come delivery agent. La soluzione che adotteremo è avere vdelivermail nei .qmail-default dei domini, che eventualmente gestirà i forward, e Dovecot-LDA nei file .qmail di tutti gli utenti, file che sarà responsabile di gestire il recapito delle email e i filtri basati su sieve. Se si è patchato vpopmail con la mia patch combinata e configurato con l'opzione --enable-defaultdelivery i dot-qmail saranno gestiti da vpopmail secondo questa logica. Leggere questa pagina per avere informazioni più dettagliate.

Impostare una regola sieve anti-spam

Info:

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
chmod -R g+w sieve

Note that we have to provide +w privileges to the vchkpw group, as the new dovecot-2.4 refuses to execute the script otherwise.

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:

mailbox Spam { 
 # moves spam into Junk 
 sieve_script report-spam { 
   type = before 
   cause = copy 
   path = /usr/local/dovecot/etc/sieve/move-spam.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 |

grazie dell'avviso

grazie dell'avviso, ora aggiorno :)

Rispondi |

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 |

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 |

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 |

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 |

Ultimi commenti
Vedi anche...
Articoli recenti

RSS feeds