Guide ClamAV : installer et configurer un antivirus sur Linux

Blue TeamLinux & Logiciels Libres

Guide ClamAV : installer et configurer un antivirus sur Linux

Dans ce tutoriel, nous allons apprendre à déployer et à configurer un antivirus open source sous Linux : ClamAV. Nous verrons comment il fonctionne et comment il peut être utilisé afin d’analyser la signature des fichiers sur un système. Nous l’utiliserons aussi dans un cas concret pour sécuriser une plateforme web traitant des documents externes.

ClamAV, comment ça marche ?

ClamAV est une solution antivirus open source largement utilisée pour la détection de malwares sur les serveurs Linux. Il se compose principalement de trois composants :

  • clamav-daemon (clamd), qui offre un scanner rapide en mode démon et peut être interrogé localement,
  • freshclam, qui assure la mise à jour automatique des signatures virales,
  • clamscan, un outil en ligne de commande permettant de réaliser des scans ad hoc.

Concrètement, ClamAV ne devine pas si un fichier est malveillant : il compare le contenu des fichiers avec une base de signatures virales régulièrement mise à jour. On peut le faire tourner en tâche de fond, l’interroger depuis une application web (directement via le code), ou encore planifier des scans réguliers avec ou .

Pour exécuter un scan avec ClamAV, il y a deux outils : ou . Ce sont deux méthodes différentes et natives de solliciter ClamAV, mais elles ne fonctionnent pas de la même façon. Voici quelques éléments de comparaison entre les deux :

Critère
Principe Scanner autonome qui embarque son propre moteur Client léger qui interroge le démon
Démon requis Non, fonctionne seul Oui, doit tourner
Base de signatures Rechargée en mémoire à chaque exécution Déjà chargée en permanence par
Vitesse de démarrage Lente (plusieurs secondes de chargement, à cause du chargement de la base de signatures) Quasi instantanée
Consommation mémoire Élevée à chaque lancement (plusieurs centaines de Mo) Faible côté client (le démon porte la charge)
Source de configuration Options en ligne de commande Hérite des réglages de
Accès aux fichiers Lit directement les fichiers (aucun souci si exécuté en root) Le démon tourne sous , donc il nécessite souvent (nous verrons un cas par la suite).

Installation et configuration de ClamAV sur Linux

Installation des paquets ClamAV

La première étape consiste à mettre à jour nos dépôts et à installer ClamAV ainsi que son démon :


Ces paquets incluent le moteur de détection, le démon en arrière-plan, et le service de mise à jour des signatures freshclam. En effet, l’installation de ces deux paquets va aussi installer les dépendances suivantes : , , , .

Mise à jour initiale des signatures

Après l’installation, les signatures virales sont vides. Il est donc nécessaire d’effectuer une mise à jour manuelle pour télécharger les premières signatures, puis de laisser freshclam tourner en tâche de fond pour maintenir la base à jour.

C’est quoi une signature virale ?

Une signature virale est une empreinte caractéristique d’un malware, utilisée pour l’identifier. On peut la comparer à une empreinte digitale pour un virus.

ClamAV dispose d’une base de signatures (fichiers, chaînes de caractères, hashs, etc.). Lors d’un scan, il lit le contenu d’un fichier et cherche des correspondances avec ces signatures. Si une correspondance est trouvée, le fichier est détecté comme infecté ou suspect.

La qualité et le maintien à jour de cette base de signatures sont donc importants : un antivirus sans signatures à jour est quasiment aveugle, car les menaces évoluent très rapidement.

Voici comment mettre à jour ou installer pour la première fois nos bases de signatures ClamAV :


Vous trouverez ensuite les bases de signatures nouvellement téléchargées ou mises à jour dans le dossier :


interroge régulièrement les serveurs de ClamAV pour récupérer les dernières signatures. Nous devons activer au démarrage (c’est souvent le cas par défaut après installation) :


Démarrage et activation du démon clamav-daemon

Pour que le démon ClamAV soit actif et se lance automatiquement au démarrage, nous allons utiliser la commande suivante :


Vérifions son statut avec :


ClamAV peut communiquer via :

  • Une socket locale (),
  • Un port TCP () en écoute locale ou externe.

Pour des raisons de sécurité, il est recommandé d’utiliser le LocalSocket lorsque l’accès se fait depuis le même serveur ou une application locale. Cela évite d’ouvrir le démon au réseau et limite les risques.

ClamAV peut également être utilisé en tant que serveur et alors être interrogé par plusieurs clients. Mais ce n’est pas l’objectif de ce tutoriel.

