[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico] [volume] [parte]


Capitolo 317.   Procmail

Procmail(1) è un sistema di analisi e selezione dei messaggi di posta elettronica, che si inserisce subito dopo un MDA (Mail delivery agent). Viene usato praticamente per ogni tipo di controllo che riguardi la posta elettronica, a livello di singolo utente, ma ha un grande difetto: la sintassi per la sua configurazione.

In questo capitolo viene descritto l'uso di Procmail al livello dell'utente singolo, senza entrare nel dettaglio della spiegazione sulla sintassi da usare per la sua configurazione.

317.1   Principio di funzionamento

Procmail, nel suo utilizzo normale, viene avviato con i privilegi di un certo utente e serve per ricevere un messaggio di posta elettronica attraverso lo standard input, da depositare nel file appropriato che rappresenta la casella di posta in entrata di quello stesso utente. Per la precisione, qualsiasi sia la forma dei dati che vengono ricevuti in ingresso, questi vengono depositati tali e quali nella casella di posta.

cat messaggio | procmail

Il funzionamento di Procmail dipende dalla presenza e dal contenuto di un file di configurazione. Generalmente si considera solo il file ~/.procmailrc, di competenza dell'utente, proprio perché Procmail lo si intende uno strumento che deve gestire l'utente singolo.

Figura 317.1. Schema del funzionamento più semplice di Procmail.

Procmail

Attraverso la configurazione, si può istruire Procmail in modo da selezionare i messaggi per depositarli in file differenti, in base a qualche criterio, così come è possibile utilizzare altri programmi per il controllo della presenza di virus o per l'individuazione di «spam», i quali aggiungono delle voci nell'intestazione dei messaggi, così che lo stesso Procmail possa poi separarli dai messaggi normali.

Figura 317.2. Una situazione tipica in cui Procmail si avvale di altri programmi per individuare i contenuti e sapere poi come separare i messaggi, recapitandoli in file differenti.

Procmail

317.2   Configurazione di partenza e verifica del funzionamento

Per cominciare a comprendere l'uso di Procmail, occorre predisporre un file di configurazione iniziale (~/procmailrc), molto simile a quello seguente:

PATH=/usr/local/bin:/usr/bin:/bin
MAILDIR=$HOME/mail
DEFAULT=$MAILDIR/mbox
LOGFILE=$MAILDIR/procmail.log

Come si può intuire, vengono definite delle variabili di ambiente per il funzionamento di Procmail stesso. In particolare, la variabile MAILDIR rappresenta la directory in cui vengono depositati i file per il recapito dei messaggi, mentre DEFAULT rappresenta il file che deve ricevere i messaggi in modo predefinito. Eventualmente, la variabile DEFAULT potrebbe anche corrispondere a /var/mail/$LOGNAME.

Per la precisione, la directory rappresentata dalla variabile MAILDIR è la directory corrente durante il funzionamento di Procmail; pertanto, i file che vengono indicati con percorsi relativi, fanno riferimento a questa directory di partenza.

Avendo fatto questo, si può utilizzare un file contenente il testo seguente, per verificare il funzionamento di Procmail:

From tizio@brot.dg Wed Jul  5 12:13:59 2007 +0200
To: caio@brot.dg
Subject: ciao
Message-Id: <E1Fy4ON-0005yF-00@127.0.0.1>
From: tizio@brot.dg
Date: Wed, 05 Jul 2007 12:13:59 +0200

ciao

Supponendo che questo file si chiami messaggio, si può vedere se Procmail lo può recapitare regolarmente:

cat messaggio | procmail[Invio]

Indipendentemente dal fatto che l'utente sia effettivamente caio, dovrebbe trovare il messaggio nel file ~/mail/mbox, da come si vede nella configurazione stabilita. Ma più importante di questo, nel file ~/mail/procmail.log si deve vedere cosa ha fatto Procmail:

From tizio@brot.dg Wed Jul  5 12:13:59 2007 +0200
 Subject: ciao
  Folder: /home/tizio/mail/mbox                             387

317.3   Attivazione di Procmail

Per svolgere il suo compito, Procmail deve essere avviato ogni volta che c'è un messaggio da recapitare a un certo utente.

Si parte dal presupposto che il sistema, senza Procmail, sia già in grado di recapitare i messaggi agli utenti, pur senza compiere analisi dei contenuti di questi. Quando si vuole inserire Procmail, quello che prima svolgeva il compito di MDA, dopo deve avvalersi a sua volta di Procmail per completare il recapito.

A seconda dei casi, può darsi che Procmail venga preso in considerazione in modo automatico dal sistema di recapito dei messaggi di posta elettronica, oppure che si debba intervenire all'interno di file ~/.forward.

A titolo di esempio viene mostrato un estratto della configurazione di Exim 3, dove viene definito l'uso di Procmail, nel caso si verifichi la presenza del programma stesso e del file di configurazione personale necessario:

#
# This transport is used for procmail
#
procmail_pipe:
  driver = pipe
  command = "/usr/bin/procmail"
  return_path_add
  delivery_date_add
  envelope_to_add
  suffix = ""
...
...
#
# This director runs procmail for users who have a .procmailrc file
#
procmail:
  driver = localuser
  transport = procmail_pipe
  require_files = ${local_part}:+${home}:+${home}/.procmailrc:+/usr/bin/procmail
  no_verify

