Installazione di Spamassassin con Razor e Exim3 su Sarge
- Questa e` una configurazione per usare un unico database bayesiano per tutti gli utenti del sistema. Prima di tutto, installare i seguenti pacchetti e relative dipendenze:
- spamassassin
- razor
Configurazione di Spamassassin
Editare il file /etc/default/spamassassin e modificarlo come indicato. Lo scopo e` far girare tutto come utente "mail".
ENABLED=1 OPTIONS="--create-prefs --max-children 5 --helper-home-dir -x -c -u mail" PIDFILE="/tmp/spamd.pid"
Volendo, modificare il file /etc/spamassassin/local.cf per modificare i punteggi. Il mio attuale e` modificato per aumentare il punteggio di Razor e diminuire quello di Habeas, il quale viene puntualmente abusato.
score HABEAS_SWE 0.1 score RAZOR2_CF_RANGE_51_100 3.0
Configurazione di Razor
Editare il file /etc/razor/razor-agent.conf modificandolo come segue:
logic_method = 4 logfile = sys-syslog (questo non funziona attualmente) ignorelist = 1 report_headers = 0
- Configurare Razor per la prima volta, come utente "mail", visto che poi girera` sempre come utente "mail".
# su - mail $ razor-admin -create $ razor-admin -discover $ razor-admin -register
Configurazione di Exim 4
*** Questa configurazione non e' stata provata, ma sono ragionevolmente sicuro che funziona. Per "istruire" SpamAssassin si possono seguire le istruzioni riportare per exim3. ***
Exim4 e' profondamente diverso dal exim3, in particolare si possono usare le ACL per fare quasi tutto. Il grosso vantaggio e' che in questo modo il messaggio non passa due volte per exim, ma viene controllato in fase di ricezione. Prima di tutto bisogna dire ad exim4 di usare la nostra ACL dopo aver finito di ricevere il messaggio specificando:
acl_smtp_data = acl_check_spam
A questo punto definiamo l'utente da usare con SpamAssassin, nobody in questo caso perche' abbiamo una configurazione con un solo utente; l'aggiunta di defer_ok fa si che in caso di problemi con SpamAssassin il messaggio venga comunque accettato. Per questioni di prestazione controlliamo lo spam solo su messaggi piu' corti di 42k. Nel caso che sia stata superata la soglia definita per lo spam, viene aggiunta la riga di intestazione X-Spam-Report: con il report di SpamAssassin e tra parentesi il punteggio. Se viene usato un client che non puo' filtrare i messaggi in base agli header (tipo OE) potete modificare direttamente l'oggetto commentando la riga "warn message = X-Spam-Report..." e togliendo il commento alla riga "warn message = Subject...".
ATTENZIONE: questa ACL di default e' deny, quindi se non venisse messo il comando "accept" in fondo, tutti i messaggi verrebbero rifiutati.
acl_check_spam:
# warn message = Subject: **SPAM** $h_Subject:
warn message = X-Spam-Report: $spam_report (Score: $spam_score)
condition = ${if < {$message_size}{42K}}
spam = nobody/defer_ok
accept
Configurazione di Exim 3
Per la configurazione di Exim 3, occorre aggiungere una serie di cose. Prima di tutto, un trasporto per mandare le mail a spamassassin. Nella sezione dei TRANSPORTS, inserire questo:
spamassassin:
driver = pipe
command = /usr/sbin/exim -oMr spam-scanned -bS
transport_filter = /usr/bin/spamc
bsmtp = all
home_directory = "/tmp"
current_directory = "/tmp"
# must use a privileged user to set $received_protocol on the way back in!
user = mail
group = mail
return_path_add = false
log_output = true
return_fail_output = true
prefix =
suffix =Poi, nella sezione dei director, occorre inserire il director che manda la roba al trasporto indicato sopra. Qui la posizione conta, io l'ho messo dopo "real-local"
spamassassin_director:
no_verify
condition = "${if and { {!def:h_X-Spam-Flag:} {!eq {$received_protocol}{spam-scanned}} } {1}{0}}"
driver = smartuser
transport = spamassassinInoltre, subito dopo quello che manda la roba a spamassassin, se ne puo` aggiungere uno che, se la mail e` stata considerata spam, ne fa qualcosa di diverso invece di inoltrarla lo stesso all'utente. Io la mando tutta all'utente "spam", creato apposta per lo scopo.
butta_spam_director:
no_verify
driver = smartuser
condition = "${if and { {def:h_X-Spam-Flag:} {eq {$received_protocol}{spam-scanned}} } {1}{0}}"
new_address = real-spam@<metti il tuo dominio qui>Questo ovviamente richiede di avere creato un utente di mail che si chiama "spam", altrimenti succede un casino di bounce mica da ridere.
Configurazione degli alias per insegnare al filtro bayesiano
Questa e` facoltativa, ma puo` essere comodo insegnare al filtro bayesiano cosa e` spam e cosa no. Questo sistema tra l'altro riporta anche lo spam a Razor.
Nel file "/etc/aliasas" o in altro file di alias globale, inserire due righe cosi`:
bayes: | spamassassin -r revoke: | spamassassin -k
In questo modo, mandando una mail (usando la funzione di "redirect" e NON REPLY o FORWARD del programma di posta, in modo da non alterarne il contenuto) a "bayes@<il tuo dominio>" si insegna al filtro che quella mail e` spam. Mandandola a "revoke@<il tuo dominio>" si insegna che quella mail non e` spam.
Nella configurazione standard di Exim questo riporta un "delivery failure" che in realta` contiene la risposta di Spamassassin al filtraggio. Volendo si puo` evitarlo, ma per me e` comodo.