NOTE: CentOS Enterprise Linux is built from the Red Hat Enterprise Linux source code. Other than logo and name changes CentOS Enterprise Linux is compatible with the equivalent Red Hat version. This document applies equally to both Red Hat and CentOS Enterprise Linux.
Linuxtopia - CentOS Enterprise Linux Reference Guide - 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:
DEFAULT — Imposta il mailbox di default in cui saranno posizionati i messaggi che non soddisfano le regole.
Il valore di default DEFAULT � uguale a $ORGMAIL.
INCLUDERC — Specifica i file rc aggiuntivi che contengono ulteriori regole per i messaggi da controllare. Ci� consente di separare gli elenchi delle regole in due singoli file che svolgono funzioni differenti, per esempio il blocco degli spam o la gestione delle mailing list, le quali sono attivabili o disattivabili utilizzando i caratteri commento nel file utente .procmailrc.
Il seguente potrebbe essere un esempio di righe in un file utente .procmailrc:
Se l'utente desidera disabilitare il filtro Procmail sugli elenchi di posta ma lasciare attivo il controllo degli spam, pu� semplicemente inserire il carattere [#] nella riga INCLUDERC.
LOCKSLEEP — Imposta l'intervallo di tempo, in secondi, che intercorre tra un tentativo e l'altro di Procmail, di utilizzare un particolare file di blocco. Il tempo predefinito � di otto secondi.
LOCKTIMEOUT — Imposta l'intervallo di tempo, in secondi, che deve trascorrere dopo l'ultima modifica di un file di blocco perch� Procmail assume che tale file sia vecchio e possa essere eliminato. Il tempo predefinito � di 1024 secondi.
LOGFILE — Posizione e file che contengono i messaggi informativi e di errore di Procmail.
MAILDIR — Imposta la directory correntemente in uso per Procmail. Se impostata, tutti gli altri percorsi di Procmail sono legati a questa directory.
ORGMAIL — Specifica il mailbox originale o qualsiasi altro luogo dove posizionare i messaggi qualora non fosse possibile usare la posizione di default o quella richiesta dalle regole.
Per default, viene usato un valore di /var/spool/mail/$LOGNAME.
SUSPEND — Imposta l'intervallo, in secondi, che Procmail utilizzer� come pausa se una risorsa necessaria, come per esempio lo spazio swap, non � disponibile.
SWITCHRC — Consente all'utente di specificare un file esterno contenente regole Procmail aggiuntive, molto simile all'opzione INCLUDERC, tranne per la verifica delle regole, che di fatto termina sul file di configurazione di riferimento, causando l'utilizzazione delle regole sul file SWITCHRC specificato.
VERBOSE — Consente a Procmail di registrare una maggiore quantit� d'informazioni. Questa opzione si rivela utile per il debugging.
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.
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 https://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.
In questo esempio, ogni messaggio inviato da [email protected] viene immediatamente inviato nel dispositivo /dev/null, con una conseguente eliminazione.
Attenzione
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 [email protected] 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:
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: