ClamAV

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

Creiamo l'utente e il gruppo clamav e installiamo:

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

./configure
make
make install

ldconfig

Configurazione

Creiamo la directory log:

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

/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

Test

Questo test dalla linea di comando dovrebbe essere fatto dalla directory sorgente di clamav. Ci dovrebbero essere alcuni file di test nella cartella clamav-x.yz/test. Il risultato della scansione sarà salvato in scan.txt

# cd /path/to/src/clamav/test
# clamscan -r -l scan.txt
----------- SCAN SUMMARY -----------
Known viruses: 834112
Engine version: 0.96.3
Scanned directories: 312
Scanned files: 7541
Infected files: 49
Data scanned: 273.18 MB
Data read: 306.89 MB (ratio 0.89:1)
Time: 24.649 sec (0 m 24 s)

Controlliamo il file scan.txt:

clamav-0.97/test/clam.chm: ClamAV-Test-File FOUND
clamav-0.97/test/clam.exe.bz2: ClamAV-Test-File FOUND
clamav-0.97/test/clam.bz2.zip: ClamAV-Test-File FOUND
clamav-0.97/test/clam-upx.exe: ClamAV-Test-File FOUND

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

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

#!/bin/sh

COMMAND=$1
DAEMON=/usr/local/sbin/clamd

if [ "$COMMAND" == "start" ] ; then
    echo -n "Starting clamd daemon ... "
    $DAEMON
    echo " done."
    exit
elif [ "$COMMAND" == "stop" ] ; then
    echo -n "Stopping clamd daemon ... "
    killall -TERM clamd
    echo " done."
    exit
elif [ "$COMMAND" == "help" ] ; then
    $DAEMON --help   
    exit
else
    echo "usage: $0 start|stop|help"
    exit
fi

Avvio del daemon

# 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

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

#!/bin/sh

COMMAND=$1
DAEMON=/usr/local/bin/freshclam

if [ "$COMMAND" == "start" ] ; then
    echo -n "Starting freshclam daemon ... "
    $DAEMON -d
    echo " done."
    exit
elif [ "$COMMAND" == "stop" ] ; then
    echo -n "Stopping freshclam daemon ... "
    killall -TERM freshclam
    echo " done."
    exit
else
    echo "usage: $0 start|stop"
    exit
fi

Avvio del daemon:

chmod +x /usr/local/bin/freshclamctl
freshclamctl start

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

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.
--------------------------------------

Aggiungere il database di foxhole

Prima di tutto un grande grazie a Costel Balta per il suo ennesimo contributo a questa guida. Quanto sotto riportato mi è stato suggerito da lui.

I malware Zero hour (0hr) inviati via email sono sempre stati un problema. ClamAV può essere anche usato per bloccare questi attacchi. I database di foxhole hanno l'estensione .cdb, i quali usasno il sistema ClamAV per ricercare all'interno di certi file archivio dei file con nomi riconducibili a malware conosciuti e inoltre consente l'uso delle Espressioni Regolari, sugli stessi nomi dei file.

Per aggiungere il database di foxhole (http://sanesecurity.com/foxhole-databases/) è sufficiente salvare il file foxhole_all.cdb nella DatabaseDirectory di clamav, assegnare i privilegi all'utente clamav e riavviare il servizio:

cd /usr/local/share/clamav/
wget http://ftp.swin.edu.au/sanesecurity/foxhole_all.cdb
chown clamav:clamav foxhole_all.cdb
clamdctl stop
clamdctl start