L'interprete Sieve e il server Dovecot ManageSieve

17 settembre 2023 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=0.5.21
cd /usr/local/src
wget https://pigeonhole.dovecot.org/releases/2.3/dovecot-2.3-pigeonhole-${PIGEONHOLE_VER}.tar.gz
tar xzf dovecot-2.3-pigeonhole-${PIGEONHOLE_VER}.tar.gz
chown -R root.root dovecot-2.3-pigeonhole-${PIGEONHOLE_VER}
cd dovecot-2.3-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

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.

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

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 |

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 |