Quando invece il programma che gestisce la consegna dei messaggi ignora l'esistenza di Procmail, occorre utilizzare il file ~/.forward. Potrebbe essere necessario utilizzare una delle due forme seguenti, ma si deve verificare con la documentazione del sistema MDA:

"|exec /usr/bin/procmail"
|/usr/bin/procmail

317.4   Esempi semplici di configurazione

Il file di configurazione di Procmail contiene, oltre alle direttive per assegnare un valore a delle variabili di ambiente, delle «ricette» (recipe) con cui si dice cosa fare dei messaggi elaborati. Si osservi l'esempio seguente:

PATH=/usr/local/bin:/usr/bin:/bin
MAILDIR=$HOME/mail
DEFAULT=$MAILDIR/mbox
LOGFILE=$MAILDIR/procmail.log
#
# Lista "scuola"
#
:0 c
* ^To:.*scuola@lists\.linux\.it
didattica

In questo caso si mostra un file completo, che dopo l'assegnamento delle variabili di ambiente e dopo un'annotazione (commento) contiene una ricetta:

:0 c
* ^To:.*scuola@lists\.linux\.it
didattica

Le ricette si distinguono perché iniziano sempre con la sigla :0. In questo caso, la ricetta indica che si vuole mettere una copia dei messaggi che risultano diretti all'indirizzo scuola@lists.linux.it nel file didattica (precisamente il file $MAILDIR/didattica).

Si osservi che didattica potrebbe anche essere una directory, ma in tal caso ci sarebbe da specificare se salvare i messaggi in formato «MH» o maildir.

Figura 317.11. Spiegazione dettagliata della ricetta.

Procmail

Nell'esempio seguente, invece, si vede la stessa ricetta, con la differenza che manca la «c», per fare in modo che i messaggi individuati dalla condizione vengano messi solo nel file o nella directory didattica:

:0
* ^To:.*scuola@lists\.linux\.it
didattica

L'esempio successivo riguarda l'uso di un programma antivirus e si avvale di due ricette in sequenza:

#
# Scan for viruses
#
:0
VIRUS=|clamdscan --no-summary --stdout -

:0
* VIRUS ?? ^.*FOUND
virus

La prima ricetta richiede di avviare il programma clamdscan (con le opzioni che si vedono), inviandogli il messaggio attraverso lo standard input. Il risultato della scansione è un testo descrittivo che viene emesso dal programma attraverso lo standard output, che così viene assegnato alla variabile VIRUS. La seconda ricetta prende lo stesso messaggio e verifica che la variabile VIRUS contenga la stringa FOUND alla fine: se c'è la corrispondenza, il messaggio viene messo nel file o nella directory virus.

Figura 317.14. Spiegazione dettagliata delle ricette.

Procmail

L'esempio seguente riguarda due ricette per utilizzare SpamAssassin, allo scopo di valutare i messaggi e «marchiarli» come spam:

#
# SpamAssassin
#
:0fw: spamassassin.lock
* < 256000
| spamassassin

:0
* ^X-Spam-Level: \*\*\*\*\*\*\*\*\*\*\*\*\*\*\*
spam

Nella prima ricetta si vede l'uso delle opzioni f e w. La lettera f serve per fare in modo che il messaggio, inviato al programma attraverso il condotto che si vede dopo la condizione, venga modificato e passato alle ricette successive con tale modifica. La lettera w richiede di attendere l'esecuzione del programma e di verificare il valore di uscita dello stesso: se si verifica un errore, occorre rifiutare le modifiche al messaggio, che così passa intatto alle ricette successive.

Dopo le opzioni, appare il segno di due punti (:), perché poi viene indicato il nome di un file, spamassassin.lock, che viene creato nel momento dell'utilizzo della ricetta e cancellato subito dopo. La presenza di questo file serve a evitare che il programma spamassassin venga avviato quando ne esiste già un altro che non ha ancora completato il suo compito; pertanto, all'esecuzione della ricetta, se il file esiste già, si attende che il file scompaia prima di procedere (in inglese si definisce: lock file).

La condizione della prima ricetta si avvera se il messaggio ha una dimensione inferiore a 256 000 byte (ovvero 250 Kibyte). Ciò serve a evitare di scandire messaggi di dimensioni troppo grandi. Tali messaggi più grandi non vengono così controllati dal programma spamassassin.

Nella prima ricetta, il programma spamassassin aggiunge delle intestazioni ai messaggi, in particolare una denominata X-Spam-Level:, che contiene una fila di asterischi: più sono gli asterischi, più è probabile che si tratti di messaggi indesiderabili. Nella seconda ricetta, infatti, si verifica la presenza di un'intestazione di questo tipo: se appaiono almeno 15 asterischi, il messaggio viene messo nel file o nella directory spam.

Per la descrizione dettagliata della sintassi da usare per la costruzione delle ricette di Procmail, occorre leggere i documenti: procmailrc(5) e procmailex(5).

Appunti di informatica libera 2007.02 --- Copyright © 2000-2007 Daniele Giacomini -- <daniele (ad) swlibero·org>


1) Procmail   GNU GPL o Artistic


Dovrebbe essere possibile fare riferimento a questa pagina anche con il nome procmail.htm

[successivo] [precedente] [inizio] [fine] [indice generale] [indice ridotto] [indice analitico]

Valid ISO-HTML!

CSS validator!