Le chemin du socket est généralement ou . La configuration se trouve dans , où vous pouvez vérifier ou modifier la ligne suivante si besoin (pas nécessaire par défaut) :


Je vous invite à prendre le temps de regarder les autres options. C’est ici que vous pourrez ajuster le comportement de ClamAV.

Vérification des composants

Nous allons à présent réaliser un premier test de scan avec ClamAV en ligne de commande, il faut commenter par lui donner quelque chose à scanner. Utilisons le fichier EICAR :

Qu’est-ce que le fichier EICAR ?

Le fichier EICAR (European Institute for Computer Antivirus Research) est un faux virus de test : un simple fichier texte inoffensif spécialement conçu pour permettre de vérifier le bon fonctionnement d’un antivirus sans utiliser un vrai malware. Il ne contient aucun code malveillant, mais est cependant reconnu comme “virus de test” par la plupart des antivirus, dont ClamAV. Il permet de tester la détection, les logs, les alertes, etc.

Pour le créer, il suffit d’insérer cette simple chaine de caractères dans un fichier texte :


Lançons à présent notre premier scan manuel ClamAV à l’aide de la commande :


Voici le détail des options que nous venons d’utiliser :

  • : n’affiche que les fichiers infectés.
  • : supprime les fichiers détectés comme infectés.
  • : parcourt récursivement les sous-répertoires (pas indispensable ici puisque l’on cible un fichier, mais utile en pratique).

Voici le retour que vous pourrez obtenir :


Nous avons ici l’information claire que le fichier a été détecté comme malveillant et supprimé. Un sommaire nous donne ensuite quelques informations complémentaires comme le temps de scan, le nombre de fichiers scannés, la version du moteur et le nombre de signatures en base.

Nous avons maintenant la confirmation que le moteur ClamAV fonctionne, que les signatures sont bien chargées et que la détection est opérationnelle. Nous allons passer à un cas de figure un peu plus réaliste d’utilisation de ClamAV.

Intégration côté serveur web : scénarios d’analyse des CVs

Pour illustrer l’action de ClamAV, nous allons utiliser une tâche planifiée pour traiter les documents récemment déposés et les mettre dans un répertoire “sûr” une fois qu’ils ont été vérifiés.

Nous allons travailler avec les répertoires suivants :

  • : répertoire de dépôt initial des fichiers (par le serveur web).
  • : répertoire des fichiers scannés et sûrs.
  • : quarantaine pour les fichiers infectés (optionnel).

Nous allons créer un script shell qui :

  1. Parcourt les fichiers dans .
  2. Les scanne avec ou .
  3. Déplace chaque fichier selon le résultat.

Voici un tel script :


Nous devons ensuite le rendre exécutable à l’aide de la commande suivante :


Nous allons maintenant tester notre script manuellement, en ajoutant dans notre répertoire de réception un fichier comme précédemment, et un fichier ne contenant pas de signature connue et non malveillant, puis nous exécuterons notre script :


C’est un succès ! Chacun de nos fichiers a bien été trié dans le bon répertoire et notre fichier se retrouve dans le dossier . Vous trouverez, pour chaque analyse lancée par notre script, le résultat et le sommaire dans le fichier .

La prochaine étape consiste bien sûr à créer la tâche planifiée qui va exécuter ce script régulièrement. Partons sur le principe d’une exécution toutes les 15 minutes.

Attention : l’analyse de toute une arborescence peut prendre plusieurs minutes, notamment parce que nos bases de signatures sont grandes (et continuent de grandir). Veillez donc à faire des tests et à ne pas lancer des scans trop fréquents dont la charge s’accumulerait au fil du temps (risque de déni de service).

Je vous recommande de consulter notre tutoriel sur les tâches planifiées avec si vous ne connaissez pas du tout cet outil :

Utilisons la commande pour ajouter une nouvelle tâche planifiée :


Nous pouvons par exemple ajouter la ligne suivante :


Et voilà, il faut à présent uniquement s’assurer que l’application dépose bien les fichiers uploadés par les visiteurs dans le dossier et que les utilisateurs internes ne peuvent accéder qu’à . La tâche planifiée fera le reste.

L’analyse en temps réel avec ClamAV

Avec ClamAV On-Access Scanning, l’antivirus peut effectuer une analyse en temps réel des fichiers stockés sur votre machine. Ceci va s’appuyer sur un service à part, et comme on a déjà installé le paquet , il doit être déjà présent sur la machine locale.

Pour en avoir le cœur net, exécutez cette commande (s’il n’y a pas d’erreur, c’est tout bon).


