Questo articolo, a differenza di molti altri (i più!) solitamente proposti ai nostri lettori, invece di essere una monolitica, completa guida per un determinato argomento o per la risoluzione di qualche problema informatico, deve considerarsi come una sorta di "esperimento sociale", da condurre con i volenterosi che vorranno addentrarsi nelle funzionalità di uno dei più affermati (e potenti) antivirus, attualmente disponibili e open source, per ambiente Linux: ClamAV.

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint

ClamAV è, come accennato, un antivirus open source per rilevare trojan, virus, malware e altre minacce malevole, inoltre multipiattaforma, infatti è disponibile non solo per il mondo del Pinguino, ma anche per Windows e MacOS; tuttavia la grande differenza con il mondo Microsoft, ad esempio e al momento, è che ClamAV offre solo per Linux il modulo di protezione residente, cosiddetto "on-access scanning" (What is the difference between ClamAV, Immunet, and ClamWin?).

una necessaria premessa e alcune doverose considerazioni

Occorre premettere che ClamAV nasce e mira ad essere uno "open-source standard for mail gateway-scanning software", ossia uno strumento sostanzialmente rivolto a filtrare la posta per rilevare e bloccare eventuali elementi indesiderati nella stessa.

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint

Quindi i nostri semplici elaboratori che montano Linux potrebbero tranquillamente farne a meno.

Alcuni, molti a dire il vero, anzi la maggior parte degli utenti esperti del Pinguino sconsigliano vivamente persino di installare un antivirus secondo le modalità che vedremo, perché, dovendo di necessità creare, modificare e intervenire su alcuni servizi di Linux, paradossalmente e potenzialmente andremo ad ampliare la cosiddetta "platea di attacco" di un qualche elemento/soggetto ostile e malintenzionato.

Mutuando una metafora che mi è stata oculatamente suggerita: installare ClamAV è un po' come mettere una porta blindata lì dove una porta nemmeno c'era! La porta blindata è sicura, ma rappresenta comunque un punto di accesso in caso qualcuno si dimentichi di chiuderla bene o abbia un difetto di fabbrica.

Per chi volesse approfondire, purtroppo solo in lingua inglese, troverà (spero!) interessante questo estratto: Antivirus Software and Rootkit Removers: Both Unnecessary and Harmful

Perché installare un antivirus con protezione residente allora? Al di là del gusto dell'esperimento in sé, potrebbe avere senso darsi tanto da fare per due ordini di motivi:

  • avere la necessità di filtrare la posta poi indirizzata/smistata ad altri sistemi non Linux (come sopra già detto);
  • in determinate condizioni, per esempio una installazione in dual boot Linux-Windows, impedire che l'ambiente Linux, pur rimanendo indenne da infezioni, faccia da ponte per l'ingresso di malware genericamente intesi in ambito Windows, dove comunque si presume che ci saremo - doverosamente - attrezzati con ogni cautela e precauzione del caso.

ClamAV non è esente da inconvenienti e bug

Si sappia sin da subito e per necessaria chiarezza che il software in questione (come tutti i software del mondo!) non è esente da pecche.

Un bug "curioso", determinato dalla presenza del modulo on access (protezione residente), comporta (a volte!) la creazione nella root di file dai nomi "strani", di dimensioni intorno ai 187 KB, come descritto nell'issue "Files with cryptic names get written in / (unix root)".

Ad ogni modo, per chi fosse interessato e volesse approfondire, si può dare uno sguardo QUI.

Date a Cesare quello che è di Cesare: la farina è di un sacco altrui!

Questo articolo deve considerarsi la traduzione in italiano dell'eccellente e unica guida sviluppata dall'utente it-place che, con minuzia di particolari e precisione millimetrica, nel forum di Linux Mint, ha descritto ogni passo da compiere nel thread "ClamAV-Howto - Setting up ClamAV on Linux Mint 20.2 Cinnamon".

Qualche piccola limatura è derivata dopo la lettura dell'articolo (in inglese) "Installation & Configuration of ClamAV Antivirus on Ubuntu 18.04" e dalle prove svolte per settimane sul campo.

Ribadisco: la totale sostanza è nell'intervento accolto nel forum di Linux Mint. Niente di più o di meno.

