À l'heure actuelle, utiliser une seule source de signature de virus n'est pas très professionnel. De nombreux exemples ont montré qu'il est très utile d'utiliser plusieurs antivirus en parallèle pour le traitement du courrier électronique.
La réactivité des équipes techniques des fournisseurs d'antivirus doit être inférieure à la dizaine de minutes. Face à une contrainte aussi «infernale», il est tout à fait normal qu'un nouveau (ver|virus) échappe à la vigilance d'un fournisseur. Il est donc logique de chercher à mettre toutes les chances de son côté en utilisant plusieurs antivirus de (sources|marques) différentes.
Tous les antivirus ne fonctionnent pas de la même façon. Il existe plusieurs techniques d'analyse qui donnent des résultats différents suivant les modes de propagation des codes malveillants. Là encore, il est logique de chercher à mettre toutes les chances de son côté ...
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.
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.
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
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
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.
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.
On choisit de stocker les informations sur l'état courant des démons
dans le répertoire /var/run/amavis.
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
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/ NotifyClamdDNSDatabaseInfo current.cvd.clamav.net
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.sockFixStaleSocket User amavis
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
clamav
L'utilisateur clamav
doit faire partie du groupe amavis.
$ cat /etc/group |grep clam amavis:!:109:clamav clamav:!:112:
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".
Sophos™ est un fournisseur d'antivirus propriétaire non libre.
En plus des outils antivirus propriétaires traditionnels,
Sophos™ fournit un jeu de bibliothèques qui
permettent de développer un produit tiers. C'est ce jeu de bibliothèques
appelé SAV interface qui est utilisé par le démon
sophie. Voir Section 5.2.2, « Sophie ».
Chaque mois, il faut télécharger une nouvelle archive SAV
interface pour que le démon sophie
puisse bénéficier des nouveaux développements du fournisseur.
À partir du site Mises à jour Sophos™, on télécharge l'archive
linux.intel.libc6.glibc.2.2.tar.Z.
Il s'agit essentiellement de copier des fichiers dans
l'arborescence /usr/local/.
$ tar xvzf linux.intel.libc6.glibc.2.2.tar.Z <snipped/> $ cd sav-install $ su Password: # ./install.sh -v Utilitaire d'installation de Sophos Anti-Virus [[Linux/Intel]] Copyright (c) 1998-2005 Sophos Plc, Oxford, Angleterre Initialisation... Les binaires seront installés dans '/usr/local/bin' Les bibliothèques seront installées dans '/usr/local/lib' Les pages man seront installées dans '/usr/local/man' Les données virales seront installées dans '/usr/local/sav' Le texte de message sera installé dans '/usr/local/sav' SWEEP sera installé InterCheck ne sera pas installé <snipped/> Ajustement en cours de /etc/sav.conf <snipped/>
Les mises à jour mensuelles et le script
sophos-ide-update.pl renomment les fichiers de
signatures virales et les bibliothèques sans les effacer. Le répertoire
/usr/local/sav/ doit donc être
purgé régulièrement.
Voici une exemple de script exécuté chaque mois :
MailGw:/etc/cron.monthly# cat sav-cleanup
#! /bin/sh
[ -d /usr/local/sav/ ] || exit 0
find /usr/local/sav/ -mtime +90 -exec rm {} \;
sophie est un démon libre qui
utilise les bibliothèques Sophos™. Associé au service
amavisd-new, ce démon joue le rôle
d'antivirus primaire travaillant directement en
mémoire vive (RAM). Ce mode de fonctionnement allie
efficacité et vitesse de traitement.
Le site principal sophie
indique la version la plus récente du démon.
$ wget http://www.clanfield.info/sophie/sophie-3.05.tar.bz2 $ su Password: # mv sophie-3.05.tar.bz2 /usr/local/src # cd /usr/local/src # tar xf sophie-3.05.tar.bz2 # chown -R root.src sophie-3.05
Pour que la compilation du logiciel fasse appel à la bibliothèque d'exploitation des signatures de virus, il est nécessaire de créer un lien symbolique vers la dernière version de cette bibliothèque.
MailGw:/usr/local/lib# ln -s libsavi.so.3 libsavi.so MailGw:/usr/local/lib# ls -larth libsavi.so* -r-xr-xr-x 1 bin bin 1,7M 2006-09-04 16:12 libsavi.so.3.2.07.145 -r-xr-xr-x 1 bin bin 1,7M 2006-10-03 23:34 libsavi.so.3.2.07.149 -r-xr-xr-x 1 bin bin 1,7M 2006-11-09 09:57 libsavi.so.3.2.07.155 -r-xr-xr-x 1 bin bin 1,7M 2006-12-01 20:07 libsavi.so.3.2.07.157 lrwxrwxrwx 1 root staff 21 2006-12-01 20:07 libsavi.so.3 -> libsavi.so.3.2.07.157 lrwxrwxrwx 1 root staff 21 2006-12-01 20:07 libsavi.so.2 -> libsavi.so.3.2.07.157 lrwxrwxrwx 1 root staff 12 2006-12-01 22:11 libsavi.so -> libsavi.so.3
sophie
On retrouve ici les étapes rituelles de compilation d'un logiciel libre.
La commande ./configure contrôle la présence
des outils et des bibliothèques nécessaires à la compilation et génère
les Makefiles.
MailGw:/usr/local/src/sophie-3.05# ./configure <snipped/> checking if only fatal errors will be reported... no configure: creating ./config.status config.status: creating Makefile config.status: creating sophie.cfg config.status: creating config.h config.status: config.h is unchanged
La commande make lance la compilation proprement dite.
MailGw:/usr/local/src/sophie-3.05# make
gcc -g -O2 -Wall -Isav_if -c -o sophie.o sophie.c
gcc -g -O2 -Wall -Isav_if -c -o sophie_init.o sophie_init.c
gcc -g -O2 -Wall -Isav_if -c -o sophie_scandir.o sophie_scandir.c
gcc -g -O2 -Wall -Isav_if -c -o sophie_core.o sophie_core.c
gcc -g -O2 -Wall -Isav_if -c -o sophie_notify.o sophie_notify.c
gcc -g -O2 -Wall -Isav_if -Wl,--strip-all -Wl,-rpath,/usr/local/lib \
-L/usr/local/lib -lsavi sophie.o sophie_init.o \
sophie_scandir.o sophie_core.o sophie_notify.o \
-o sophie
sophie
Comme pour les autres éléments, on installe le programme dans
l'arborescence locale du système indépendante des paquets de la
distribution /usr/local.
# mv /usr/local/bin/sophie /usr/local/bin/sophie.old # cp /usr/local/src/sophie-3.05/sophie /usr/local/bin/
sophie
Il ne reste plus qu'à lancer le démon.
# /etc/init.d/sophie stop # /etc/init.d/sophie start
On valide le chargement du démon en mémoire en consultant les messages systèmes.
# tail -250 /var/log/syslog <snipped/> sophie[337]: NOTICE : SIGNAL '15' caught - cleaning up and exiting. sophie[337]: NOTICE : pSAVI cleaned up and released/terminated sophie[903]: WARNING : Socket '/var/run/amavis/sophie.sock' already exists! sophie[903]: NOTICE : Removing existing socket sophie[905]: NOTICE : Setting configuration options - please wait... sophie[903]: /usr/local/bin/sophie Placed in the background [PID: 9004] sophie[905]: NOTICE : Configuration options set sophie[905]: Sophos engine : Sophos engine version 2.40 sophie[905]: Sophie IDE : Sophos IDE version 4.12 (detects 202043 viruses) sophie[905]: SAVI config : /etc/sophie.savi sophie[905]: Max processes : 20 sophie[905]: Socket path : /var/run/amavis/sophie.sock sophie[905]: Umask : 7 sophie[905]: PID file : /var/run/amavis/sophie.pid sophie[905]: Timeout : 300 seconds sophie[905]: Running as user : amavis sophie[905]: Socket group : amavis sophie[905]: Logname : sophie sophie[905]: Log facility : 16 (mail) sophie[905]: Log priority : 5 (notice) sophie[905]: Error strings? : yes sophie[905]: Timestamps? : no sophie[905]: Show virus name? : yes sophie[905]: Callbacks? : yes sophie[905]: limit_classif : 10 sophie[905]: limit_nextfile : 10000 sophie[905]: limit_decompr : 1000 sophie[905]: socket_check : yes sophie[905]: Sophie version : 3.05
Voici un script d'initialisation à la mode Debian
GNU/Linux que l'on intègre dans les
runlevels à l'aide de la commande
# update-rc.d sophie defaults.
# cat /etc/init.d/sophie
#!/bin/sh
PATH=/sbin:/bin
DAEMON=sophie
SOPHIE=/usr/local/bin/$DAEMON
test -f $SOPHIE || exit 0
case "$1" in
start)
echo -n "Running $DAEMON daemon"
start-stop-daemon --start --quiet -c amavis \
--pidfile /var/run/amavis/$DAEMON.pid \
--exec $SOPHIE -- -D
sleep 5
test -f /var/run/amavis/$DAEMON.pid || echo "(failed)." || exit 1
echo "."
;;
stop)
echo -n "Killing $DAEMON daemon"
start-stop-daemon --stop --quiet -c amavis --pidfile /var/run/amavis/$DAEMON.pid
echo "."
;;
*)
echo "Usage: /etc/init.d/sophie {start|stop}"
exit 1
esac
exit 0
Pour que la configuration soit complète, il manque deux fichiers
de configuration nécessaires au bon fonctionnement du démon et à son
association avec le service
amavisd-new. Ces deux fichiers doivent être
placés dans le répertoire /etc.
le fichier
sophie.cfg contient les paramètres de
fonctionnement du démon tels que son identification de processus,
l'emplacement du fichier socket, son propriétaire, etc.
Voici un patch adapté à la configuration des services utilisés dans ce document.
# diff -uBb /usr/local/src/sophie-3.05/etc/sophie.cfg /etc/sophie.cfg --- /usr/local/src/sophie-3.05/etc/sophie.cfg 2003-03-06 13:00:00.000000000 +0100 +++ /etc/sophie.cfg 2004-02-06 18:27:05.000000000 +0100 @@ -23,12 +23,12 @@ # Location of PID file # # Change requires: RESTART -pidfile: /var/run/sophie.pid +pidfile: /var/run/amavis/sophie.pid # Location of socket file # # Change requires: RESTART -socketfile: /var/run/sophie +socketfile: /var/run/amavis/sophie.sock # Umask for the socket file # @@ -38,12 +38,12 @@ # User to run Sophie as # # Change requires: RESTART -user: mail +user: amavis # Group to run Sophie as # # Change requires: RESTART -group: mail +group: amavis # Scanning timeout (in seconds) # If Sophie child doesn't finish scanning a file within this timeframe,
Le fichier sophie.savi contient les
paramètres des bibliothèques d'exploitation des signatures de virus. À
priori, on s'appuie sur les paramètres fournis avec la distribution de
sophie. On se contente donc de
copier ce fichier.
# cp /usr/local/src/sophie-3.05/etc/sophie.savi /etc
C'est dans la Section VII - External programs, virus
scanners du fichier amavisd.conf que l'on
trouve les paramètres d'appel au démon sophie. Il faut désigner le fichier
socket tel qu'il a été défini ci-avant :
/var/run/amavis/sophie.sock
# ### http://www.vanja.com/tools/sophie/
['Sophie',
\&ask_daemon, ["{}/\n", '/var/run/amavis/sophie.sock'],
qr/(?x)^ 0+ ( : | [\000\r\n]* $)/, qr/(?x)^ 1 ( : | [\000\r\n]* $)/,
qr/(?x)^ [-+]? \d+ : (.*?) [\000\r\n]* $/ ],
Le script Perl
sophos-ide-update a pour but de télécharger les
signatures individuelles des nouveaux virus publiées sur le site du
fournisseur Sophos™. Ces signatures
étant publiées après chaque découverte de nouveaux virus, il faut lancer ce
script périodiquement pour les collecter. Si de nouvelles signatures de
virus sont apparues entre deux exécutions du script, il faut relancer le
démon antivirus résidant en mémoire sophie (voir Section 5.2.2, « Sophie »).
Voici un patch adapté à la configuration des
services utilisés dans ce document. Il s'agit principalement d'identifier
le socket le numéro du processus du démon
sophie.
# diff -uBb /usr/local/src/sophos-ide-update_1.4/sophos-ide-update.pl \ /usr/local/sbin/sophos-ide-update.pl --- /usr/local/src/sophos-ide-update_1.4/sophos-ide-update.pl 2007-02-27 15:03:27.00 +0100 +++ /usr/local/sbin/sophos-ide-update.pl 2007-02-27 18:13:19.00 +0100 @@ -222,8 +222,9 @@ # status reports of each run, along with local timezone timestamps (ISO 8601). # "$savdir/" will be prepended to $log_filename if it does not start with a "/" # - $log_filename = '000last_updated.log'; +# $log_filename = '000last_updated.log'; # $log_filename = '/var/log/000last_updated.log'; + $log_filename = '/var/log/sophos/000last_updated.log'; # Check also the procedure get_sophos_data_directory() further down # if you keep both the /etc/sav.conf and /usr/local/sav in other locations. @@ -280,20 +281,23 @@ # writes its process id (supposedly since Sophie V1.17, although # not in sophie-1.20a1). It does not hurt if the file does not exist. # - $sophie_pidfile = '/var/run/sophie.pid'; +# $sophie_pidfile = '/var/run/sophie.pid'; + $sophie_pidfile = '/var/run/amavis/sophie.pid'; # $sophie_socket is a Unix socket name which Sophie daemon keeps open. # Must be an absolute path. 'lsof' (if available) will try to locate # a parent process (i.e. Sophie children will be ignored) which has # this socket open and runs a command named 'sophie'. # - $sophie_socket = '/var/run/sophie'; +# $sophie_socket = '/var/run/sophie'; + $sophie_socket = '/var/run/amavis/sophie.sock'; # Full path of the 'lsof' program. # In case you do not have it, home of lsof is at: # ftp://vic.cc.purdue.edu/pub/tools/unix/lsof # - $lsof_path = '/usr/local/sbin/lsof'; +# $lsof_path = '/usr/local/bin/lsof'; + $lsof_path = '/usr/bin/lsof'; # Comment out the $lsof_path or $sophie_socket if you want to prevent # 'lsof' from being called regardless of the existence of Sophie socket file.
Une fois que le script de téléchargement des nouvelles signatures est
utilisable, il faut automatiser son exécution à l'aide du service système
cron.
Voici une copie du fichier
/etc/cron.d/sophie un exemple de configuration
qui lance l'exécution du script toutes les 45 minutes. Cette exécution se
fait avec l'identité root pour
avoir la capacité à relancer le démon antivirus.
# /etc/cron.d/sophie: crontab entry for sophie
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
*/45 * * * * root test -e /usr/local/sbin/sophos-ide-update.pl && \
/usr/local/sbin/sophos-ide-update.pl
Vous êtes ici :