Usare ClamAV: Antivirus per Linux

ClamAV è uno dei più interessanti progetti OpenSource per lo scanning di virus.
Rilasciato sotto GPL, è Posix compliant e quindi disponibile per varie piattaforme *nix (Linux, *BSD, Solaris, MacOs X, lo stesso CygWin... ) e, rispetto ad altri progetti simili, ha il fondamentale pregio di mantenere un database in costante aggiornamento.
La versione analizzata, 0.70, identifica più di 20000 virus, è in grado di scompattare file compressi e di analizzare documenti di Office per Macro virus. NON corregge i file infetti, ma, nella sua applicazione più comune (antivirus correlato ad un sistema di posta) questa mancanza è assolutamente ininfluente.

INSTALLAZIONE
E' possibile scaricare sorgenti e binari precompilati per diverse distribuzioni dal sito ufficiale www.clamav.net.
Per compilare ClamAv è necessario avere i seguenti pacchetti: zlib, zlib-devel, oltre ovviamente alla suite gcc. Sono inoltre consigliati bzip2, bzip2-devel, gmp.

Per usarlo è necessario avere un utente non privilegiato con cui farlo eseguire:
groupadd clamav
useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav


Si può quindi procedere alla scompattazione del tar.gz scaricato:
tar -zxvf clamav-x.yz.tar.gz
cd clamav-x.yz

E alla compilazione (qui viene specificato di mettere il file di configuazione sotto /etc ):
./configure --sysconfdir=/etc
make
su -c "make install"

Binari e librerie vengono copiati in /usr/local, il file di configurazione, vista l'opzione --sysconfdir sopra specificata, diventa /etc/clamd.conf.
Una volta eseguita l'installazione è possibile testate l'engine su dei file d'esempio forniti con il tar.gz:
clamscan -r -l scan.txt clamav-x.yz

CONFIGURAZIONE
Il file di configurazione /etc/clamav.conf (o /usr/local/etc/clamav.conf se si sono compilati direttamente i sorgenti senza aver impostato specifici parametri) contiene le varie voci che determinano il funzionamento di ClamAV. I parametri impostati di default sono generalmente adeguati e non è necessario modificarli per poter iniziare ad usarlo, bisogna solo provvedere a commentare la riga Example (il che, quantomeno, obbliga l'utente a dare un'occhiata al file di configurazione ed avere barlumi di consapevolezza sulla sua logica).
Si segnalano comunque impostazioni quali:
LogFile /tmp/clamd.log, LogFileMaxSize 2M, LogVerbose, LogSyslog determinano posizione, dimensioni, verbosità ed eventuale utilizzo di Syslog per il file di log.
DatabaseDirectory /var/lib/clamav la directory in cui viene scritto il database con le signature dei virus riconosciuti
TCPSocket 3310, TCPAddr 127.0.0.1 la porta e l'indirizzo a cui si mette in ascolto clamd (di default si binda ad ogni indirizzo disponibile)
MaxConnectionQueueLength 15, MaxThreads 5 il numero massimo di connessioni contemporanee e di thread su clamd (aumentare su sistemi con grossi carichi)
StreamMaxLength 10M
VirusEvent /usr/local/bin/send_sms 123456789 "VIRUS ALERT: %f: %v" quale comando eseguire nel caso venga intercettato un virus
User clamav L'utente con cui viene eseguivo clam. Di default "clamav", va creato in fase di installazione e deve avere permessi di lettura e scrittura sui log e il database dei virus.
ScanOLE2, ScanMail, ScanArchive definiscono se eseguire scan su file Microsoft Office, su caselle postale e su file compressi. Notare che lo scan di mailbox è disabilitato di default.
ArchiveMaxFileSize 10M, ArchiveMaxFiles 1000 [...] parametri vari che determinano dimensioni degli archivi su cui eseguire gli scan.

CONFIGURAZIONE AUTO AGGIORNAMENTO: FRESHCLAM
Freshclam è lo strumento migliore per tenere aggiornato il database di virus su cui lavora l'engine di ClamAV.
Può essere eseguito via command line e schedulato per un aggiornamento automatico, oppure essere lanciato come demone in costante esecuzione. Il suo file di configurazione è /etc/freshclam.conf dove vengono definite informazioni quali:
DatabaseDirectory /var/lib/clamav - La directory dove Clam trova il database dei virus, deve essere uguale a quanto definito in clamav.conf
UpdateLogFile /var/log/clamav/freshclam.log - Il file dove vengono loggate le operazioni di freshclam, deve appartenere all'utente clamav e può avere permessi 0600
NotifyClamd /etc/clamav.conf - Notifica clamd (va indicato il path corretto del suo file di conf) ogni volta che vengono aggiunti virus al database, in modo da riavviarlo per ricaricare il database aggiornato.
DatabaseMirror database.clamav.net L'indirizzo da cui scaricare gli aggiornamenti. Il valore preimpostato è l'ideale perchè punta ad un pool, gestito con un round-robin DNS, di mirror ufficiali
Esistono altre opzioni che permettono di usare un proxy http, di eseguire comandi custom ad ogni aggiornamento o errore, di gestire la frequenza degli aggiornamenti (in modalità demone) o il numero di tentativi, ecc.
Per eseguire freshclam in daemon mode basta lanciare:
/usr/local/bin/freshclam -d
per lanciare una esecuzione schedulata, aggiungere a /etc/crontab una riga tipo:
N * * * *    /usr/local/bin/freshclam --quiet
dove N è un numero da 00 a 59 che indica il minuto in cui eseguire l'aggiornamento (ogni ora).