Per chi volesse approfondire (purtroppo sempre in lingua inglese) segnalo:

procederemo spediti ...

Da questo punto in avanti, per non appesantire ulteriormente l'articolo, fatta già sopra ogni premessa e operati i necessari rinvii, la trattazione proseguirà spedita, senza ulteriori rimandi. Quanti intendessero giustamente approfondire, anche in relazione ai comandi che andranno impartiti, potranno cercare e rivolgersi alla documentazione ampiamente disponibile in rete. Tanto per fare un esempio QUI.

Ricordo e preciso soltanto che:

  • l'ambiente in cui la procedura si sviluppa è Linux Mint Cinnamon 20.3;
  • verrà utilizzato l’editor predefinito di Linux Mint Cinnamon, ossia xed;
  • dentro al terminale, per interrompere un’operazione o il resoconto di un log, sarà sufficiente premere la combinazione di tasti CTRL + c;
  • per aprire con rapidità il terminale è possibile utilizzare la combinazione di tasti CTRL + ALT + t;
  • per copiare comandi e istruzioni possiamo utilizzare la combinazione CTRL + c;
  • per incollare comandi e istruzioni, fuori dal terminale, possiamo impiegare la combinazione CTRL + v;
  • per incollare comandi e istruzioni, dentro al terminale, possiamo impiegare la combinazione CTRL + SHIFT + v (altrimenti dicasi CTRL + MAIUSC +v).

Infine, a causa di alcune limitazioni dell'editor per realizzare i nostri articoli, i comandi da impartire nei vari servizi e script che andremo a creare non verranno correttamente visualizzati, soprattutto in termini di indentazione, come opportuno. Per questo motivo, al fine di consentire una più agevole comprensione della struttura dei file stessi, sono state aggiunte delle specifiche screenshot e, quando possibile (sperando di fare cosa utile), sono stati caricati, in allegato all'articolo, gli script da creare, già pronti e con la corretta formattazione.

l'ultimo (importante) consiglio prima di iniziare

Poiché il percorso sarà lungo e il rischio di incespicare è sempre all'orizzonte, sia perché ci possono essere delle imprecisioni nella descrizione dei comandi da impartire, sia per tanti altri motivi e variabili, suggerisco:

  • di creare preventivamente una istantanea (snapshot) del nostro sistema "pulito" con TimeShift;
  • prima di iniziare a modificare il sistema, leggere da cima a fondo l'intera procedura e, nel caso di dubbi, chiedere e chiarire le perplessità qui sul forum!

0 - le componenti con e di cui tratteremo

I tre demoni (daemon):

  • clamav-daemon (o clamd),
  • clamav-freshclam (o freshclam daemon),
  • clamonacc daemon.

L’utily per la scansione: clamdscan.

La GUI (interfaccia grafica) per ClamAV: ClamTk.

1.1 - Installare demoni e componenti di ClamAV

Letteralmente in sequenza, possiamo procedere da terminale:

sudo apt-get update

sudo apt-get -y install clamav-daemon

sudo apt-get -y install clamav-freshclam

sudo apt-get -y install clamdscan

o, in alternativa ai singoli suddetti comandi:

sudo apt-get -y install clamav-daemon clamav-freshclam clamdscan

1.2 - Installare ClamTk

Per installare l'interfaccia grafica (GUI), ancora da terminale:

sudo apt-get -y install clamtk

1.3 - ClamAV e ClamTk: controllare le versioni dei pacchetti installati

Per ClamAV dobbiamo avere (almeno) la versione 0.105.0-1.

Aggiornamento: al momento di scrivere questo articolo, sui repository è stata resa disponibile la versione di ClamAV 0.103.6, che aggiorna tutti i demoni e le utility connessi e necessari, fixata del bug che ci avrebbe costretto a scaricare e installare manualmente la release 0.105.0-1 del (solo) pacchetto "ClamAV open source email, web, and end-point anti-virus toolkit.". Possiamo quindi decidere di procedere (e tentare) con la versione 0.103.6 oppure installare comunque a parte e sin da subito il pacchetto 0.105.0-1 per "clamav".

Per ClamTk deve essere la versione (al momento) 6.14-1.

Aprendo il "Synaptic Package Manager" e cercando "clamav" ...

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint

... troveremo i pacchetti di nostro interesse.

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint

In considerazione dei pacchetti disponibili oggi nei repository, con tutta probabilità sarà necessario recarsi sia sul sito di ClamAV sia sul sito di ClamTk per prelevare il ".deb" giusto da installare (con un semplice doppio click!), confermando di voler procedere, qualora venisse comunicato che un pacchetto più vecchio è disponibile nel repository, per ciascuna installazione.

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint

Tutto questo è fondamentale per avere i pacchetti giusti nel nostro sistema.

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint

1.4 - Avviare i demoni di ClamAV

Da terminale, controllare lo stato dei demoni:

sudo systemctl status clamav-daemon

sudo systemctl status clamav-freshclam

oppure

sudo systemctl status clamav-daemon clamav-freshclam

e scorrere con "Page-down" ("Pagina giù") il risultato del comando.

Qualora non fossero avviati, ossia se non compaiono con lo stato verde "active (running)", occorre avviarli:

sudo systemctl enable clamav-daemon

sudo systemctl start clamav-daemon

sudo systemctl enable clamav-freshclam

sudo systemctl start clamav-freshclam

dunque controllarne di nuovo lo stato:

sudo systemctl status clamav-daemon

sudo systemctl status clamav-freshclam

1.5 - Configurare le impostazioni di scansione di ClamAV modificando clamd.conf

Da terminale:

sudo xed /etc/clamav/clamd.conf

e aggiungiamo/definiamo le necessarie esclusioni:

ExcludePath ^/proc

ExcludePath ^/sys

ExcludePath ^/run

ExcludePath ^/dev

ExcludePath ^/timeshift

Contestualmente e ulteriormente cambiare da "MaxDirectoryRecursion 15" a "MaxDirectoryRecursion 20":

#MaxDirectoryRecursion 15

MaxDirectoryRecursion 20

Salvare e chiudere l’editor.

Sempre da terminale, riavviare il demone:

sudo systemctl restart clamav-daemon

aspettare qualche secondo e controllare lo stato dei due demoni:

sudo systemctl status clamav-daemon

sudo systemctl status clamav-freshclam

oppure

sudo systemctl status clamav-daemon clamav-freshclam

Possiamo lanciare una scansione soltanto di prova della cartella "/home" e sue sottodirectory (sottocartelle):

sudo /usr/bin/clamdscan --fdpass --log=/var/log/clamav/clamdscan.log /home

2 - Configurare la scansione "on-access"

Installare l’utilityapparmor-utils”, da terminale:

sudo apt-get -y install apparmor-utils

per controllare lo stato generale del modulo AppArmor, i profili caricati e la condizione dei processi, da terminale:

sudo aa-status

aggiungere quindi "clamd" tra i processi in modalità “complain”:

sudo aa-complain /usr/sbin/clamd

e controllare che "clamd" risulti in effetti tra i processi in modalità “complain”:

sudo aa-status

Modificare ulteriormente il file "clamd.conf", da terminale:

sudo xed /etc/clamav/clamd.conf

e aggiungere (in fondo)

OnAccessIncludePath /home

OnAccessExcludeUname clamav

eventualmente, per elaboratori particolarmente prestanti e consapevoli di provocare notevoli rallentamenti del sistema, sarà possibile aggiungere un controllo ulteriore:

OnAccessPrevention yes

che sarà sempre e comunque alternativo all’opzione (facoltativa)

OnAccessMountPath /home/username

Salvare e chiudere l’editor.

Creiamo un nuovo servizio (il file è disponibile in allegato), da terminale:

sudo xed /etc/systemd/system/clamonacc.service

il cui contenuto sarà:

# /etc/systemd/system/clamonacc.service

[Unit]

Description=ClamAV On Access Scanner

Requires=clamav-daemon.service

After=clamav-daemon.service

After=syslog.target

After=network-online.target

[Service]

Type=simple

User=root

ExecStartPre=/bin/bash -c "while [ ! -S /var/run/clamav/clamd.ctl ]; do sleep 1; done"

ExecStart=/usr/sbin/clamonacc -F --fdpass --config-file=/etc/clamav/clamd.conf --log=/var/log/clamav/clamonacc.log

[Install]

WantedBy=multi-user.target

