11.4. Mail Delivery Agents

Red Hat Enterprise Linux include due MDA primari, Procmail e mail. Entrambe le applicazioni sono considerate LDA, ed entrambe muovono le email dal file spool dell'MTA nella mailbox dell'utente. Tuttavia, Procmail fornisce un sistema robusto di filtraggio.

Questa sezione affronta in modo dettagliato solo Procmail. Per informazioni sul comando mail, consultare la propria pagina man.

Procmail consegna e filtra email nel vostro file spool dell'host locale. É potente, ampiamente utilizzato e non intrusivo. Procmail puó giocare un ruolo importante nella consegna di posta elettronica letta dalle applicazioni client.

Procmail può essere richiamato in svariati modi. Ogni volta che un MTA posiziona una email nel file spool di posta, Procmail viene lanciato. Procmail, quindi, filtra e archivia per l'MUA e successivamente abbandona l'applicazione. In alternativa, l'MUA potrebbe essere configurato per richiamare Procmail ogni volta che si riceve un messaggio, in modo tale da archiviare i messaggi nelle corrette mailbox. Per default, la presenza di /etc/procmailrc o di un .procmailrc (anche chiamato file rc) nella home directory dell'utente, richiamerà Procmail, nel caso in cui un MTA riceve un nuovo messaggio.

Le azioni eseguite da Procmail con i messaggi e-mail dipendono dalla corrispondenza del messaggio rispetto ad un insieme di condizioni o requisiti nel file rc. Se un messaggio soddisfa i requisiti necessari, allora la email verrà posizionata in un file specifico, viene cancellato oppure processato.

Una volta avviato, Procmail legge il messaggio e-mail e separa la parte principale dall'informazione di testo. Successivamente Procmail và alla ricerca, per default, del file /etc/procmailrc e dei file rc nella directory /etc/procmailrcs, per le regole e le variabili del sistema dell'ambiente Procmail. Procmail va alla ricerca quindi di un file .procmailrc nella home directory dell'utente. Molti utenti creano anche dei file rc aggiuntivi per Procmail, per un riferimento all'interno del file .procmailrc nella loro home directory.

Per default, non esiste alcun file rc nella directory /etc/ e non vi sono nemmeno file .procmailrc nella directory home dell'untente. Per utilizzare Procmail, ogni utente deve creare un file .procmailrc con particolari variabili e regole per l'ambiente.

11.4.1. Configurazione di Procmail

I file di configurazione di Procmail contengono molte variabili importanti per l'ambiente. Tali variabili indicano i messaggi da smistare, e come comportarsi nei confronti dei messaggi che non soddisfano alcuna regola.

Queste variabili di ambiente compaiono in genere all'inizio del file .procmailrc, nel seguente formato:

<env-variable>="<value>"

In questo esempio, <env-variable> è il nome della variabile e <value> definisce la variabile.

La maggior parte degli utenti Procmail non utilizza molte variabili, anche se molte delle più importanti variabili sono già definite come valore di default. Spesso vi troverete di fronte alle seguenti variabili:

Altre variabili importanti di ambiente sono prelevate dalla shell, fra queste LOGNAME, che corrisponde al vostro nome di login, HOME, ovvero la posizione della vostra home directory e SHELL, la shell di default.

Spiegazioni esaurienti su tutte le variabili di ambiente e sui valori di default sono disponibili nella pagina man procmailrc.

11.4.2. Regole Procmail

Per molti nuovi utenti, la creazione delle regole rappresenta la parte più complicata per l'uso di Procmail. In un certo senso, questo è comprensibile, poiché le regole utilizzano espressioni regolari per far sì che i messaggi soddisfino i requisiti richiesti. Queste espressioni regolari identificano un particolare formato utilizzato per specificare gli attributi delle stringhe corrispondenti. Il costrutto delle espressioni regolari non è, tuttavia, complicato e la loro lettura ne rende ancora più semplice la comprensione. Inoltre, la consistenza del modo in cui le regole sono scritte, indipendentemente dalle espressioni regolari, facilita la comprensione del processo in corso. Per avere degli esempi, consultare la Sezione 11.4.2.5.

Le regole Procmail hanno le seguenti forme:

:0<flags>: <lockfile-name>