USARE CLAMAV
Clamav, in se, si "limita" ad analizzare il contenuto di un file o di un flusso di dati e ad individuare eventuali virus sulla base del database di firme che viene tenuto aggiornato con freshclam.
La sua natura aperta, comunque, gli permette di essere integrato ed interagire con altri programmi per poter essere utilizzato come antivirus su un server di posta o un file server o per eseguire un check direttamente su dei file specificati.
La modalità di funzionamento è duplice: esiste la possibilità di utilizzare l'engine tramite il comando clamscan oppure di usufruire del demone clamd.

clamscan se lanciato senza argomenti fornisce alcune informazioni e statistiche sul numero di virus riconosciuti,   se viene seguito dal nome di una directory del file sistem, esegue un check di tutti i file ivi contenuti. Fra le opzioni e gli utilizzi più utili:
clamscan -r /home Esegue lo scan ricursivo (-r) di tutto il contentuto della directory /home
clamscan -r /home -l /var/log/antivirus.log Salva il report dello scan di /home sul file antivirus.log (a video, in standard error, vengono visualizzati tutti i file contollati
clamscan -r /home -i Stampa a video solo i nomi dei file infetti (oltre al report finale) e quindi risulta decisamente meno verboso.

Il demone clamd può stare in ascolto su una socket Unix (opzione di default: LocalSocket /tmp/clamd nel file di conf) o, in alternativa, su una porta TCP (opzione TCPSocket 3310).
Per eseguirlo basta lanciare il comando clamd. Se si vuole usare un file di configurazione diverso da quello di default si puà usare l'argomento --config-file, se si vuole abilitare il debug mode usare --debug
Il demone si presta ad integrarsi ed essere usato come filtro da parte di vari programmi esterni ed ha, comunque, un suo  client chiamato clamdscan che ha sostanzialmente le stesse opzioni di clamscan.
Se si ha clamd in esecuzione basta digitare clamdscan /home, per esempio, per eseguire il controllo dei file in /home.
Notare che quando si usa clamdscan, si accede ai file da controllare tramite clamd per cui l'utente con cui il demone gira (di default clamav) deve averne almeno accesso in lettura.

MODALITA' D'USO
Essendo ClamAV fondamentalmente un filtro, che riceve un file in input e lo rilascia in output dopo aver verificato se contiene virus, i suoi ambiti di utilizzo sono svariati e si integrano con software e soluzioni diversi.

Sendmail Milter
Sendmail ha la possibilità con il supporto milter, di integrarsi con dei filtri che analizzano la mail mentre sta per essere ricevuta (e quindi prima del delivery completo).
Se si compila ClamAv con l'opzione (sono necessarie le librerie di development libmilter):
./configure --enable-milter
dopo la compilazione ci si ritroverà il file /usr/local/sbin/clamav-milter (se si installa ClamAV tramite un pacchetto, il supporto milter con file clama-milter dovrebbero essere già presenti).
VA quindi configurato sendmail per usare il milter clamav, in /etc/mail/sendmail.mc aggiungere:
INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clmilter.sock,F=, T=S:4m;R:4m')dnl
define(`confINPUT_MAIL_FILTERS', `clmilter')

In clamav.conf definire:
LocalSocket /var/run/clamd.sock
ScanMail
StreamSaveToDisk

A questo punto, oltre ad riavviare i servizi Sendmail e ClamAv si deve avviare il servizio clamav-milter:
/usr/local/sbin/clamav-milter -lo /var/run/clmilter.sock
Se si è fatta una installazione tramite rpm si avranno i seguenti file chiave:
/etc/rc.d/init.d/clamav-milter Script di gestione del servizio
/etc/sysconfig/clamav-milter File di configurazione con gli argomenti da passare al programma
/usr/sbin/clamav-milter Il binario di clamav-milter


Utilizzo di procmail
A differenza della precedente, in questa modalità il filtro viene fatto sulle mail quando sono state già ricevute dal server SMTP e prima di essere "consegnate", tipicamente tramite procmail, ad una casella postale locale.
Il vantaggio è che procmail di fatto può essere integrato con qualsiasi server SMTP.
Di fatto esistono diverse soluzioni e script che tramite procmail e clamav filtrano la posta. Ne citiamo alcuni:
clamassassin - Ha una logica simile a Spamassassin: la mail viene passata ad uno script perl che usando clam aggiunge un header specifico alle mail infette, le quali vengono poi redirezionate o cancellate, da una seconda regola di procmail.
trashcan - Incluso nel pacchetot ufficiale, si presta in particolare per singole postazioni, non su server di posta.
clamscan-procfilter - Semplcie script perl con una logica simile a quella di Clamassassin

Integrazione con Amavisd-NG
Amavis-Ng è una riscrittura di amavis (http://sourceforge.net/projects/amavis) dopo l'installazione basta scommentare in amavis.conf  la riga:
    virus-scanner = CLAM
e eventualmente cambiare il path di clamscan:
    [CLAM]
    clamscan = /usr/local/bin/clamscan


Altri
Per un elenco completo dei plugin e delle possibilità di interazione di ClamAv con software vari (non soltanto in riferimento alla posta, è possibile anche integrarlo con Samba o con Apache) con relative istruzioni, fare riferrimento alla documentazione HTML ufficiale, nella parte relativa al "Third Party Software"

Privacy Policy