Salviamo e chiudiamo l’editor.

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint - 001_clamonacc_service

In alternativa e a nostro rischio e pericolo, se intendiamo mettere i malware rilevati direttamente nella cartella dove ClamTk gestisce la quarantena, dovremo invece scrivere:

# /etc/systemd/system/clamonacc.service

[Unit]

Description=ClamAV On Access Scanner

Requires=clamav-daemon.service

After=clamav-daemon.service

After=syslog.target

After=network-online.target

[Service]

Type=simple

User=root

ExecStartPre=/bin/bash -c "while [ ! -S /var/run/clamav/clamd.ctl ]; do sleep 1; done"

ExecStart=/usr/sbin/clamonacc -F --fdpass --config-file=/etc/clamav/clamd.conf --log=/var/log/clamav/clamonacc.log --move=/home/username/.clamtk/viruses

[Install]

WantedBy=multi-user.target

ATTENZIONE: nell'istruzione --move=/home/username/.clamtk/viruses "username" va modificato con il nostro nome utente!

Sempre salviamo e chiudiamo l’editor.

Creato il servizio, prima ne definiamo i permessi, poi procediamo ad abilitarlo, da terminale:

sudo chmod 644 /etc/systemd/system/clamonacc.service

sudo systemctl enable clamonacc

Controlliamo lo stato del servizio "clamonacc":

sudo systemctl status clamonacc

e, qualora non avviato, provvediamo ad avviarlo:

sudo systemctl start clamonacc

quindi, controlliamo nuovamente lo stato:

sudo systemctl status clamonacc

e vedremo che il servizio è (in verde) "active (running)".

La guida di ClamAV spiega che “Given the complexity of some directory hierarchies, ClamAV may warn you that it has exhausted its supply of inotify watch-points (8192 by default).”, per cui occorre incrementare il valore di "inotify".

Da terminale:

sudo xed /etc/sysctl.conf

e aggiungete la linea:

fs.inotify.max_user_watches = 524288

Salvate e chiudete l’editor.

A questo punto occorre riavviare il sistema e, una volta riavviato, possiamo definitivamente controllare lo stato del servizio "clamonacc" con il seguente comando da terminale:

sudo systemctl status clamonacc

In alternativa, un sistema ancora più rapido per incrementare il valore di "inotify", senza necessità di riavviare l'elaboratore, è quello di digitare direttamente da terminale:

sudo sysctl fs.inotify.max_user_watches = 524288

3 - Configurare le notifiche per la scansione “on-access"

E’ stato abilitato il servizio "clamonacc", ora bisogna sfruttarne le potenzialità, attraverso un sistema di notifiche.

Da terminale:

sudo apt-get -y install inotify-tools

Creiamo un file per accogliere il log dal nome "clamonacc_notify.log":

sudo touch /var/log/clamav/clamonacc_notify.log

Definiamo, sempre e ancora da terminale, i permessi:

sudo chmod 644 /var/log/clamav/clamonacc_notify.log

sudo chmod 644 /var/log/clamav/clamonacc.log

sudo chown clamav: /var/log/clamav/clamonacc_notify.log

Ancora da terminale, creiamo un apposito script (il file è disponibile in allegato):

sudo xed /usr/local/bin/clamav_wrapper

che servirà per alimentare il log di "clamonacc" ogni volta che verranno trovati eventuali malware.

Il contenuto di "clamav_wrapper" sarà:

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin

LANG=C

sleep 2

grep FOUND /var/log/clamav/clamonacc.log | tail -n 1 > /var/log/clamav/clamonacc_notify.log

Salviamo e chiudiamo l’editor.

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint - 002_clamav_wrapper

Di nuovo da terminale, definiamone i permessi:

sudo chmod 755 /usr/local/bin/clamav_wrapper

Adesso occorre creare uno script che curi le notifiche per ogni malware rilevato.

Apriamo il terminale e creiamo "notify_clamav" (il file è disponibile in allegato):

sudo xed /usr/local/bin/notify_clamav

che servirà ad attivare un messaggio di notifica e il cui contenuto sarà:

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin

LANG=C

_log=/var/log/clamav/clamonacc_notify.log

if [ ! -e $_log ]; then

notify-send "ClamAV" "error: $_log missing."

