1 21/05/2026 10 min

ClamAV su Ubuntu 20.04 LTS: cosa installare davvero

Su Ubuntu 20.04 LTS ClamAV non è un pacchetto da installare e dimenticare: va trattato come un componente operativo, con aggiornamento firme, verifica del demone, scelta del metodo di scansione e un minimo di manutenzione. Se lo usi su un server esposto a posta, upload web o file condivisi, la differenza la fa la routine: database aggiornato, log leggibili, scansioni pianificate e soglie realistiche. L’obiettivo non è “avere un antivirus”, ma avere un controllo affidabile su file sospetti senza introdurre rumore o carico inutile.

Su Ubuntu 20.04 la strada standard passa dai pacchetti `clamav` e `clamav-daemon`. Il primo porta gli strumenti da riga di comando, il secondo aggiunge il servizio residente `clamd`, utile quando devi fare scansioni ripetute o integrare il motore con altri componenti. Per gli aggiornamenti firme serve anche `clamav-freshclam`, che spesso è già incluso ma va verificato. In una macchina minimale conviene decidere subito se vuoi solo scansioni manuali oppure anche un demone sempre attivo; cambiano configurazione, consumo RAM e modalità di avvio.

Verifica preliminare: stato del sistema e conflitti

Prima di installare, controlla che la macchina abbia spazio sufficiente e che non ci siano già servizi AV o hook che usano la stessa porta o le stesse directory di quarentena. ClamAV non è particolarmente invasivo, ma il database firme cresce, e gli update possono fallire banalmente per disco pieno o DNS instabile.

Un check rapido evita di partire alla cieca:

df -h
free -h
systemctl status clamav-freshclam clamav-daemon --no-pager

Se i servizi non esistono ancora, il terzo comando te lo dirà chiaramente. Se invece sono presenti ma in errore, conviene leggere subito i log, perché il problema tipico non è “ClamAV non funziona”, ma un database non aggiornato o una configurazione del demone troppo aggressiva per la RAM disponibile.

Installazione dei pacchetti su Ubuntu 20.04

La base si installa con APT. Su una macchina standard puoi partire così:

sudo apt update
sudo apt install clamav clamav-daemon clamav-freshclam

Dopo l’installazione, i binari principali sono `clamscan` e `freshclam`. Se usi il demone, entra in gioco `clamd` e il socket locale, che rende le scansioni successive molto più veloci rispetto all’avvio di un processo standalone per ogni file o directory. Su un server con molti file piccoli la differenza è concreta; su una macchina con pochi file grandi, il vantaggio c’è ma è meno evidente.

Verifica subito la versione installata e la presenza delle firme base:

clamscan --version
freshclam --version

Se il comando restituisce un numero di versione ma segnala database assente o obsoleto, non forzare ancora il demone: prima allinea le firme.

Aggiornamento firme: freshclam come punto di controllo

Il vero cuore operativo di ClamAV è `freshclam`. Senza firme aggiornate, la scansione è solo un esercizio formale. Su Ubuntu 20.04 il servizio tende a partire automaticamente, ma in ambienti ristretti o dietro proxy può fallire per motivi banali: DNS, rate limit, orario di sistema, permessi su `/var/lib/clamav`.

Controlla lo stato e i log:

systemctl status clamav-freshclam --no-pager
journalctl -u clamav-freshclam -n 50 --no-pager

Se vuoi un’azione manuale per capire subito se il problema è la rete o il servizio, lancia un aggiornamento diretto. È un test utile perché isola il motore di update dal resto della macchina:

sudo freshclam

Un esito sano termina con il download del database o con il messaggio che le firme sono già aggiornate. Se invece vedi errori di connessione, controlla `resolv.conf`, il proxy, o l’orologio di sistema. Un timestamp errato può generare problemi di validazione TLS, e in quel caso non è ClamAV il colpevole.

Scansione manuale: il comando giusto per non confondersi

Per una scansione on-demand il comando base è `clamscan`. È semplice, ma va usato con attenzione: su alberi grandi può essere lento, e se non specifichi bene cosa fare sui file infetti rischi di ottenere solo un report senza azione.