* <special-condition-character> <condition-1>
* <special-condition-character> <condition-2>
* <special-condition-character> <condition-N>

<special-action-character><action-to-perform>

I primi due caratteri di una regola Procmail sono i due punti e lo zero. Dopo lo zero possono anche esserci diverse flag per il controllo dell'attività di Procmail durante l'elaborazione di quella regola. La presenza dei due punti dopo la sezione <flags> indica che per quel messaggio sarà creato un file di blocco. L'utente dovrà specificare il nome del file nello spazio <lockfile-name>.

Per corrispondere un messaggio, una regola puó contenere diverse condizioni. Se non vi sono condizioni, ogni messaggio sarà conforme alla regola. Le espressioni regolari sono comprese in alcune condizioni al fine di facilitare una corrispondenza con il messaggio. Se vengono utilizzate delle condizioni multiple, queste devono corrispondere tutte affinché sia possibile eseguire un'azione. Le condizioni sono controllate in base ai flag impostati nella prima riga delle regole. Speciali caratteri opzionali posizionati dopo il carattere * aggiungono un ulteriore controllo sulla condizione.

L'<action-to-perform>specifica l'azione intrapresa quando un messaggio soddisfa una delle condizioni. È consentita una sola azione per regola. In molti casi, qui viene utilizzato il nome di una mailbox per dirigere i messaggi conformi in quel file, smistando efficacemente la emal. Prima di specificare l'azione, possono essere utilizzati alcuni caratteri per azioni speciali. Consultare la Sezione 11.4.2.4 per maggiori informazioni.

11.4.2.1. Regole di distribuzione

L'azione eseguita nel caso in cui la regola corrisponda ad un messaggio particolare, determina se la regola stessa può essere considerata per un'azione di consegna o di rifiuto della consegna. Una regola di consegna, contiene un'azione in grado di scrivere un messaggio su di un file, lo invia ad un altro programma oppure lo inoltra ad un altro indirizzo e-mail. Una regola per il rifiuto della consegna copre qualsiasi altra azione, come ad esempio il nesting block. Il nesting block rappresenta un insieme di azioni contenute tra parentesi graffe { }, eseguite sui messaggi che soddisfano le condizioni della regola. I nesting block possono essere nidificati al loro interno, garantendo così un maggiore controllo per l'identificazione e l'esecuzione delle azioni sui messaggi.

Quando i messaggi corrispondono ad una regola di consegna o di 'delivering', Procmail esegue l'azione specifica e interrompe l'azione di confronto con le altre regole. I messaggi che corrispondono alle regole per il rifiuto della consegna, continueranno ad essere confrontati con altre regole.

11.4.2.2. Flag

I flag sono molto importanti per determinare se e come le condizioni della regola sono confrontate ad un messaggio. I seguenti esempi mostrano alcuni flag comunemente usati:

  • A — Specifica che la regola sarà usata solo se anche l'ultima regola applicata senza un flag A o a è stata applicata al messaggio.

  • a — Specifica che la regola sarà usata solo se anche l'ultima regola applicata senza un flag A o a è stata applicata al messaggio ed è stata completata con successo.

  • B — Analizza il corpo del messaggio e cerca il soddisfacimento delle condizioni.

  • b — Utilizza il corpo in ogni azione risultante, come la scrittura del messaggio su un file o il suo inoltro. Tale comportamento viene eseguito per default.

  • c — Genera una copia carbone della email. Ciò risulta utile con le regole di distribuzione, poiché l'azione richiesta può essere eseguita sul messaggio e la copia dello stesso può continuare a essere elaborata nei file rc.

  • D — Fa in modo che il confronto egrep preveda il riconoscimento dei caratteri maiuscoli. Per default, il processo di confronto non lo prevede.

  • E — Simile al flag A, tranne per il fatto che le condizioni in questa regola sono confrontate con il messaggio solo se la regola immediatamente precedente senza un flag E non soddisfa le condizioni. Ciò è paragonabile a un'azione else.

  • e — La regola viene confrontata con il messaggio, solo se l'azione specificata nella regola immediatamente precedente fallisce.

  • f — Utilizza pipe come filtro.

  • H — Analizza l'intestazione del messaggio e va alla ricerca del soddisfacimento delle condizioni. Ciò viene eseguito per default.

  • h — Utilizza l'intestazione in un'azione risultante. Ciò viene eseguito per default.

  • w — Indica a Procmail di aspettare il filtro specificato o il programma per terminare, ed eseguire il reporto sull'esito dell'operazione prima di considerare il messaggio già filtrato.

  • W — È identico a w ad eccezione che i messaggi "Program failure" sono soppressi.