exit 1

fi

inotifywait -mq -e close_write $_log | while read

do

_result=$(cat $_log)

if [ "$_result" != "" ]; then

notify-send "ClamAV" "$_result"

else

notify-send "ClamAV" "Please check $_log"

fi

done

Salvare e chiudere l’editor.

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint - 003_notify_clamav

Quindi definiamone i permessi:

sudo chmod 755 /usr/local/bin/notify_clamav

Ancora da terminale:

sudo xed /etc/clamav/clamd.conf

e aggiungiamo

VirusEvent /usr/local/bin/clamav_wrapper

Salvare il file e chiudere l’editor.

Per fare in modo che "notify_clamav" parta all’avvio, dal menù del nostro Linux Mint (Cinnamon) selezioniamo:

  • “Preferences - Startup Applications”
  • clicchiamo sul "+" e quindi "Custom command";
  • "Name:" valorizzato (ad esempio) con "Notify ClamAV";
  • "Command:" valorizzato con "/usr/local/bin/notify_clamav";
  • "Startup delay" impostato (ad esempio) a 5.

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint

Non ci resta che ripulire il sistema alla chiusura, terminando il nostro "notify_clamav".

Creiamo da terminale il seguente file (il file è disponibile in allegato):

sudo xed /usr/local/sbin/notify_cleanup

avente il contenuto che segue:

#!/bin/bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin

LANG=C

killall notify_clamav

killall inotifywait

cp /dev/null /var/log/clamav/clamonacc_notify.log

Salvare il file e chiudere l’editor.

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint - 004_notify_cleanup

Quindi definiamone i permessi:

sudo chmod 750 /usr/local/sbin/notify_cleanup

ATTENZIONE: i passaggi che seguono sono cruciali e dovranno essere puntualmente rispettati. Qualora dovessimo trovarci in una diversa situazione rispetto a quelle descritte, è assolutamente sconsigliato procedere, poiché vi è il serio rischio di compromettere l’intero sistema!

Controlliamo se sotto la cartella "/etc/lightdm/"abbiamo il file "lightdm.conf"; se sì, allora procediamo come segue:

sudo xed /etc/lightdm/lightdm.conf

e aggiungiamo:

session-cleanup-script=/usr/local/sbin/notify_cleanup

Se non dovessimo avere il file "lightdm.conf", allora andremo sotto "/etc/lightdm/lightdm-gtk-greeter.conf.d" ed editeremo il file "99_linuxmint.conf":

sudo xed /etc/lightdm/lightdm-gtk-greeter.conf.d/99_linuxmint.conf

e aggiungiamo:

session-cleanup-script=/usr/local/sbin/notify_cleanup

Salvare il file e chiudere l’editor.

Riavviamo il sistema.

Dopo il riavvio (e prima di impegnare il sistema in operazioni a rischio), per sicurezza, controlliamo (ogni tanto) lo stato dei servizi con:

sudo systemctl

in alcuni casi si è riscontrato che "clamav-daemon" non fosse stato caricato, quindi possiamo forzarne l’avvio con:

sudo systemctl enable clamav-daemon

sudo systemctl start clamav-daemon

Possiamo quindi controllare lo stato del demone con:

sudo systemctl

oppure, più mirato:

sudo systemctl status clamav-daemon.service clamonacc.service

un test per il nostro antivirus "residente"

Da terminale, diamo il comando:

wget www.eicar.org/download/eicar.com

Se tutto è andato a buon fine, vedrete comparire la seguente notifica:

ClamAV: antivirus open-source, "on demand" protezione residente, Linux Mint

e, nel caso in cui abbiamo previsto di spedire immediatamente e senza filtri il (presunto) malware nella cartella della quarantena di ClamTk, l'ospite indesiderato sarà stato immediatamente rimosso e neutralizzato.

conclusione

Il percorso è stato lungo e accidentato, con tutta probabilità non privo di intoppi e, posso assicurare, basta un nonnulla per inficiare in toto il risultato finale. Quindi: massima attenzione e, prima di compiere qualsiasi azzardo, chiedete chiedete chiedete! Magari non sarà il sottoscritto a essere in grado di fornire la risposta giusta, ma un tentativo, attraverso il nostro forum, non verrà lesinato per nessuno!