Mail filter with procmailrc

Ormai sono anni che affido il servizio di posta al mio mail server, che poi non è un server di posta reale ma preleva da tutti i miei account via POP3 e conserva nella macchina, mettendo a disposizione il tutto attraverso IMAP.

Per motivi di sicurezza IMAP è chiuso all’esterno e così mi appoggio ad altri servizia installati sulla macchina, con apache2,php e mysql che mi rendono accessibile la mia posta via web su https in luoghi diversi e con diversi sistemi operativi da GNU/Linux a Win passando pure per Android.

Da anni uso group-office nella versione comunity, davvero un buon prodotto che offre più di un client di posta, ma da qualche tempo sto usando anche mutt per la visione della posta mentre mi collego via SSH e qui ho lasciato qualche traccia .

Ora considerando che da qualche giorno mi è venuto il pallino di provare qualcosa di nuovo, ho ritirato fuori roundcube che mi è sembrato brutto come quando lo provai diversi anni fa, infine ho provato webmail di afterlogic nella versione comunity PHP che sembra ususfruire di : Built on the latest HTML5 and CSS3 technology.

Vediamo ora di entrare nel problema che mi ha messo in movimento, usando group-office ho a disposizione diversi filtri per la posta, così che le mail vanno a finire al proprio posto ma quando mi trovo ad usare un’altra applicazione la posta viene tutta  messa in INBOX, serve un filtro a priori !!!

Ecco arrivare procmail con il file di configurazione procmailrc !

LINK all’ immagine : http://i.imgur.com/8TlDYTH.jpg

vediamo ora come fare smistare la posta nel posto giusto con diverse condizioni che vanno dal soggeto al mittente destinatario e altro ancora.

Cominciando il discorso pensando che sulla macchina sia già attivo procmail e configurato senza filtri (link), a questo punto dovremo solo aggiungere alcune direttive.

Apriamo il filtro con una riga che dice a procmail di cercare qualcosa

:0:

Successivamente inseriamo le direttive per la ricerca e per fare questo ci aiuteremo con le espressioni regolari.

RegExp | Meaning 
-------+----------------------------------------- 
.      | Matches any character (except newlines) 
^      | Beginning of a line 
.*     | Wildcard: matches anything

Per perseguire il nostro scopo useremo due tipi di ricerca

* ^Subject:           #in base al soggetto
* ^(From|Cc|To)       #in base a mittente, destinatario o copia per conoscenza.

seguita dai valori per la ricerca.

Infine inseriamo l’indirizzo di dove mettere la mail nel caso risponda positivamente al filtro, e nel nostro caso usando IMAP con  il formato Maildir

.miadir
.miadir.sottodir/

Passiamo ora ad un esempio :

:0:
* ^Subject:.* spam
.Spam/

In questo caso tutte le mail che riportano nel soggetto il termine spam (case insensitive) vengono inserite nella dir Spam.

Ora raccolgo alcune mail di sistema :

:0:
* ^(From|To).*(root|mserver|zyxel)
.Puppa.Sistema/

Qui la regola cerca di individuare se tra i mittenti o destinatari sono presenti alcuni termini di ricerca, se anche solo uno corrisponde, la mail viene spostata nella sottodirectory Sistema in Puppa.

Ricordando che i filtri sono a caduta, la sequenza dovrà essere impostata in fase di scritturamettendo a monte i filtri che dovranno lavorare per primi.

Dopo aver inserito i miei filtri ho trovato che esiste pure una GUI, attraverso webmin che ho installato sul server.

puppa1

Poteva essere un’alternativa ma per il poco lavoro non era necessaria e per certe cose trovo aberrante usare webmin.

 

Procmail può fare molto di più di quanto fino ad ora discusso, un’ anno fa circa, prima di abbandonare mailscanner per passare a amavisd-new avevo pensato di far filtrare la poca posta che mi arriva proprio a procmailrc.

Oltre che a semplici filtri e possibile eseguire altre applicazioni come spamassassin o clamav, ma i test fatti non mi avevano convinto e causa la mia incapacità ho abbandonato l’idea ma ho conservato alcuni appunti disordinati a riguardo.

Prova con spamassassin che è configurato in modo che se la mail viene riconosciuta come Spam, viene aggiunto agli header della mail il testo “spam

## SPAMASSASSIN ##  
## Prima di consegnare le mail, le filtriamo tutte con spamassassin 
:0fw:
| spamassassin  
  
# Poi salviamo lo spam in una cartella a parte denominata Spam/
# Lo spam  dientificato da un controllo negli header sul campo
# X-Spam-Status agiunto da spamassassin quando la mail viene analizzata 
   
:0:
* ^X-Spam-Status: Yes 
.Spam/

Di seguito viene affidato a Clamav il controllo degli allegati alla ricerca di virus.

###  CLAMAV  ### 
   
# We'll scan the mail with clam using the standard input, and saving the result on the AV_REPORT variable
AV_REPORT=`clamdscan --stdout --no-summary - |sed 's/^stream: //'` 
   
# We check if the word FOUND was in the result and save "Yes" or "No" according to that 
VIRUS=`echo $AV_REPORT|sed '/FOUND/ { s/.*/Yes/; q  };  /FOUND/  !s/.*/No/'
 
# formail is a filter that can alter a mail message, while keeping the correct format. We use it here to add/alter a header called  
# X-Virus with either value Yes or No  
:0fw 
| formail -i "X-Virus: $VIRUS"
    
# And if we just added "X-Virus: Yes", we will also add another header with the scan result, and alter the subject, again, with the scan result.
# Since we are using the f flag, the mail is going to be delivered anyway.
:0fw
* ^X-Virus: Yes 
| formail -i "X-Virus-Report: $AV_REPORT" -i "Subject: [Virus] $AV_REPORT"
  
#Remove Virus mail 
:0:
* ^Subject:.*Virus 
/dev/null

In giro si trova diverso materiale da leggere, di seguito alcuni ottimi link :

https://www.debian-administration.org/article/242/Filtering_mail_with_procmail

http://userpages.umbc.edu/~ian/procmail.html

http://linuxguide.sourceforge.net/linux-procmail.html

http://perlcode.org/tutorials/procmail/proctut

 

Per chi volesse divertirsi questo è un link da leccarsi le dita : http://www.mrshark.it/qechowto/procmail.html

Rispondi