Per un elenco dettagliato di flag aggiuntive, consultare la pagina man procmailrc.

11.4.2.3. Specificare un file di lock locale

I Lockfile sono molto utili perché evitano il verificarsi in contemporanea di processi di alterazione su alcuni messaggi. È possibile specificare un lockfile locale, posizionando un carattere : dopo ogni flag sulla prima linea della regola. In questo modo verrà creato un lockfile locale basato sul filename di destinazione che comprende tutto ciò che è stato impostato nella variabile globale dell'ambiente LOCKEXT.

In alternativa, è possibile specificare il nome del file di lock locale da utilizzare con la regola dopo i due punti.

11.4.2.4. Condizioni e azioni speciali

Caratteri speciali utilizzati prima delle condizioni delle regole e delle azioni di Procmail cambiano la loro interpretazione.

I seguenti caratteri possono essere utilizzati dopo il carattere * all'inizio di una linea di condizione delle regole:

  • ! — Inverte le condizioni, provocando un controllo solo se le condizioni non sono applicabili al messaggio.

  • < — Controlla se il messaggio è al di sotto di un determinato numero di byte.

  • > — Controlla se il messaggio superi un determinato numero di byte.

I seguenti caratteri sono utilizzati per eseguire azioni speciali:

  • ! — Nella riga d'azione, questo carattere indica a Procmail di inoltrare il messaggio all'indirizzo e-mail specificato.

  • $ — Si riferisce a una variabile precedentemente impostata nel file rc. Questo carattere è utilizzato per impostare un comune mailbox cui faranno riferimento varie regole.

  • | — Avvia un programma specificato in modo da processare il messaggio.

  • { and } — Crea un blocco di nesting, usato per contenere regole aggiuntive da applicare ai messaggi che soddisfano le condizioni.

Se non sono utilizzati caratteri speciali all'inizio della linea d'azione, Procmail assume che quest'ultima stia specificando il mailbox sul quale scrivere il messaggio.

11.4.2.5. Esempi di regole

Procmail è un programma estremamente flessibile. Come conseguenza di questa flessibilità, tuttavia, vi è il fatto che comporre una regola per raggiungere un determinato scopo può risultare difficile per i non esperti.

Il modo migliore per sviluppare l'abilità di creare le condizioni della regola di Procmail è quello di comprendere delle espressioni regolari combinate con il controllo degli esempi creati da altri. La spiegazione approfondita delle espressioni regolari va oltre gli obbiettivi di questa sezione. La struttura delle regole di Procmail è molto più importante. Su internet sono disponibili esempi utili di regole Procmail (come ad esempio http://www.iki.fi/era/procmail/links.html). L'uso appropriato e l'adattamento delle espressioni regolari trovate negli esempi dipendono dalla comprensione della struttura delle regole Procmail. Specifiche informazioni introduttive alle espressioni regolari di base sono disponibili nella pagina man grep.

I seguenti esempi mostrano la struttura di base delle regole Procmail, e possono fornire la base per la creazione di regole più complesse.

Le regole più elementari non contengono nemmeno le condizioni, come illustrato nell'esempio riportato di seguito.

:0:
new-mail.spool

La prima linea indica che deve essere creato un lockfile locale senza però indicare il nome, in modo che Procmail possa utilizzare il file name di destinazione, indicando altresì il valore specificato nella variabile dell'ambiente LOCKEXT. Poiché non viene specificata alcuna condizione, ogni messaggio potrà soddisfare questa regola e, pertanto, sarà posizionato in un unico spool file chiamato new-mail.spool, che si trova all'interno della directory indicata dalla variabile di ambiente MAILDIR. I messaggi presenti in questo file possono quindi essere visualizzati da un MUA.