Una scansione ricorsiva della home di un utente, con output comprensibile, può essere questa:

clamscan -r --infected --bell /home/nomeutente

Le opzioni più utili in pratica sono queste: `-r` per ricorsione, `--infected` per mostrare solo i file trovati positivi, `--bell` per un feedback immediato in console. Se vuoi salvare il report, aggiungi un redirect su file di log dedicato. Su server con molti dati conviene evitare di lanciare scansioni senza criterio su tutto il filesystem: meglio delimitare aree sensibili come upload web, spool mail, directory temporanee e archivi scaricati.

Esempio di log semplice e ripetibile:

clamscan -r /var/www /home /srv 2>&1 | tee /var/log/clamav/manual-scan.log

Se il volume è alto, questa modalità può diventare lenta. In quel caso ha senso passare a `clamdscan`, che parla con il demone residente e riduce i tempi di avvio e di accesso al database firme.

Attivare il demone clamd quando la scansione deve essere frequente

Il demone `clamav-daemon` è utile quando fai scansioni multiple, integri il controllo con un MTA, oppure vuoi esporre un socket locale per applicazioni che devono verificare file caricati dagli utenti. La controparte è il consumo di memoria: su server piccoli va valutato, non dato per scontato.

Controlla che il servizio sia avviato e ascolti sul socket previsto:

systemctl status clamav-daemon --no-pager
ls -l /var/run/clamav/

