Table of Contents
Spamassassin e ClamAV
Appunti per Debian Woody e Debian Sarge, con server SMTP Exim.
Spamassassin
Si desidera far girare la versione daemon di spamassassin (spamd
) che resta in ascolto sulla porta 783 tcp. Exim chiamerà spamc
(il client) per filtrare le mail locali prima di consegnarle.
Per l'avvio del demone spamd
si mette ENABLED=1
in /etc/default/spamassassin
.
Con Spamassassin versione 2 è necessario anche impostare OPTIONS=“-F 0”
per rimuovere la linea “From ”
all'inizio della mail. Questo perché le mail filtrate verranno nuovamente passate ad Exim. In presenza del “From ” Exim riscriverebbe gli header della mail considerando tutto il testo originale (header compresi) come body. Tolta invece l'opzione -c
proposta da Debian, altrimenti spamd
tenta di creare un file con le user pref nella home dell'utente. Nel nostro caso spamd viene chiamato prima del delivery come utente mail, non come utente finale e le preferenze cadrebbero tutte in /var/mail/
.
Con Spamassassin versione 3 si consiglia OPTIONS=“–max-children 5 –helper-home-dir”
, si toglie invece l'opzione –create-prefs
, come per la versione 2 (vedere spamd(8)
per le opzioni).
La configurazione di spamassassin (come e cosa controllare) è in /etc/spamassassin/local.cf
. Ecco un esempio per una versione 3:
# See 'perldoc Mail::SpamAssassin::Conf' for details of what can be # tweaked. # Use a more efficient, but non-NFS-safe, locking mechanism. lock_method flock # Hits required before a mail is considered spam. Default: 5 required_hits 4.5 # The subject lines of suspected spam will be tagged. rewrite_header Subject *****SPAM***** # Incoming spam is only modified by adding some "X-Spam-" # headers and no changes will be made to the body. report_safe 0 # Whitelist mail from Tripwire. header LOCAL_RCVD Received =~ /from localhost \(\[127.0.0.1\] helo=.*\)\s.*\sfor <root\@localhost>/ describe LOCAL_RCVD Received from localhost score LOCAL_RCVD -5 # Blacklist messages where Sanitized found a virus. body SANITIZED /^\*\*\*\*\*ANTIVIRUS\*\*\*\*\*/ describe SANITIZED Sanitizer removed a virus from the message score SANITIZED 10
File di configurazione
I file di configurazione vengono cercati in /etc/spamassassin/
. Per prima cosa SpamAssassin (solo la versione 3) cerca dei file con estensione *.pre
, poi vengono cercati i file con estensione *.cf
. I file vengono considerati in ordine alfabetico. Nei file di configurazione si può anche sfruttare la direttiva include
.
Collegamento a Exim 3
In /etc/exim/exim.conf
si definisce un director spamcheck_director
che viene messo per primo, così ogni mail locale - se soddisfa le condizioni - viene gestita da questo director e passata allo spamcheck_transport
.
spamcheck_director: # Do not use this director when verifying a local-part at SMTP-time no_verify # When to scan a message : # - it isn't already flagged as spam # - it isn't already scanned # - it didn't originate locally (as long as I don't harbor spammers :-)) # - $local_part is in /etc/exim/spam_check_mbox condition = "${if and { {!def:h_X-Spam-Flag:} {!eq {$received_protocol}{spam-scanned}} {!eq {$received_protoc driver = smartuser transport = spamcheck_transport
Tra le condizioni che devono essere vere per filtrare il messaggio c'è che la local_part
dell'indirizzo (a sinistra
della “@”) deve essere presente in /etc/exim/spam_check_mbox
.
Lo spamcheck_transport
filtra il messaggio con spamd
e poi lo ripresenta ad Exim:
spamcheck_transport: driver = pipe command = "/usr/sbin/exim -oMr spam-scanned -bS" bsmtp = all transport_filter = "/usr/bin/spamc -f" home_directory = "/tmp" current_directory = "/tmp" # Must use a privileged user to set $received_protocol on the way back in! user = mail group = mail log_output = true return_fail_output = true return_path_add = false prefix = suffix =
L'opzione -f
di spamc
è valida per la versione 2 di Spamassassin, indica che il messaggio deve comunque passare se per caso il demone spamd
fallisce l'esecuzione.
Collegamento a Exim 4
Ecco i file di configurazione per un Exim4 e Spamassassin 3. Anche questa configurazione consente di applicare il filtro SpamAssassin in modo selettivo alle mail in arrivo. Bisogna definire un router che seleziona le mail in arrivo da filtrare. Il router deve comparire prima degli altri:
### router/010_local-spamcheck ################################# # SpamAssassin router spamcheck_router: no_verify check_local_user # When to scan a message : # - it isn't already flagged as spam # - it isn't already scanned # - .spamcheck exists for this user condition = \ "${if and { {!def:h_X-Spam-Flag:} \ {!eq {$received_protocol}{spam-scanned}} \ }\ {1}{0}\ }" require_files = $home/.spamcheck driver = accept transport = spamcheck_transport
Il router seleziona il messaggio e lo passa al transport che provvedere ad effettuare la scansione e il reinoltro ad Exim stesso per la consegna finale. Ecco la definizione del transport:
### transport/90_local-spamcheck # Transport for SpamAssassin: mail is filtered with spamc # and piped back to Exim. # spamcheck_transport: driver = pipe command = /usr/sbin/exim4 -oMr spam-scanned -bS use_bsmtp = true transport_filter = /usr/bin/spamc home_directory = "/tmp" current_directory = "/tmp" # must use a privileged user to set $received_protocol on the way user = Debian-exim group = Debian-exim log_output = true return_fail_output = true return_path_add = false message_prefix = message_suffix =
Le mail vengono date nuovamente ad Exim, ma questa volta il received_protocol viene forzato a spam-scanned, in modo che non vengano controllate una seconda volta. Per fare questo bisogna che l'user che reinoltra la mail (exim gira come utente Debian-exim
) sia indicato come trusted_user. Bisogna quindi creare il file /etc/exim4/conf.d/main/00_local
:
### main/00_local ################################# MAIN_TRUSTED_USERS = Debian-exim
sa-learn
Con il comando sa-learn
si possono allenare i filtri bayesiani di SpamAssassin. Lo si deve lanciare a nome dell'utente sotto cui gira SpamAssassin. Negli esempi precedenti si tratta dell'utente mail
in quanto SpamAssassin è stato configurato come filtro di sistema. Il materiale imparato viene salvato in $HOME/.spamassassn/bayes*
, si tratta di un database dinamico che prevede anche un journal, conviene consolidarlo con –sync
ad esempio prima di copiarlo su un'altro host.
Supponiamo che /home/salearn/Maildir/cur
sia una directory dove sono raccolti tutti i messaggi di spam e mail
sia l'utente con cui gira SpamAssassin:
su - mail sa-learn --spam /home/salearn/Maildir/cur sa-learn --sync sa-learn --backup > bayes.backup sa-learn --restore bayes.backup
Gli ultimi due comandi mostrano come si fa il backup e il restore del database dei filtri bayesiani.
sa-update
Con sa-update si possono scaricare e tenere aggiornate le collezioni di regole che SpamAssassin utilizza per assegnare punteggio. Si possono tenere aggiornate sia le regole predefinite di SpamAssassin che delle collezioni aggiuntive scelte in base alle proprie esigenze.
Si deve scegliere un canale da cui prelevare le nuove regole, esiste il sito SARE che contiene una buona galleria di canali. Si è provato con saupdates.openprotect.com e www.malware.com.br.
ATTENZIONE a dove vengono messi i file scaricati! Dal manuale di SpamAssassin: The SpamAssassin rule base, text templates, and rule description text are loaded from configuration files. Default configuration data is loaded from the first existing directory in:
- /var/lib/spamassassin/3.001004
- /usr/share/spamassassin
- /usr/share/spamassassin
- /usr/local/share/spamassassin
- /usr/share/spamassassin
Nota: la man page Debian indica la directory /usr/share/spamassassin
più volte!
Il pacchetto Debian di spamassassin mette le regole predefinite - se non si attiva la funzione di aggiornamento automatico - in /usr/share/spamassassin
, quindi è indispensabile mettere le regole aggiuntive in una directory diversa dal default di sa-update
che è /var/lib/spamassassin/3.001004/
, altrimenti le regole aggiuntive oscurerebbero quelle predefinite di spamassassin. La directory si indica con il parametro –updatedir
:
sa-update --nogpg --channel saupdates.openprotect.com --updatedir /usr/local/lib/sare
Nella directory /usr/local/lib/sare/saupdates_openprotect_com/
vengono piazzati due file (uno con estensione .pre e uno con estensione .cf) più una sottidirectory con la collezione delle regole.
Spamassassin considera nelle directory di configurazione prima i file con estensione .pre e poi quelli con estensione .cf in ordine lessicografico, si può pertanto aggiungere in coda al file /etc/spamassassin/local.cf
le seguenti righe:
include /usr/local/lib/sare/saupdates_openprotect_com.pre include /usr/local/lib/sare/saupdates_openprotect_com.cf
Prima di riavviare il demone conviene verificare la sintassi delle nuove regole:
spamassassin --debug --nocreate-prefs --lint echo "rm -r /root/.spamassassin" /etc/init.d/spamassassin restart
Se vogliamo scaricare automaticamente ogni giorno le nuove regole si imposta CRON=1
in /etc/default/spamassassin
, in tal caso il cronjob /etc/cron.daily/spamassassin
provvede a scaricare le nuove regole in /var/lib/spamassassin/3.001004
.
ATTENZIONE: Potrebbe capitare che le nuove regole scaricate abbiano un problema, in tal caso il demone Spamassassin potrebbe pure morire con il messaggio di errore:
spamd[6433]: config: no rules were found! Do you need to run 'sa-update'?
Sembra che per risolvere sia sufficiente eliminare la directory /var/lib/spamassassin/3.004001/.
La versione dell'aggiornamento installato si ricava dalla prima riga dal file /var/lib/spamassassin/3.004001/updates_spamassassin_org.cf:
# UPDATE version 1869319
La versione disponibile si ottiene con una interrogazione DNS. Avendo installato SpamAssassin versione 3.4.1 si interroga:
host -t TXT 1.4.3.updates.spamassassin.org 1.4.3.updates.spamassassin.org is an alias for 3.3.3.updates.spamassassin.org. 3.3.3.updates.spamassassin.org descriptive text "1869319"
Per effettuare un check dell'aggiornamento, senza eseguirlo:
sa-update -D -v --checkonly
ATTENZIONE: Con Debian 10 Buster viene installato SpamAssassin 3.4.2, quindi cambia ad esempio la directory con gli aggiornamenti: /var/lib/spamassassin/3.004002/.
ClamAV
Debian Woody
Una versione più recente di Clamav è disponibile come backport da www.backports.org,
conviene aggiungere queste righe a /etc/apt/sources.list
“
deb http://www.backports.org/debian stable clamav deb-src http://www.backports.org/debian stable clamav
Interessa la versione demone dello scanner, più performante. Anche gli aggiornamenti verranno scaricati in atuomatico da un demone (clamav-freshclam) oppure da cronjob.
Si devono installare quindi i seguenti pacchetti (nota: clamav e clamav-freshclam devono essere installati con una sola esecuzione di dpkg):
- libgmp3 (woody)
- ucf_0.30_all.deb (sarge - testing)
- libclamav1_0.67-5.1_i386.deb (backport)
- clamav-base_0.67-5.1_all.deb (backport)
- clamav_0.67-5.1_i386.deb (backport)
- clamav-freshclam_0.67-5.1_i386.deb (backport)
- clamav-daemon_0.67-5.1_i386.deb (backport)
C'è un errore nel postints di clamav-daemon (corretto dalla versione 0.67-7), il file /etc/logrotate.d/clamav-daemon
che viene installato ha la riga create
dentro la sezione postrotate/endscript
. E' stato corretto mettendo il create prima della sezione.
Debian Sarge
Con Debian Sarge si installano i seguenti pacchetti:
- arj
- clamav
- clamav-base
- clamav-daemon
- clamav-freshclam
- libclamav1
- libgmp3
- unzoo
Si vuole l'aggiornamento via cron (/etc/cron.d/clamav-freshclam
) piuttosto che far girare freshclam come demone
(eventuale configurazione in /etc/clamav/freshclam.conf
). Il database dei virus conosciuti viene memorizzato in
/var/lib/clamav/
.
Per controllare un file, una directory o una Maildir si puo' usare:
clamscan /path/to/file clamscan -r /directory/ clamscan -r --mbox /home/user/Maildir/
Il codice di ritorno significa:
0 No virus found. 1 Virus(es) found. >1 Altri errori.
Sanitizer
Installato Sanitizer da Debian testing (non ci sono dipendenze!), creato un file di configurazione ad-hoc: /etc/sanitizer.conf
. Predisposta la directory /home/quarantine/
per ricevere gli allegati infetti. Appartiene a mail:mail, mode 0750. Per testare sanitizer come filtro su un messaggio di posta:
cat message | sanitizer /etc/sanitizer.cfg