Premier Training & Business Partner Red Hat

Filtrare le email con Sieve

Alessandro Lorenzi
Ti piacerebbe diventare anche tu uno di noi e
pubblicare i tuoi articoli nel blog degli RHCE italiani?

letters_with_tilt_shiftIo strumento che più mi ha aiutato a raggiungere e mantenere l’obiettivo #inbox0 sono stati i filtri di GMail, utilissimi per smazzare automaticamente le email nelle directory giuste. Da un paio di mesi però, fortemente invogliato dal Datagate, ho deciso di prendere un server virtuale in cui tengo un paio di siti e un server mail. La cosa che più mi manca di GMail è però appunto la gestione dei filtri.

Fortunatamente non è una cosa che si sia inventato Google, quindi l’alternativa c’è, anche se ho trovato un po’ difficoltoso implementarla, più che altro per mancanza di guide aggiornate per CentOS 6, quelle dedicate a CentOS 5 non funzionano. La tecnologia in questione si chiama “sieve“, ed ha eccitato i miei sensi di geek. Non si tratta infatti di una interfaccia clikkosa ma di un vero e proprio linguaggio di progrmmazione dedicato al mail filtering.

Inoltre è possibile avviare un server “managesieve” che permette di modificare da remoto gli script.

Installazione e configurazione su Dovecot

Il plugin di dovecot che implementa il protocollo sieve si chiama pigeonhole, installiamolo con yum.

 # yum install -y dovecot-pigeonhole 

Ora dobbiamo attivare supporto sieve editando alcuni files nella directory /etc/dovecot/conf.d:

10-master.conf : aggiungiamo il servizio lmtp.

service lmtp {
  executable = lmtp -L
  unix_listener /var/spool/postfix/private/dovecot-lmtp {
   group = postfix
   mode = 0600
   user = postfix
  }
}

20-lmtp.conf: adattiamo il file aggiungendo le configurazioni del protocollo lmtp.

protocol lmtp {
  # Space separated list of plugins to load (default is global mail_plugins).
  mail_plugins = $mail_plugins sieve
  postmaster_address = postmaster@site.eu  # required
  info_log_path = /var/log/dovecot-lmtp.log

}

20-managesieve: decommentiamo la linea “protocol” .

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

10-auth : dovrebbe essere a posto, però inizialmente non mi riconosceva gli utenti quando inviavo le email. La soluzione è stata specificargli il formato dello username

auth_username_format = %Ln

Configurazione postfix

Adesso dobbiamo dire a postfix come comunicare con lmtp configurando il file /etc/postfix/main.cf

mailbox_transport = lmtp:unix:/var/spool/postfix/private/dovecot-lmtp

Reload dei servizi

Per caricare le configurazioni dobbiamo fare il reload dei servizi.

 # service dovecot reload
 # service postfix reload

Verifichiamo che lmtp sia attivo verificando che lo unix socket sia attivo:

ls -l /var/spool/postfix/private/dovecot-lmtp

E verifichiamo che il siege manager sia anch’esso attivato verificando che abbia per lo meno fatto il bind della porta

# netstat -tlnp | grep 4190
tcp        0      0 0.0.0.0:4190                0.0.0.0:*                   LISTEN      5277/dovecot        
tcp        0      0 :::4190                     :::*                        LISTEN      5277/dovecot        

Ora potremmo inserire gli script nella directory ~/sieve editandoli con vim o con qualsiasi altro editor di testo. Ma avendo abilitato il managesieve possiamo collegarci da remoto con un client sieve e configurare i filtri più comodamente.

Configurazione Thunderbird

Esistono vari client sieve, io per ora sto utilizzando il plugin di thunderbird.

Per installarlo andiamo su Tool > Plugins e cerchiamo la parola chiave “sieve” clicchiamo su “installa”

Install sieve su thunderbird

Fatto questo è tutto pronto per funzionare: selezioniamo Tools > Sieve Messages Filters . Il plugin prende le impostazioni del server imap e propone tutti i parametri di default per sieve che, se non abbiamo modificato nulla sul server, funzionano egreggiamente.

Una prima schermata ci permette di vedere una lista di files e cliccando su uno di questi o cliccando su “new” si apre un editor interno che supporta l’evidenziazione e il controllo della sintassi.

Ad esempio per dividere le mail delle mailing list nelle directory imap usiamo uno script di questo tipo:

require ["fileinto", "envelope"];
if header :contains "List-Id" "gullp.lists.garl.ch" {
  fileinto "Linux.GULLP";
}elsif header :contains "List-Id" "ambassadors-it.lists.fedoraproject.org" {
  fileinto "Linux.Fedora.Ambassadors-it";
} else {
  keep;
}

Sul sito di dovecot c’è una serie di esempi molto utili per capire come sieve funziona e le sue possibilità.

Immagine “Letters with tilt shift” di mbgrigby

Info about author

Alessandro Lorenzi

RHCE Consultant at Extraordy