Se il socket non compare, il demone potrebbe essere bloccato da una configurazione errata in ` `/etc/clamav/clamd.conf` oppure da permessi non coerenti nella directory runtime. Prima di cambiare parametri a caso, leggi i log:

journalctl -u clamav-daemon -n 100 --no-pager

Su macchine con poca RAM è spesso necessario rivedere parametri come `MaxScanSize`, `MaxFileSize` e `StreamMaxLength`. Non aumentare tutto “per sicurezza”: stai solo spostando il problema sul consumo di memoria. Se il caso d’uso è scansione upload web da 20 MB, non serve una configurazione pensata per archivi da centinaia di megabyte.

Configurazione minima utile: file e parametri da conoscere

I file che contano davvero, in un setup base, sono tre: ` `/etc/clamav/freshclam.conf`, ` `/etc/clamav/clamd.conf` e i file di log o runtime sotto ` `/var/log/clamav/` e ` `/var/run/clamav/`. In molte installazioni il contenuto iniziale è già sufficiente, ma conviene leggere i valori effettivi, non affidarsi alla memoria.

Per vedere la configurazione attiva del demone puoi usare un controllo diretto del file:

grep -v '^#' /etc/clamav/clamd.conf | sed '/^$/d'
grep -v '^#' /etc/clamav/freshclam.conf | sed '/^$/d'

In molti casi le prime voci da valutare sono `DatabaseDirectory`, `LocalSocket`, `LogFile`, `ScanMail`, `ScanArchive`, `MaxThreads` e `SelfCheck`. Il punto non è abilitare tutto, ma allineare il comportamento alle risorse reali e al tipo di file che devi ispezionare. Se il server ospita solo documenti utente, una politica più stretta sui formati archiviati può avere senso. Se invece ricevi allegati mail, il profilo cambia.

Integrazione con la scansione degli upload web

Uno degli usi più sensati di ClamAV su Ubuntu 20.04 è la verifica dei file caricati via web. Il controllo va fatto prima che il file diventi disponibile agli utenti o venga spostato in una directory pubblica. In altre parole: il file entra in una zona di quarantena, viene verificato, e solo dopo passa nella destinazione finale.

La logica è semplice anche se l’implementazione varia tra PHP, Python, Node o applicazioni custom: salva il file in un path non servito dal web server, verifica con `clamdscan` o `clamscan`, poi sposta il file pulito. Se la scansione fallisce o il file risulta infetto, elimina il contenuto e registra l’evento. L’errore più comune è invertire l’ordine e affidarsi a una blacklist a posteriori.

Esempio operativo con `clamdscan`:

clamdscan /var/tmp/upload-12345

Se il demone non è disponibile, puoi ripiegare su `clamscan`, ma il tempo di risposta peggiora. Per questo, su applicazioni con molti upload, il demone locale è quasi sempre la scelta più pulita.

Scansione pianificata con cron o systemd timer

Per evitare controlli manuali dimenticati, conviene pianificare una scansione periodica. La scelta tra cron e systemd timer dipende dal tuo standard operativo; su Ubuntu 20.04 entrambi vanno bene. Per un server semplice, cron è sufficiente. Per ambienti più ordinati, un timer systemd dà log e stato migliori.

Un esempio cron minimale per una scansione notturna delle aree più sensibili:

0 3 * * * root clamscan -r /var/www /home /srv > /var/log/clamav/nightly.log 2>&1

Attenzione al carico: una scansione piena alle 3 di notte può comunque interferire con backup, rotazioni log o job applicativi. La metrica da osservare è il tempo di completamento e l’impatto su I/O, non solo il numero di file esaminati. Se il server ha storage lento, puoi ritardare la scansione o limitarla a directory che cambiano davvero.

Interpretare i risultati senza farsi ingannare

Un file segnalato come infetto non va cancellato a occhi chiusi se hai un dubbio operativo o un contesto di test. Il primo passo è isolare il file e verificare se il rilevamento è coerente con il tipo di contenuto. In ambienti reali, falsi positivi possono capitare su archivi compressi, documenti protetti o campioni usati in QA.

Per isolare rapidamente il problema, controlla il nome della signature e il percorso del file nel log. Se il nome della rilevazione è generico e il file è in una zona attesa, puoi fare una seconda verifica su un altro motore o su una copia in laboratorio. Se invece il file proviene da upload web o allegato mail e il pattern è noto, la priorità resta il contenimento.

Un buon criterio operativo è questo: il rilevamento è un segnale, non una sentenza. Prima di automatizzare la rimozione, devi sapere dove finiscono i file, chi li usa e come li recuperi in caso di falso positivo. Su sistemi multiutente, una quarantena con audit è molto più utile di una cancellazione silenziosa.

Manutenzione ordinaria e problemi tipici

I problemi più comuni in produzione sono sempre gli stessi: firme non aggiornate, servizi disabilitati, directory con permessi errati, scansioni troppo ampie e log non consultati. In ordine di frequenza, il primo controllo da fare è sempre quello del servizio e del database firme.

Una checklist rapida utile dopo installazione o dopo un reboot:

systemctl is-enabled clamav-freshclam clamav-daemon
systemctl is-active clamav-freshclam clamav-daemon
ls -ld /var/lib/clamav /var/log/clamav

Se uno dei servizi risulta disabilitato, valuta se è voluto o se è un effetto collaterale di un hardening più aggressivo. Se le directory non appartengono al giusto utente di servizio, il demone può partire e poi fermarsi subito. In questi casi il log di `journalctl` è più affidabile di qualsiasi supposizione.

Quando conviene fermarsi e cambiare approccio

ClamAV è adatto a un controllo antivirus classico, ma non sostituisce policy di upload, sandboxing o analisi comportamentale. Se stai cercando di usarlo come unico filtro in un sistema esposto a grandi volumi o a file eterogenei, stai chiedendo troppo al motore sbagliato. In quel caso è meglio affiancarlo a validazione MIME, limiti di dimensione, storage isolato e un percorso di quarantena chiaro.

Su Ubuntu 20.04 LTS l’installazione è semplice; la parte importante è tenerla sotto controllo. Il criterio giusto è operativo: sapere quando le firme sono state aggiornate, dove finiscono i file sospetti, quali directory vengono scansionate e quale impatto il controllo ha su I/O e RAM. Se questi quattro punti sono chiari, ClamAV diventa uno strumento utile. Se restano vaghi, si trasforma facilmente in un servizio che “c’è” ma non protegge davvero nulla.