Una regola di base, come questa, può essere posizionata alla fine di ogni file rc, in modo da dirigere i messaggi in una posizione di default.

Il seguente esempio corrisponde a messaggi provenienti da un indirizzo email specifico, che successivamente vengono eliminati.

:0
* ^From: spammer@domain.com
/dev/null

In questo esempio, ogni messaggio inviato da spammer@domain.com viene immediatamente inviato nel dispositivo /dev/null, con una conseguente eliminazione.

CautelaAttenzione
 

Assicurarsi che una regola funzioni correttamente prima di spostare i messaggi che la soddisfano in /dev/null, poiché la cancellazione è definitiva. Se le condizioni della vostra regola trovano inavvertitamente dei messaggi da non sottoporre al controllo, e i suddetti messaggi vengono eliminati, diventerà difficile risolvere la regola.

La soluzione migliore è indirizzare l'azione verso un mailbox speciale che potrete controllare di volta in volta per cercare falsi positivi. Una volta certi che non vi siano messaggi controllati inavvertitamente, potete cancellare il mailbox e dirigere l'azione in modo da inviare i messaggi a /dev/null.

La seguente regola riceve i messaggi inviati da una mailing list particolare e li posiziona in una cartella particolare.

:0:
* ^(From|CC|To).*tux-lug
tuxlug

Qualsiasi messaggio inviato dalla mailing list tux-lug@domain.com sarà posizionato automaticamente nel mailbox tuxlug per il MUA. La condizione in questo esempio controllerà il messaggio se l'indirizzo e-mail della mailing list si trova sulle linee From, CC oppure To.

Consultate le risorse online di Procmail, disponibili su la Sezione 11.6 per regole più specifiche e potenti.

11.4.2.6. Filtri Spam

Poichè viene chiamato da Sendmail, Postfix, e Fetchmail quando si ricevono nuove email, Procmail puó essere usato come potente strumento contro lo spam.

Questo é particolarmente vero quando Procmail é usato in combinazione con SpamAssassin. Quando usati insieme, queste due applicazioni possono identificare velocemente email spam, separandole oppure eliminandole.

SpamAssassin usa l'analisi d'intestazione, di testo, blacklist, un database spam-tracking, e un'analisi spam self-learning Bayesian per identificare accuratamente e velocemente ed etichettare le email spam.

Il modo piú facile per un utente locale di usare SpamAssassin, é di posizionare la seguente riga vicino al limite superiore del file ~/.procmailrc:

INCLUDERC=/etc/mail/spamassassin/spamassassin-default.rc

Il /etc/mail/spamassassin/spamassassin-default.rc contiene una regola Procmail semplice in grado di attivare SpamAssassin per tutte le email in arrivo. Se una email viene determinata essere spam, viene etichettata nell'intestazione, e il titolo viene mostrato in questo modo:

*****SPAM*****

Il messaggio della email viene presentato con un riscontro corrente dell'elemento che ha causato il motivo per il quale la email é stata considerata spam.

Per archiviare una email etichettata come spam, puó essere usata una regola simile alla seguente:

:0 Hw
* ^X-Spam-Status: Yes
spam

Questa regola archivia tutte le email etichettate nell'intestazione, come spam in un mailbox chiamato spam.

Poichè SpamAssassin é uno script Perl, puó essere necessario su server molto occupati, di usare il demone SpamAssassin binario (spamd) e l'applicazione client (spamc). Configurando SpamAssassin in questo modo, tuttavia, richiede un accesso root per la host.

Per avviare il demone spamd, digitare il seguente comando come un utente root:

/sbin/service spamassassin start

Per avviare il demone SpamAssassin quando il sistema viene avviato, usare una utility initscript, come ad esempio il Strumento di configurazione dei servizi (redhat-config-services), per abilitare il servizio spamassassin. Consultate la Sezione 1.4.2 per maggiori informazioni sulle utility initscript.

Per configurare Procmail in modo da usare l'applicazione client SpamAssassin invece dello script Perl, posizionare le seguenti righe vicino alla parte superiore del file ~/.procmailrc. Per una configurazione dell'intero sistema, posizionarlo in /etc/procmailrc:

INCLUDERC=/etc/mail/spamassassin/spamassassin-spamc.rc