SpamAssassin è un mail filter che permette di identificare lo spamming attraverso l'analisi del testo e degli headers di un messaggio di posta, oltre ad appoggiarsi a RBL pubbliche, a liste Black e White automatiche, filtri baynesiani ed a database basati su spam-tracking collaborativo come Razor.
Il metodo di valutazione se un messaggio è da considerarsi spam è euristico, vengono assegnati diversi punteggi (configurabili) a diversi elementi e si definisce una soglia limite oltre il quale il messaggio viene considerato spam.
E' scritto in Perl ed è installabile anche tramite la shell interattiva di CPAN.
La configurazione di base è piuttosto semplice e i parametri di default sono validi per molte occasioni, può essere applicato ad un singolo utente o ad un intero server di posta e può essere configurato per filtrare la posta sia al momento del delivery locale (tipicamente tramite Procmail) che durante la ricezione da parte del server SMTP.
Installazione
SpamAssassin viene fornito di default su molte distribuzioni Linux e, in questi casi la sua installazione viene fatta tramite pacchetto RPM o DEB.
Alternativamente è possibile installarlo tramite CPAN (come root):
[root@giraffa al]# perl -MCPAN -e shell
cpan> o conf prerequisites_policy ask
cpan> install Mail::SpamAssassin
cpan> quit
Su Perl 5.8 o successivi e, per esempio, da RedHat 8 in poi, viene supportato l'Unicode di default che può creare problemi su vari script Perl (SpamAssassin incluso) e non solo.
Per evitarlo impostare la variabile d'ambiente LANG a en_US (export LANG=en_US
) o altre lingue senza specificare "utf8". Su RedHat editare il file di configurazione /etc/sysconfig/i18n
Utilizzo
SpamAssassin è di fatto un filtro, accetta in STDIN un messaggio di posta, lo analizza e lo manda su STDOUT aggiungendo degli header che definiscono se viene considerato Spam e con quali "punteggi".
Il sistema può funzionare direttamente come comando autonomo (spamassassin
) o come sistema client (spamc
) - server (spamd
), decisamente più performante e raccomandabile su configurazioni system-wide.
Nel pacchetto sono già forniti gli script per gestire il servizio (tipo /etc/init.d/spamassassin start|stop
).
Il filtro, in se, si limita ad aggiungere degli header custom al messaggio di posta che definiscono il "punteggio di spam" assegnato.
Configurazione
A questo punto è opportuno configurare un sistema per utilizzare SpamAssassin. Agire a livello di Procmail è generalmente considerata la scelta più comoda, anche se non ci impedisce di occupare banda con mail di spam quantomeno può alleviare l'utente finale dalla loro ricezione.
Procmail può essere configurato globalmente, con /etc/procmailrc
e/o per singolo utente (~/.procmailrc
), permette di impostare una gran varietà di regole per gestire il delivery della posta secondo diverse condizioni.
Ecco un esempio di /etc/procmailrc
che redirige ad un unica casella postale (qui chiamata "spam") tutte le mail che Spamassassin considera spam:
DROPPRIVS=yes SI forza Procmail a non eseguire il controllo come utente root. Verificare con attenzione tutti i permessi sui file (log e mailbox) su cui deve intervenire
LOGFILE=/var/log/procmail.log Il file di log di Procmail
# VERBOSE=yes Abilitare il verbose logging è fondamentale per operazione di troubleshhoting
# INCLUDERC=$HOME/.procmailrc Se si vuole è possibile specificare un file di configurazione custom per ogni utente
:0fw Prima regola di procmail...
* < 256000 ... si applica a tutti i messaggi di dimensioni inferiori a 256 K
| spamc -f I messaggi vegnono indicati al client di SpamAssassin (il server spamd deve essere running)
:0:/tmp/spam.lock Seconda regola, la definizione di un lock file specifico è opzionale
* ^X-Spam-Flag: YES Matching per mail che nel testo hanno una riga che inizia (^) con X-Spam-Flag: YES (questo header viene automaticamente aggiunto da spamc se la mail viene considerata spam)
/var/spool/mail/spam Se la condizione è verificata la mail viene direzionata sul file indicato