Red Hat Linux include due MDA primari, Procmail e mail. Entrambe le applicazioni sono considerate Local Delivery Agent ed entrambi muovono le email dal file spool dell'MTA nella mailbox dell'utente. Tuttavia, Procmail fornisce un robusto sistema di filtraggio.
Questa sezione parla in modo dettagliato solo di 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 molti modi differenti. Dato che la posta elettronica viene posizionata nel file spool, Procmail può essere configurato per avviare, filtrare la posta nelle posizioni configurate per l'uso con il MUA e lasciare l'applicazione. In alternativa il MUA potrebbe essere configurato per richiamare Procmail ogni volta che si riceve un messaggio, così che i messaggi siano archiviati nelle corrette mailbox. Per default, la presenza del file .procmailrc nella home directory utente richiamerà Procmail, nel caso in cui un MTA riceve un nuovo messaggio.
Le azioni eseguite da Procmail con i messaggi e-mail dipendono da istruzioni incluse in particolari regole, che predispongono il confronto dei messaggi a opera del sistema. Se un messaggio soddisfa i requisiti necessari, verrà posizionato in un certo file, eliminato o elaborato.
Una volta avviato, Procmail legge il messaggio e-mail e separa il corpo del testo dall'informazione dell'intestazione. Successivamente, Procmail cerca, di default, il file /etc/procmailrc e i file rc nella directory /etc/procmailrcs per le regole e le variabili di sistema dell'ambiente Procmail. Procmail cerca quindi un file .procmailrc nella directory home per cercare le regole specifiche per quell'utente. Molti utenti creano anche file rc aggiuntivi personali cui fa riferimento il file .procmailrc e che sono velocemente abilitati o disabilitati al verificarsi di problemi relativi al filtraggio della posta.
Per default, non esiste alcun file rc nella directory /etc e non vi sono nemmeno file utente .procmailrc. Per iniziare a usare Procmail, sarà necessario creare un file .procmailrc con particolari variabili e regole di ambiente che spiegano ciò che si desidera fare con determinati messaggi.
Nella maggior parte dei casi, la scelta di configurare Procmail per filtrare la posta elettronica dipende dall'esistenza di un file utente .procmailrc. Per disabilitare Procmail, salvando però il lavoro eseguito sul file .procmailrc, spostatelo in un file dal nome simile usando il comando mv ~/.procmailrc ~/.procmailrcSAVE. Quando sarete pronti a verificare nuovamente Procmail, cambiate il nome del file in .procmailrc. Procmail sarà pronto per il funzionamento immediato.
I file di configurazione di Procmail, molto probabilmente il file .procmailrc dell'utente, contengono molte variabili di ambiente importanti. Tali variabili istruiscono Procmail sullo smistamento dei messaggi, sul suo comportamento nei confronti dei messaggi che non soddisfano le regole e così via.
Queste variabili di ambiente compaiono in genere all'inizio del file .procmailrc, nel seguente formato:
<env-variable>="<value>" |
In questo esempio, <variabile-amb> è il nome della variabile e <valore> la sezione che la definisce.
La maggior parte degli utenti Procmail non utilizza molte variabili, anche se molte delle più importanti sono già definite come valore di default. Spesso vi troverete di fronte le variabili seguenti:
DEFAULT — imposta la mailbox di default in 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:
MAILDIR=$HOME/Msgs INCLUDERC=$MAILDIR/lists.rc INCLUDERC=$MAILDIR/spam.rc |
Se l'utente desidera disabilitare il filtro Procmail sugli
elenchi di posta ma lasciare attivo il controllo degli spam,
può semplicemente inserire il carattere
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 supponga 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 la 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, è usato un valore di /var/spool/mail/$LOGNAME.
SUSPEND — imposta l'intervallo temporale, 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 della configurazione di riferimento, e poiché sono utilizzate solo le 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 importanti variabili di ambiente sono prelevate dalla shell, fra queste LOGNAME, che corrisponde al vostro nome di login, HOME, ovvero la posizione della vostra directory home 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.
Per molti nuovi utenti, la costruzione delle regole rappresenta la parte più complicata di usare 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.
Una spiegazione approfondita delle espressioni regolari esula dagli obiettivi di questo capitolo e pertanto non verrà trattata. La struttura delle regole di Procmail è molto più importante. Su internet sono disponibili utili esempi di regole Procmail. Fra i vari siti si consiglia 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.
Una regola Procmail ha la seguente forma:
: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 diversi flag per il controllo dell'attività di Procmail durante l'elaborazione di quella regola. La presenza dei due punti dopo la sezione <flag> indica che per quel messaggio sarà creato un file di blocco. L'utente dovrà specificare il nome del file nello spazio <nome-file-lock>.
Una regola puó contenere diverse condizioni per corrispondere al messaggio. 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'<azione-da-svolgere> specifica cosa succede a un messaggio che 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 posta. Prima che venga specificata l'azione, possono essere utilizzati caratteri per azioni speciali.
L'azione eseguita se la regola si applica a un particolare messaggio determina se la regola stessa è considerata per la distribuzione o meno. Una regola per la distribuzione contiene un'azione che scrive un messaggio su un file, lo invia a un altro programma oppure lo inoltra a un altro indirizzo e-mail. Una regole non per la distribuzione copre qualsiasi altra azione, come il blocco del nesting. Il blocco di nesting è un'azione contenuta fra parentesi graffe {} che designa azioni aggiuntive da eseguire sui messaggi che soddisfano le condizioni della regola. I blocchi di nesting possono essere gerarchizzati, garantendo così un maggiore controllo per l'identificazione e l'esecuzione di azioni sui messaggi.
Le regole di distribuzione che si applicano ai messaggi consentono a Procmail di eseguire l'azione specificata e di terminare il confronto del messaggio con altre regole. I messaggi che soddisfano le condizioni delle regole di non distribuzione continueranno a essere confrontati con altre regole nei successivi file rc correnti. In altre parole, queste ultime regole consentono al messaggio di continuare il controllo delle regole dopo il verificarsi dell'azione specificata.
I flag sono molto importanti per determinare se e come le condizioni della regola sono applicate al 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.
Prima di consentire un controllo con la regola corrente, usate il flag a per assicurarvi che l'azione sull'ultima regola applicata sia 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 posta. 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.
Utilizzate, invece, il flag e se desiderate solo sottoporre al controllo la regola nel caso in cui quella precedente fosse soddisfacente ma l'azione fosse fallita.
f — utilizza pipe come filtro.
H — analizza l'intestazione del messaggio e cerca il 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 report sull'esito dell'operazione prima di considerare filtrato il messaggio.
Usate, invece, l'opzione W se desiderate ignorare i messaggi "Program failure" quando decidete se un filtro o un'azione sono riusciti.
Flag aggiuntivi sono disponibili nella pagina man procmailrc.
I file di lock sono molto utili perché evitano il verificarsi contemporaneo di processi di alterazione su certi messaggi. È possibile specificare un file di lock locale posizionando un carattere : dopo ogni flag sulla prima linea della regola. In questo modo verrà creato un file di lock locale basato sul filename di destinazione comprensivo di tutto ciò che è stato impostato nella variabile globale LOCKEXT.
In alternativa, è possibile specificare il nome del file di lock locale da utilizzare con la regola dopo i due punti.
Caratteri specifici 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 delle condizioni delle regole:
! — inverte le condizioni, provocando un controllo solo se le condizioni non sono applicabili al messaggio.
< — controlla che il messaggio non superi un determinato numero di byte.
> — Controlla che il messaggio superi un determinato numero di byte.
I seguenti caratteri sono utilizzati per eseguire azioni speciali:
! — 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 una comune mailbox cui faranno riferimento varie regole.
| — il carattere pipe indica a Procmail di avviare un programma specifico per il messaggio.
{ e } — 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 dell'azione, Procmail presume che quest'ultima stia specificando la mailbox in cui scrivere il messaggio.
Procmail è un programma estremamente flessibile che consente agli utenti di confrontare i messaggi con delle condizioni molto specifiche e di eseguire su di essi azioni dettagliate. 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 miglior modo per sviluppare le abilità per creare le condizioni delle regole Procmail deriva da una profonda comprensione delle espressioni regolari e dall'osservazione degli esempi forniti. I seguenti esempi di semplice comprensione servono come dimostrazione della struttura delle regole Procmail e possono fornire le basi per costrutti più complicati.
Le regole più elementari non contengono nemmeno le condizioni, come illustrato nell'esempio riportato di seguito.
:0: new-mail.spool |
La prima linea inizia la regola specificando che deve essere creato un file di lock locale senza indicarne il nome, lasciando che Procmail utilizzi il filename di destinazione e il LOCKEXT per nominarlo. Poiché non viene specificata alcuna condizione, ogni messaggio potrà soddisfare questa regola e, pertanto, sarà posizionato in un unico file di spool chiamato new-mail.spool e nella directory indicata dalla variabile di ambiente MAILDIR. I messaggi in questo file possono quindi essere visualizzati da un MUA.
Questa regola di base può posizionarsi alla fine di tutti i file rc per indirizzare i messaggi in una posizione predefinita. Un altro esempio, più complesso, è in grado di afferrare i messaggi provenienti da un particolare indirizzo e-mail ed eliminarli, come si può osservare nell'esempio seguente.
:0 * ^From: spammer@domain.com /dev/null |
In questo esempio, ogni messaggio inviato da spammer@domain.com viene immediatamente spostato in /dev/null, con 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 un messaggio da non sottoporre al controllo, non sarete nemmeno informati della perdita del messaggio, a meno che non vi provveda il mittente. La soluzione migliore è indirizzare l'azione verso una mailbox speciale che potrete controllare di volta in volta per cercare falsi positivi, oppure messaggi che soddisfano inavvertitamente le condizioni. Una volta certi che non vi siano messaggi controllati inavvertitamente, potete cancellare la mailbox e dirigere l'azione per inviare i messaggi a /dev/null. |
Procmail è usato principalmente come filtro per le e-mail, poiché è in grado di assegnare loro, automaticamente, la posizione appropriata così da non doverle smistare manualmente. La regola riportata nell'esempio seguente individua le e-mail inviate da una mailing list particolare e le mette nella cartella corretta per voi.
:0: * ^(From|CC|To).*tux-lug tuxlug |
Qualsiasi messaggio inviato dalla mailing list tux-lug@domain.com sarà posizionato automaticamente nella mailbox tuxlug per il MUA. La condizione in quest'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 poter vedere regole piú dettagliate e potenti.
Dato che viene chiamato da Sendmail, Postfix, e Fetchmail quando si ricevono nuove email, Procmail puó essere usato come potente strumento contro 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 e un database spam-tracking, per identificare accuratamente e velocemente e 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 semplicein 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.
Dato che 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 permettere al demone SpamAssassin di iniziare quando il sistema si avvia, usare una utility initscript, come ad esempio il Strumento di configurazione dei servizi (redhat-config-services), per eseguirlo sul servizio spamassassin. Consultare la Sezione 1.4.2 per maggiori informazioni sulle utility iniscript.
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 o per una configurazione dell'intero sistema, posizionarlo in /etc/procmailrc:
INCLUDERC=/etc/mail/spamassassin/spamassassin-spamc.rc |