L’analyse en temps réel est personnalisable, c’est-à-dire qu’elle peut être limitée à certains répertoires, à certains utilisateurs ou encore seulement aux fichiers qui ne dépassent pas une certaine taille.

Créer le service pour le scan temps réel

Nous allons créer un service pour exécuter ce composant additionnel (il existe déjà un service par défaut, mais nous allons en créer un personnalisé).


Dans ce fichier, copiez-collez cette configuration :


Enregistrez et fermez le fichier.

Il faut savoir que :

  • : cette option évite les erreurs d’accès lors de l’analyse en temps réel de fichiers stockés dans certains répertoires, comme dans le d’un utilisateur, par exemple.
  • : le fichier journal où seront indiquées les erreurs et les informations sur les fichiers infectés détectés.
  • : lorsqu’un fichier malveillant est détecté, il sera déplacé vers la quarantaine.

Désormais, activez le démarrage automatique du service et lancez-le :


Préparer le dossier pour la quarantaine

Pour que ClamAV puisse déplacer vers la quarantaine les fichiers infectés, nous devons préparer le dossier où seront stockés ces fameux fichiers.

Exécutez ces deux commandes :


Configuration du scan en temps réel

Désormais, éditez le fichier pour personnaliser la fonctionnalité de scan en temps réel. Ici, je vais configurer ClamAV pour qu’il effectue une analyse en temps réel uniquement sur le répertoire suivant : . Sur un serveur, vous pourriez par exemple cibler le répertoire des uploads, s’il s’agit d’une application Web.


À la suite de la configuration, ajoutez les lignes suivantes pour configurer la protection en temps réel (adaptez selon vos besoins).

Activez la protection en temps réel :


Surveiller uniquement le répertoire , de façon récursive. Besoin d’en surveiller plusieurs ? Ajoutez plusieurs fois l’instructions .


Pour exclure clamav et root du périmètre, indiquez également ceci :


Ces deux directives ne sont pas anodines : elles servent à éviter que l’antivirus ne se scanne lui-même en boucle. En effet, lorsque le démon ClamAV analyse un fichier, il doit l’ouvrir pour le lire : cette ouverture constitue elle-même un accès fichier, qui serait à son tour détecté par le scanner On-Access. On entrerait alors dans une boucle sans fin : ClamAV scanne un fichier, ce qui déclenche un nouvel évènement, qui relance un scan, et ainsi de suite. La directive permet justement d’exclure du périmètre tous les accès réalisés par l’utilisateur , sous lequel tourne le démon.

La seconde ligne, , exclut quant à elle les accès effectués par l’utilisateur root. Dans certains cas, il est utile de la garder, notamment si c’est un serveur où il y a plus d’actions effectuées en tant que root. Sur un poste de travail, c’est mieux d’insérer cette ligne.

Il est également possible d’exclure certains répertoires. Ceci peut s’avérer utile si vous scannez une racine plus importante (comme ) ou l’ensemble du système, afin d’éviter les dossiers de cache ou ceux n’ayant pas d’intérêt. Par exemple :


Relancez les deux services :


Tester la protection

Lancez l’affichage en temps réel des logs relatifs à l’analyse en temps réel :


Puis, téléchargez depuis le Web un fichier malveillant (EICAR).


Le fichier malveillant est immédiatement détecté et placé en quarantaine.

La protection en temps réel sur le répertoire “Téléchargements” est opérationnelle !

Planifier un scan avec ClamAV

ClamAV peut aussi effectuer un scan périodique sur votre système, que ce soit sur l’intégralité de la machine ou certains répertoires. Pour mettre en place cette routine, nous pouvons créer un service systemd dédié associé à un timer. L’exemple ci-dessous permet de scanner tout le répertoire chaque dimanche à 2 heures du matin.

Avant de commencer, sachez que le couple service/timer repose sur une séparation des rôles :

  • Le fichier définit ce qui doit être exécuté (ici, la commande d’analyse sur ),
  • Le fichier associé définit quand l’exécuter (chaque dimanche à 2 h du matin), systemd se chargeant de déclencher automatiquement le service au moment voulu.

Passons maintenant à la création des deux fichiers.

Le service

Créez :


scanne récursivement un dossier par défaut, donc tout et ses sous-dossiers seront couverts par cette analyse. Ici, les paramètres et ont été ajoutés pour mettre le scan en basse priorité CPU/disque : même si la machine n’est pas totalement inactive à 2 h, le scan ne gênera pas le système. Ce n’est pas forcément indispensable, selon l’activité nocturne de la machine analysée (parfois on fait aussi des sauvegardes sur cette période). De plus, les dossiers utilisés pour le cache seront exclus de l’analyse.

