Installazione di Spamassassin con Razor e Exim3 su Sarge

Configurazione di Spamassassin

ENABLED=1
OPTIONS="--create-prefs --max-children 5 --helper-home-dir -x -c -u mail"
PIDFILE="/tmp/spamd.pid"

score   HABEAS_SWE              0.1
score   RAZOR2_CF_RANGE_51_100  3.0

Configurazione di Razor

logic_method = 4
logfile = sys-syslog (questo non funziona attualmente)
ignorelist = 1
report_headers = 0

# 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 = spamassassin

Inoltre, 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.

LinuxDebian/SpamAssassin (last edited 2009-04-12 17:33:25 by localhost)