5. Clam AntiVirus

En quelques années, le projet ClamAV™ est devenu la référence en matière de logiciel libre antivirus. La réactivité de l'équipe de développement est excellente qu'il s'agisse de la vitesse de publication des signatures de nouveaux virus ou des publications de correctifs de sécurité du logiciel lui-même.

L'installation et la configuration de cet antivirus est assez immédiate dans la mesure où le paquet Debian est parfaitement maintenu et son adaptation au service amavisd-new ne demande pas beaucoup d'efforts.

5.1. Paquets Debian à installer

Les paquets Debian à installer pour une utilisation avec le service amavisd-new sont donnés dans la liste suivante :

$ dpkg -l *clam* |grep ^ii
ii  clamav            0.90.1-2  antivirus scanner for Unix
ii  clamav-base       0.90.1-2  base package for clamav, an anti-virus utility
ii  clamav-daemon     0.90.1-2  antivirus scanner daemon
ii  clamav-freshclam  0.90.1-2  downloads clamav virus databases from the Internet
ii  libclamav2        0.90.1-2  virus scanner library

Cette liste comprend trois fonctions distinctes.

clamav

Ce paquet contient le scanner clamscan que l'on utilise au niveau système de fichiers. Ce mode de traitement est excessivement coûteux en temps d'accès disque et dégrade très sensiblement les performances du traitement du courrier électronique. Le service amavisd-new ne fait appel à ce scanner qu'en secours ; lorsque les antivirus primaires travaillant en RAM ne sont plus disponibles.

Vis-à-vis du service amavisd-new, le scanner est un antivirus secondaire. On obtient les informations suivantes lors du lancement du service.

amavis[3000]: Found secondary av scanner ClamAV-clamscan at /usr/bin/clamscan
clamav-daemon

Ce paquet contient le démon clamd qui réside en mémoire de façon permanente et qui communique avec le service amavisd-new via un socket UNIX. C'est ce mode de traitement qui donne les meilleures performances. Une fois que le service a extrait tous les objets contenu dans les champs d'un message, il transmet ces objets aux anitivirus pour examen. Il est possible de stocker les objets à traiter dans un système de fichiers «monté» en RAM pour accroître encore les performances.

Vis-à-vis du service amavisd-new, le démon est un antivirus primaire. On obtient les informations suivantes lors du lancement du service.

amavis[3000]: Using internal av scanner code for (primary) ClamAV-clamd
freshclam

Ce paquet contient le démon freshclam qui réside en mémoire de façon permanente et qui collecte périodiquement les nouvelles signatures de virus. Ce démon est aussi chargé de notifier le démon clamd pour qu'il recompose son cache en fonction des nouvelles signatures.

Ce démon n'a aucune interaction avec le service amavisd-new.

5.2. Interaction avec amavisd-new

Comme les communications entre les démons freshclam, clamd et le service amavisd-new son basées sur un socket UNIX, les principales opérations de configuration consistent à organiser l'arborescence et les permissions sur le système de fichiers.

  1. On choisit de stocker les informations sur l'état courant des démons dans le répertoire /var/run/amavis.

  2. Ce répertoire et tous ses objets doivent avoir pour propriétaire l'utilisateur et le groupe amavis.

En cours d'exécution, on obtient les informations suivantes.

$ ls -lA /var/run/amavis/
total 8
-rw-r----- 1 amavis amavis 0 2006-12-30 19:21 amavisd.lock
-rw-r----- 1 amavis amavis 5 2006-12-30 09:35 amavisd.pid
srwxr-x--- 1 amavis amavis 0 2006-12-30 09:35 amavisd.sock
-rw-rw---- 1 amavis amavis 4 2006-12-30 09:34 clamd.pid
srwxrwxrwx 1 amavis amavis 0 2006-12-30 09:34 clamd.sock
Configuration de freshclam

La configuration de ce démon suit les directives du paquet Debian.

$ cat /etc/clamav/freshclam.conf
# Automatically created by the clamav-freshclam postinst
# Comments will get lost when you reconfigure the clamav-freshclam package

DatabaseOwner clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogFileMaxSize 0
MaxAttempts 5
# Check for new database 8 times a day
Checks 8
DatabaseMirror db.local.clamav.net
DatabaseMirror database.clamav.net
DatabaseDirectory /var/lib/clamav/
NotifyClamd 1
DNSDatabaseInfo current.cvd.clamav.net

1

La notification du démon clamd est l'élément essentiel de ce fichier de configuration.

Configuration de clamd

La configuration de ce démon suit aussi les directives du paquet Debian.

$ cat /etc/clamav/clamd.conf
#Automatically Generated by clamav-base postinst
#To reconfigure clamd run #dpkg-reconfigure clamav-base
#Please read /usr/share/doc/clamav-base/README.Debian.gz for details
LocalSocket /var/run/amavis/clamd.sock 1
FixStaleSocket
User amavis 2
AllowSupplementaryGroups
ScanMail
ScanArchive
ArchiveMaxRecursion 5
ArchiveMaxFiles 1000
ArchiveMaxFileSize 10M
ArchiveMaxCompressionRatio 250
ScanRAR
MaxDirectoryRecursion 15
ReadTimeout 180
MaxThreads 12
MaxConnectionQueueLength 15
LogSyslog
LogFile /var/log/clamav/clamav.log
LogTime
LogFileMaxSize 0
PidFile /var/run/amavis/clamd.pid
DatabaseDirectory /var/lib/clamav/
SelfCheck 3600

1

Conformément au choix énoncé ci-dessus, on utilise le répertoire /var/run/amavis/ pour stocker le fichier socket.

2

Le propriétaire du processus clamd est l'utilisateur amavis.

Utilisateur clamav

L'utilisateur clamav doit faire partie du groupe amavis.

$ grep clam /etc/group
amavis:!:109:clamav
clamav:!:112:

5.3. Configuration du service amavisd-new

C'est dans la Section VII - External programs, virus scanners du fichier amavisd.conf que l'on trouve les paramètres d'appel à l'antivirus clamd. Il faut désigner le fichier socket tel qu'il a été défini ci-avant : /var/run/amavis/clamd.sock

# ### http://www.clamav.net/
['ClamAV-clamd',
  \&ask_daemon, ["CONTSCAN {}\n", "/var/run/amavis/clamd.sock"],
  qr/\bOK$/, qr/\bFOUND$/,
  qr/^.*?: (?!Infected Archive)(.*) FOUND$/ ],
# # NOTE: run clamd under the same user as amavisd, or run it under its own
# #   uid such as clamav, add user clamav to the amavis group, and then add
# #   AllowSupplementaryGroups to clamd.conf;
# # NOTE: match socket name (LocalSocket) in clamav.conf to the socket name in
# #   this entry; when running chrooted one may prefer socket "$MYHOME/clamd".