Enregistrez et fermez le fichier.

Le timer

Créez :


Ici, la planification attendue est définie par = tous les dimanches à 2 h 00. Pour changer de jour, remplacez par une autre valeur : , , , , ou . Enfin, sachez que rattrape le scan au prochain démarrage s’il a été manqué (machine éteinte à 2 h).

Dans le cas où vous avez un doute sur la syntaxe de la planification, vous pouvez aussi contrôler la syntaxe avec cette commande :


Activation et vérification

Une fois les deux fichiers prêts, vous pouvez exécuter ces commandes pour activer le service, le démarrer (il attendra la prochaine planification), et afficher la planification à venir. Ceci permettra de valider la configuration mise en place.


Si vous souhaitez lancer un test dès maintenant, exécutez cette commande :


Consultez les journaux :


Bonnes pratiques et limites de ClamAV

Nous avons ici vu une installation et une utilisation basiques et standards de ClamAV, il contient néanmoins de nombreux paramètres et contextes d’utilisation. Voyons rapidement les principales bonnes pratiques et limites de ClamAV :

Bonnes pratiques

  • Mettre à jour régulièrement les signatures : vérifier que tourne correctement et surveiller ses logs ().
  • Limiter les accès au démon : privilégier plutôt qu’un port TCP ouvert sur l’extérieur s’il n’est pas nécessaire, restreindre les droits sur la socket et les répertoires scannés.
  • Adapter la configuration : dans , il est possible d’ajuster : les limites de taille de fichier, les types d’archives scannées, le nombre de threads, etc. Cela pour optimiser l’utilisation de ClamAV en fonction de vos besoins.
  • Journaliser les scans : conserver des logs d’analyse (fichiers infectés, erreurs) pour faciliter le diagnostic et l’audit.
  • Tester régulièrement : réutiliser le fichier EICAR pour s’assurer que toute la chaîne fonctionne (upload, scan, logs).

Limites de ClamAV

  • Basé principalement sur des signatures : ClamAV repose avant tout sur une base de signatures, il ne doit pas être confondu avec un EDR. Il est notamment moins efficace contre les malwares très récents (0-day), les variantes fortement obfusquées et les attaques avancées.
  • Pas d’agent “complet” sur poste utilisateur : ClamAV est surtout destiné aux serveurs Linux, pas à remplacer un antivirus complet sur un poste Windows.
  • Impact sur les performances : les scans peuvent être coûteux en CPU et prendre du temps, surtout sur de gros volumes de données ou des arborescences importantes.

Conclusion

ClamAV est une solution antivirale reconnue pour les environnements Linux, il est toujours préférable qu’il fasse partie des briques de sécurité de vos environnements, mais il faut connaitre son fonctionnement et savoir bien l’utiliser, notamment via des scans programmés et réguliers.

Il faut notamment voir ClamAV comme une brique de sécurité parmi d’autres, comme le filtrage au niveau du proxy/mail, le durcissement des serveurs, le contrôle des accès et la sensibilisation des utilisateurs.

Pour aller plus loin, retrouvez la documentation officielle de ClamAV et découvrez ClamUI, une GUI pour ClamAV :

FAQ

Peut-on installer ClamAV sous Windows ?

Oui, ClamAV propose aussi des binaires pour Windows, mais il est surtout utilisé sur les serveurs Linux. Sur Windows, il est plutôt employé comme moteur de scan complémentaire que comme antivirus principal de poste.

ClamAV met-il à jour ses bases de signatures tout seul ?

Oui, le composant peut être exécuté en service et télécharger automatiquement les dernières signatures virales. Il suffit de l’activer au démarrage et de vérifier que l’accès Internet est autorisé vers les serveurs de mise à jour.

ClamAV suffit-il pour protéger un serveur web recevant des fichiers (CV, documents, etc.) ?

ClamAV est une très bonne brique de protection pour filtrer les fichiers entrants, mais il ne remplace pas une approche globale de sécurité. Il doit être combiné avec un durcissement du serveur, des contrôles d’accès et de bonnes pratiques côté application.

ClamAV détecte-t-il les virus “récents” ou les attaques 0-day ?

ClamAV repose principalement sur des signatures, il est donc très efficace sur les malwares connus. En revanche, comme tous les antivirus basés sur signatures, il est moins performant contre les 0-day ou les menaces très nouvelles qui n’ont pas encore de signature.

SOURCE