ClamAV

30 settembre 2021 Roberto Puzzanghera2 commenti

Clam AntiVirus is an open source (GPL) anti-virus toolkit for UNIX, designed especially for e-mail scanning on mail gateways.

A partire dalla versione 0.104.0 l'installazione di clamav è basata esclusivamente su CMake, che sostuisce definitivamente quella basata su autotools. E' pertanto necessario cambiare il modo di configurazione, compilazione e installazione.

Dal momento che l'installazione non prevede personalizzazioni particolari sarà sufficiente, se lo si preferisce, installare il programma mediante un pacchetto che potrebbe essere messo già a disposizione dalla nostra distribuzione Linux preferita e utilizzare questa pagina solo per quanto riguarda la configurazione successiva.

Mostrerò qui come installare il programma attraverso la compilazione manuale dei sorgenti. Come detto, è necessario avere il pacchetto CMake. Nella documentazione ufficiale si raccomanda una versione recente (la versione 3.21.3 è ok qui sulla mia slackware) altrimenti potrebbero sorgere dei problemi e in quel caso sarà necessario aggiornare CMake via python pip3; in tal caso dare una occhiata a questa pagina delladocumentazione ufficiale sul come fare.

Prerequisiti

clamav e freshclam hanno queste  these librerie come loro dipendenze:

  • libbz2 / bzip2
  • libz / zlib
  • libxml2
  • libpcre2
  • openssl
  • json-c
  • libjson-c / json-c
  • libmspack (built-in by default, enable with `ENABLE_EXTERNAL_MSPACK=ON`)
  • libiconv (built-in to `libc` 99% of the time)
  • pthreads (provided by Linux/Unix)
  • llvm (optional)
  • libcheck (default, disable with `ENABLE_TESTS=OFF`)
  • libcurl
  • libmilter (Unix/Linux-only, disable with `ENABLE_MILTER=OFF`)
  • ncurses or pdcurses, in you need ClamDTop.

Opzionalmente, se siamo in un sistema basato su SystemD:

  • systemd, so ClamD, FreshClam, ClamOnAcc SystemD service.
  • libsystemd, so ClamD will support the `clamd.ctl` socket.

Installazione

Creare l'utente e il gruppo clamav

groupadd clamav
useradd -g clamav -s /bin/false -c "Clam Antivirus" clamav

Scaricare

cd /usr/local/src
wget http://www.clamav.net/downloads/production/clamav-0.104.0.tar.gz
tar -xzf clamav-0.104.0.tar.gz
cd clamav-0.104.0
chown -R root:root .

Build e installazione

Prima di tutto, creare una sottocartella "build". Ciò ci consentirà, all'occorrenza in caso di problemi, di cancellare i file compilati e ricomniciare da capo.

La seguente installazione riprende il path della vecchia versione e usa /usr/localcome default prefix. Se si usa un sistema a 32b cambiare la variabile libdir a /usr/local/lib. Se si utilizza un sistema basato su systemd usare ENABLE_SYSTEMD=ON.

mkdir build 
cd build

cmake \
       -D CMAKE_INSTALL_PREFIX=/usr/local \
       -D CMAKE_INSTALL_FULL_LIBDIR=/usr/local/lib64 \
       -D APP_CONFIG_DIRECTORY=/usr/local/etc \
       -D ENABLE_MILTER=ON \
       -D ENABLE_SYSTEMD=OFF \
       -D ENABLE_TESTS=ON \
       -D CMAKE_BUILD_TYPE=Release ..

cmake --build .
ctest
cmake --build . --target install

Configurazione

Creiamo le directory log e database:

mkdir -p /var/log/clamd
chown -R clamav.clamav /var/log/clamd/
chmod -R o-rx /var/log/clamd/

mkdir -p /usr/local/share/clamav
chown clamav.clamav /usr/local/share/clamav

/usr/local/etc/clamd.conf

Prestare attenzione almeno alle seguenti righe, in particolare a quella che stabilisce l'utente sotto il quale deve girare il processo:

# Questo deve essere commentato
# Example
LogFile /var/log/clamd/clamd.log
LogTime yes
DatabaseDirectory /usr/local/share/clamav/
User clamav
TCPSocket 3310
TCPAddr 127.0.0.1

/usr/local/etc/freshclam.conf

# Commentare o rimuovere la linea qui sotto.
#Example
DatabaseDirectory /usr/local/share/clamav/
UpdateLogFile /var/log/clamd/freshclam.log
DatabaseOwner clamav
# Decommentare la linea seguente e sostituire XY con il codice della tua nazione. 
# See http://www.iana.org/cctld/cctld-whois.htm for the full list.
DatabaseMirror db.it.clamav.net
NotifyClamd /usr/local/etc/clamd.conf

Logrotate

Copiare questo script in /etc/logrotate.d:

