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 è, 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.
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 dicasiCTRL + 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" ...
... troveremo i pacchetti di nostro interesse.
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.
Tutto questo è fondamentale per avere i pacchetti giusti nel nostro sistema.
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’utility “apparmor-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.
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.
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.
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.
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.
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:
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!