cat > /etc/logrotate.d/clamav << __EOF__
/var/log/clamd/*.log {
  daily
  notifempty
  missingok
  postrotate
  /usr/bin/killall -HUP freshclam 2> /dev/null || true
  /usr/bin/killall -HUP clamd 2> /dev/null || true
  endscript
}
__EOF__

Avvio di clamd e freshclam

E' necessario avviare freshclam prima di clamav affinchè venga installato preventivamente il database.

Creiamo uno startup script come questo per freshclam (scarica):

#!/bin/sh 
# 
# Start/stop/restart freshclam. 
# 

DAEMON=/usr/local/bin/freshclam 

# Start clamav: 
start() { 
 if [ -x $DAEMON ]; then 
   echo -n "Starting freshclam daemon ... " 
   $DAEMON -d 
   echo " done." 
 fi 
} 

# Stop clamav: 
stop() { 
   echo -n "Stopping freshclam daemon ... " 
   killall -TERM freshclam 
   echo " done." 
} 

# Restart clamav: 
restart() { 
 stop 
 sleep 1 
 start 
} 

case "$1" in 
'start') 
 start 
 ;; 
'stop') 
 stop 
 ;; 
'restart') 
 restart 
 ;; 
*) 
 echo "usage $0 start|stop|restart" 
esac

Avvio del daemon:

cd /usr/local/bin
wget https://notes.sagredo.eu/files/qmail/freshclamctl
chmod +x /usr/local/bin/freshclamctl
freshclamctl start

Controlliamo che il database sia stato aggiornato

# more /var/log/clamd/freshclam.log

--------------------------------------
freshclam daemon 0.96.3 (OS: linux-gnu, ARCH: x86_64, CPU: x86_64)
ClamAV update process started at Fri Oct 22 13:15:43 2010
main.cvd is up to date (version: 52, sigs: 704727, f-level: 44, builder: sven)
WARNING: getfile: daily-11979.cdiff not found on remote server (IP: 195.22.205.162)
WARNING: getpatch: Can''t download daily-11979.cdiff from db.it.clamav.net
WARNING: getfile: daily-11979.cdiff not found on remote server (IP: 213.92.8.5)
WARNING: getpatch: Can''t download daily-11979.cdiff from db.it.clamav.net
WARNING: getfile: daily-11979.cdiff not found on remote server (IP: 193.206.139.37)
WARNING: getpatch: Can''t download daily-11979.cdiff from db.it.clamav.net
WARNING: Incremental update failed, trying to download daily.cvd
Downloading daily.cvd [100%]
daily.cvd updated (version: 12167, sigs: 142570, f-level: 53, builder: guitar)
Downloading bytecode.cvd [100%]
bytecode.cvd updated (version: 86, sigs: 10, f-level: 53, builder: edwin)
Database updated (847307 signatures) from db.it.clamav.net (IP: 193.206.139.37)
Clamd successfully notified about the update.
--------------------------------------

Creiamo uno script clamdctl (scarica) come questo nella cartella /usr/local/bin:

#!/bin/sh 
# 
# Start/stop/restart clamav. 
# 

DAEMON=/usr/local/sbin/clamd 

# Start clamav: 
start() { 
 if [ -x $DAEMON ]; then 
   echo -n "Starting clamd daemon:  /usr/sbin/clamd " 
   $DAEMON 
   echo " done." 
 fi 
} 

# Stop clamav: 
stop() { 
  echo -n "Stopping clamd daemon ... " 
  killall -TERM clamd 
  echo " done." 
} 

# Restart clamav: 
restart() { 
  stop 
  sleep 1 
  start 
} 

# Help 
help() { 
  $DAEMON --help 
  exit 
} 

case "$1" in 
'start') 
 start 
 ;; 
'stop') 
 stop 
 ;; 
'restart') 
 restart
  ;; 
'help') 
 help 
 ;; 
*) 
 echo "usage $0 start|stop|restart|help" 
esac

Avvio del daemon

cd /usr/local/bin
wget https://notes.sagredo.eu/files/qmail/clamdctl 
chmod +x /usr/local/bin/clamdctl 
clamdctl help

                      Clam AntiVirus Daemon 0.96.3
           By The ClamAV Team: http://www.clamav.net/team
           (C) 2007-2009 Sourcefire, Inc.

    --help                   -h             Show this help.
    --version                -V             Show version number.
    --debug                                 Enable debug mode.
    --config-file=FILE       -c FILE        Read configuration from FILE.

clamdctl start

Non dimentichiamo di abilitare l'avvio di clamd e freshclam al boot della macchina in rc.local

Commenti

clamav parte da solo

Clamd parte da solo all'avvio di Lubuntu 18.04 e clamav non si ferma più, sottraendo un mucchio di ram.

Come fare ad impostare l'avvio  solo manuale ?

Clamtk è già installato , e  non ci sono pianificazioni di attività .

Risulta un utente " Clamav "  che avvia clamd .

Grazie per la risposta

Rispondi | Permalink

clamav parte da solo

Non conosco per niente Ubuntu, quindi non posso aiutarti. Posso solo dire che se lo installi compilandolo a mano di sicuro non scrive nulla negli script di sistema.

Rispondi | Permalink