Comment installer ClamAV sur Linux : un guide technique complet
ClamAV est un moteur antivirus open-source et multiplateforme maintenu par Cisco Talos qui détecte les virus, chevaux de Troie, rootkits, malwares et autres menaces malveillantes. Il fonctionne selon un modèle de détection basé sur les signatures, appuyé par une base de données continuellement mise à jour (/var/lib/clamav/), et constitue la solution antivirus standard de facto pour les serveurs Linux, les passerelles de messagerie et les environnements d’hébergement web.
Ce guide couvre l’intégralité du cycle d’installation : préparation du système, installation des paquets sur les principales distributions, gestion de la base de données virale avec freshclam, configuration du daemon, stratégies d’analyse, gestion de la quarantaine, automatisation via cron et analyse en temps réel via clamonacc — y compris les pièges en environnement de production que la plupart des tutoriels omettent.
Pourquoi ClamAV est important sur les serveurs Linux
Les systèmes Linux ne sont pas immunisés contre les malwares. Bien que les exploits ciblant Linux soient moins courants que les menaces Windows, les serveurs exécutant des applications web, des relais de messagerie ou des services de partage de fichiers constituent des vecteurs actifs de distribution de malwares — même lorsque l’hôte Linux lui-même n’est pas la cible principale. Un environnement VPS Hosting compromis peut redistribuer silencieusement des fichiers infectés aux utilisateurs finaux, déclencher une mise sur liste noire par des bases de données anti-spam, ou servir de point pivot dans une chaîne d’attaque plus large.
ClamAV répond à ces problèmes en fournissant :
- L’analyse à la demande pour une analyse planifiée ou déclenchée
- L’analyse en mode daemon (
clamd) pour des vérifications à haut débit et faible latence - L’intégration à la passerelle de messagerie via
clamsmtp,amavisd-newouMilter - La surveillance du système de fichiers en temps réel via
clamonacc(noyau Linuxfanotify) - Les signatures bytecode pour la détection heuristique au-delà de la correspondance de motifs statiques
Étape 1 : Préparer et mettre à jour votre système
Avant d’installer un paquet, synchronisez votre index de paquets et appliquez les correctifs de sécurité en attente. Utiliser des bibliothèques système obsolètes aux côtés d’un outil de sécurité crée un faux sentiment de protection.
Pour Debian/Ubuntu :
sudo apt update && sudo apt upgrade -yPour CentOS/RHEL 7 :
sudo yum update -yPour Rocky Linux / AlmaLinux / RHEL 8+ :
sudo dnf update -yPour Fedora :
sudo dnf update -yVérifiez que vos versions du noyau et de glibc sont à jour, car clamonacc (analyse en temps réel) nécessite le noyau 5.1+ pour une prise en charge stable de fanotify.
Étape 2 : Installer ClamAV
ClamAV est disponible dans les dépôts par défaut de toutes les principales distributions. La distinction clé est de savoir si vous installez uniquement le scanner (clamav) ou également le daemon en arrière-plan (clamav-daemon / clamd), ce qui est fortement recommandé pour tout serveur en production.
Pour Debian/Ubuntu :
sudo apt install clamav clamav-daemon -yclamav— installeclamscanetfreshclam
clamav-daemon — installe clamd, le daemon d’analyse persistant qui maintient la base de données virale chargée en mémoire, réduisant considérablement la surcharge par analyse
Pour CentOS/RHEL 7 (nécessite EPEL) :
sudo yum install epel-release -y
sudo yum install clamav clamav-update clamav-scanner-systemd clamd -y
Pour Rocky Linux / AlmaLinux / RHEL 8+ (nécessite EPEL) :
sudo dnf install epel-release -y
sudo dnf install clamav clamav-update clamd -y
Pour Fedora :
sudo dnf install clamav clamav-update clamd -y
Emplacements des binaires à vérifier après l’installation :
Binaire
Chemin
Fonction
clamscan
/usr/bin/clamscan
Scanner CLI à la demande
clamd
/usr/sbin/clamd
Daemon d’analyse en arrière-plan
freshclam
/usr/bin/freshclam
Outil de mise à jour de la base de données virale
clamdscan
/usr/bin/clamdscan
Client qui délègue à clamd
clamonacc
/usr/sbin/clamonacc
Scanner d’accès en temps réel
Étape 3 : Mettre à jour la base de données de signatures virales
La capacité de détection de ClamAV dépend entièrement de l’actualité de sa base de données de signatures. La base de données réside dans /var/lib/clamav/ et se compose de plusieurs fichiers : main.cvd, daily.cvd (ou .cld) et bytecode.cvd.
Arrêter le daemon avant la première mise à jour (Debian/Ubuntu)
Sur les systèmes Debian/Ubuntu, clamav-freshclam.service s’exécute automatiquement après l’installation et verrouille le répertoire de la base de données. Si vous tentez d’exécuter freshclam manuellement pendant que ce service est actif, vous rencontrerez un conflit de verrouillage. Arrêtez-le d’abord :
sudo systemctl stop clamav-freshclam
sudo freshclam
sudo systemctl start clamav-freshclam
Sur CentOS/RHEL/Rocky/Alma :
sudo freshclam
Sortie attendue lors d’une mise à jour réussie :
ClamAV update process started at ...
daily.cvd updated (version: 27xxx, sigs: xxxxxxx, ...)
main.cvd is up to date
bytecode.cvd is up to date
Configurer les mises à jour automatiques de la base de données
freshclam est contrôlé par /etc/clamav/freshclam.conf. Directives clés à examiner :
sudo nano /etc/clamav/freshclam.conf
Paramètres critiques :
Checks 24 — nombre de vérifications de mise à jour par jour (par défaut : 12 sur certaines distributions)
DatabaseMirror database.clamav.net — miroir officiel ; ne pas modifier sauf si vous utilisez un miroir privé
NotifyClamd /etc/clamav/clamd.conf — indique à freshclam d’envoyer un signal à clamd après une mise à jour afin que le daemon recharge les signatures sans redémarrer
Étape 4 : Configurer et démarrer le daemon ClamAV
Le daemon clamd maintient la base de données virale complète en RAM (généralement 500 MB–1,2 GB selon la version de la base de données). Cela élimine le coût de démarrage de plusieurs secondes de clamscan, le rendant indispensable pour tout environnement effectuant des analyses fréquentes ou simultanées.
Debian/Ubuntu
sudo systemctl start clamav-daemon
sudo systemctl enable clamav-daemon
sudo systemctl status clamav-daemon
CentOS/RHEL 7
Sur RHEL 7, l’unité de service est nommée clamd@scan, faisant référence au fichier de configuration /etc/clamd.d/scan.conf :
sudo systemctl start clamd@scan
sudo systemctl enable clamd@scan
Rocky Linux / AlmaLinux / RHEL 8+
sudo systemctl start clamd@scan
sudo systemctl enable clamd@scan
Paramètres clés de clamd.conf
La configuration du daemon se trouve dans /etc/clamav/clamd.conf (Debian/Ubuntu) ou /etc/clamd.d/scan.conf (famille RHEL). Examinez ces directives :
sudo nano /etc/clamav/clamd.conf
Paramètres importants :
LocalSocket /run/clamav/clamd.ctl — chemin du socket Unix utilisé par clamdscan ; assurez-vous qu’il correspond à votre configuration client
MaxFileSize 100M — taille maximale de fichier à analyser ; augmenter pour les serveurs de messagerie gérant des pièces jointes volumineuses
MaxScanSize 400M — données maximales analysées par fichier après décompression
StreamMaxLength 100M — pertinent pour l’analyse basée sur milter/flux
User clamav — le daemon s’exécute en tant qu’utilisateur clamav ; assurez-vous que cet utilisateur dispose d’un accès en lecture aux répertoires que vous souhaitez analyser
LogFile /var/log/clamav/clamd.log — activer la journalisation persistante pour les pistes d’audit
Piège critique : Si clamd s’exécute en tant qu’utilisateur clamav et que vous analysez /home/user/uploads/, l’utilisateur clamav doit disposer des permissions de lecture sur ce chemin. Oublier cela entraîne des échecs d’analyse silencieux — clamd signalera des erreurs « Accès refusé » dans son journal plutôt que de retourner un verdict sain/infecté.
Étape 5 : Exécuter des analyses avec clamscan et clamdscan
Analyse à la demande avec clamscan
clamscan est le scanner autonome. Il charge la base de données depuis le disque à chaque invocation, ce qui le rend plus lent mais indépendant du daemon.
Analyser un répertoire spécifique de manière récursive :
clamscan -r /path/to/directory
Analyser et afficher uniquement les fichiers infectés :
clamscan -r --infected /path/to/directory
Analyser avec une sortie détaillée et enregistrer les résultats :
sudo clamscan -r --infected --log=/var/log/clamav/manual_scan.log /var/www/html
Déplacer les fichiers infectés vers un répertoire de quarantaine :
sudo clamscan -r --move=/var/quarantine /path/to/directory
Supprimer automatiquement les fichiers infectés (à utiliser avec précaution en production) :
sudo clamscan -r --remove /path/to/directory
Analyser l’intégralité du système de fichiers (prévoir un temps d’exécution significatif sur les disques volumineux) :
sudo clamscan -r --infected --exclude-dir="^/sys" --exclude-dir="^/proc" --exclude-dir="^/dev" /
L’exclusion de /sys, /proc et /dev est obligatoire — l’analyse de ces pseudo-systèmes de fichiers produit de fausses erreurs et peut provoquer des blocages.
Analyse haute performance avec clamdscan
Lorsque clamd est en cours d’exécution, utilisez clamdscan plutôt que clamscan. Il soumet les demandes d’analyse au daemon déjà chargé via le socket Unix, le rendant plusieurs ordres de grandeur plus rapide pour les analyses répétées ou en masse.
clamdscan --fdpass /path/to/directory
L’indicateur --fdpass passe le descripteur de fichier directement à clamd, contournant les problèmes de permissions qui surviennent lorsque l’utilisateur du daemon ne peut pas lire directement le chemin cible.
Analyse multithread avec clamdscan :
clamdscan --multiscan --fdpass /var/www/html
--multiscan indique à clamd d’analyser les fichiers en parallèle en utilisant son pool de threads, réduisant considérablement le temps d’exécution sur les systèmes multicœurs.
clamscan vs. clamdscan : Comparaison des performances
Attribut
`clamscan`
`clamdscan`
Chargement de la base de données par analyse
Oui (démarrage lent)
Non (le daemon maintient la base en RAM)
Temps de démarrage typique
5–30 secondes
Moins d’1 seconde
Nécessite clamd en cours d’exécution
Non
Oui
Analyse parallèle
Non
Oui (--multiscan)
Meilleur cas d’utilisation
Analyses manuelles ponctuelles
Analyses automatisées, fréquentes ou en masse
Modèle de permissions
S’exécute en tant qu’utilisateur appelant
S’exécute en tant qu’utilisateur clamav (utiliser --fdpass)
Étape 6 : Automatiser les analyses avec Cron
Pour une protection continue, planifiez des analyses régulières à l’aide de cron. L’exemple suivant analyse la racine web quotidiennement à 02h00 et enregistre les résultats avec un horodatage.
sudo crontab -e
Ajoutez l’entrée suivante :
0 2 * * * /usr/bin/clamdscan --multiscan --fdpass --log=/var/log/clamav/daily_scan_$(date +%Y%m%d).log /var/www/html
Cron de niveau production avec alerte par e-mail en cas d’infection :
0 2 * * * /usr/bin/clamscan -r --infected /var/www/html 2>&1 | grep -v "^$" | mail -s "ClamAV Daily Scan Report - $(hostname)" admin@yourdomain.com
Cela redirige la sortie non vide directement vers un destinataire de messagerie, garantissant que vous ne recevez des alertes que lorsqu’un problème est détecté ou qu’une erreur survient. Assurez-vous que mailutils ou postfix est configuré sur le serveur.
Faites pivoter les journaux d’analyse pour éviter une croissance illimitée du disque :
sudo nano /etc/logrotate.d/clamav-scan
/var/log/clamav/daily_scan_*.log {
weekly
rotate 4
compress
missingok
notifempty
}
Étape 7 : Analyse en temps réel à l’accès avec clamonacc
clamonacc est le composant d’analyse à l’accès de ClamAV, introduit comme fonctionnalité stable dans ClamAV 0.102. Il s’intègre au sous-système fanotify du noyau Linux pour intercepter les événements d’ouverture et de fermeture de fichiers, analysant les fichiers avant qu’ils ne soient accédés.
Prérequis :
Noyau Linux 5.1 ou ultérieur (pour fanotify avec FAN_OPEN_EXEC_PERM)
ClamAV 0.102+
clamd doit être en cours d’exécution
Privilèges root
Activer l’analyse à l’accès dans clamd.conf
sudo nano /etc/clamav/clamd.conf
Ajoutez ou décommentez :
OnAccessIncludePath /home
OnAccessIncludePath /var/www/html
OnAccessPrevention yes
OnAccessExcludeUname clamav
OnAccessPrevention yes — bloque l’accès aux fichiers infectés en temps réel (mode blocage) ; définir sur no pour le mode détection uniquement
OnAccessExcludeUname clamav — empêche clamd lui-même de déclencher des boucles d’analyse récursives
Démarrer clamonacc
sudo clamonacc --log=/var/log/clamav/clamonacc.log --daemonize
Pour l’exécuter en tant que service systemd, créez un fichier d’unité :
sudo nano /etc/systemd/system/clamonacc.service
[Unit]
Description=ClamAV On-Access Scanner
Requires=clamav-daemon.service
After=clamav-daemon.service
[Service]
Type=simple
ExecStart=/usr/sbin/clamonacc --log=/var/log/clamav/clamonacc.log --foreground
Restart=on-failure
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now clamonacc
Piège connu : Sur les serveurs à haut débit (par exemple, les points de terminaison de téléchargement de fichiers très sollicités), OnAccessPrevention yes peut introduire une latence I/O mesurable. Évaluez votre charge de travail avant d’activer le mode prévention en production. Envisagez de limiter OnAccessIncludePath au chemin le plus étroit nécessaire plutôt qu’à des répertoires larges comme /.
Étape 8 : Intégrer ClamAV avec les serveurs de messagerie
Le cas d’utilisation en production le plus répandu de ClamAV est l’analyse des passerelles de messagerie. Si vous exploitez un serveur de messagerie sur votre infrastructure VPS Hosting ou Serveurs Dédiés, l’intégration de ClamAV avec votre MTA constitue une couche de sécurité critique.
Piles d’intégration courantes :
Postfix + amavisd-new + ClamAV — amavisd-new agit comme filtre de contenu entre Postfix et ClamAV, gérant également SpamAssassin
Postfix + clamsmtp — proxy léger de type milter
Exim + ClamAV — la directive native Exim av_scanner prend en charge clamd directement via socket
Exemple : intégration Exim clamd dans /etc/exim4/exim4.conf :
av_scanner = clamd:/run/clamav/clamd.ctl
Cette directive unique achemine tout le contenu des messages via l’instance clamd en cours d’exécution avant la livraison. Associez cela à une configuration appropriée d’Hébergement E-mail pour garantir que votre infrastructure de messagerie est entièrement protégée.
Résolution des problèmes courants de ClamAV
freshclam échoue avec « verrouillé par un autre processus »
sudo systemctl stop clamav-freshclam
sudo rm -f /var/lock/clamav/freshclam.lock
sudo freshclam
sudo systemctl start clamav-freshclam
clamd ne démarre pas : « ERROR: Can’t open/parse the config file »
Vérifiez le chemin et la syntaxe du fichier de configuration :
sudo clamd --config-file=/etc/clamav/clamd.conf --debug 2>&1 | head -50
Utilisation élevée de la mémoire
clamd consomme généralement 500 MB–1,2 GB de RAM avec la base de données complète chargée. Sur les systèmes à mémoire limitée, envisagez :
De définir MaxThreads 2 dans clamd.conf pour limiter la concurrence
D’utiliser clamscan sans le daemon pour les analyses peu fréquentes
De passer à un plan avec suffisamment de RAM — un plan VPS Hosting avec au moins 2 GB de RAM est le minimum pratique pour exécuter clamd aux côtés d’une pile web
L’analyse retourne « Accès refusé » pour les fichiers
Le daemon clamd s’exécute en tant qu’utilisateur clamav. Accordez l’accès en lecture :
sudo setfacl -R -m u:clamav:rX /path/to/scan
Ou utilisez clamdscan --fdpass pour passer les descripteurs de fichiers depuis le contexte de l’utilisateur appelant.
Faux positifs
ClamAV signale occasionnellement des fichiers légitimes, en particulier des archives compressées ou certains frameworks PHP. Pour mettre en liste blanche un fichier connu comme sûr par son hash :
sigtool --md5 /path/to/legitimate/file >> /var/lib/clamav/whitelist.fp
Redémarrez clamd après avoir modifié les fichiers .fp.
ClamAV sur hébergement mutualisé vs. VPS vs. Serveur dédié
Le modèle de déploiement affecte considérablement la façon dont ClamAV doit être configuré :
Environnement
Mode recommandé
Notes
Hébergement Web Mutualisé
clamscan à la demande via cron
Pas d’accès root ; mode daemon indisponible
VPS (2–4 GB RAM)
Daemon clamd + cron clamdscan
Équilibrer les performances avec les contraintes de mémoire
Serveur dédié
clamd + clamonacc + intégration messagerie
Ensemble complet de fonctionnalités ; aucun compromis sur les ressources
Nœud GPU/haute performance
Daemon clamd uniquement
Éviter la surcharge I/O de clamonacc sur les pipelines de données
Pour les environnements nécessitant un débit maximal et un contrôle total sur les outils de sécurité, les Serveurs Dédiés offrent la capacité matérielle nécessaire pour exécuter clamd, clamonacc et l’analyse des e-mails simultanément sans contention de ressources.
Matrice de décision technique et points clés à retenir
Avant de déployer ClamAV, validez chacun des points suivants :
Version du noyau — exécutez uname -r ; confirmez 5.1+ si clamonacc est requis
RAM disponible — clamd nécessite 1–1,5 GB ; planifiez en conséquence avant d’activer le daemon
Automatisation de freshclam — confirmez que clamav-freshclam.service est activé et que NotifyClamd est défini dans freshclam.confclamav peut lire toutes les cibles d’analyse ; utilisez --fdpass avec clamdscan là où les ACL sont impraticables/proc, /sys, /dev des analyses récursiveslogrotate pour tous les fichiers journaux ClamAV avant d’activer les tâches cron quotidiennesOnAccessPrevention — testez en mode détection uniquement (no) avant de passer en mode blocage (yes) sur les systèmes en productionamavisd-new ou la directive MTA native av_scanner, et pas seulement des analyses de fichiers périodiques/var/quarantine avec la propriété appropriée avant d’utiliser --move ; clamscan ne le créera pas automatiquement.fp et examinez les journaux d’analyse après chaque mise à jour de la base de données pour détecter les régressionsFoire aux questions
ClamAV fournit-il une protection en temps réel sur Linux par défaut ?
Non. Après l’installation, ClamAV fonctionne uniquement en mode à la demande. La protection en temps réel nécessite d’activer explicitement clamonacc avec les directives OnAccessIncludePath et OnAccessPrevention dans clamd.conf, ainsi qu’un noyau prenant en charge fanotify (5.1+).
Quelle est la différence entre clamscan et clamdscan ?
clamscan est un binaire autonome qui charge la base de données virale depuis le disque à chaque invocation, entraînant un délai de démarrage de 5 à 30 secondes. clamdscan est un client léger qui soumet des tâches d’analyse au daemon clamd déjà en cours d’exécution, qui maintient la base de données en RAM — le rendant nettement plus rapide pour les analyses répétées ou automatisées.
De combien de RAM le daemon de ClamAV a-t-il besoin ?
clamd avec la base de données complète actuelle (principale + quotidienne + bytecode) nécessite généralement entre 700 MB et 1,2 GB de mémoire résidente. Sur les systèmes disposant de moins de 2 GB de RAM totale, l’exécution du daemon aux côtés d’un serveur web ou d’une base de données peut provoquer une pression mémoire. Utilisez clamscan sans le daemon sur les instances à mémoire limitée.
ClamAV peut-il analyser les archives compressées et les pièces jointes des e-mails ?
Oui. ClamAV décompresse et analyse nativement les formats ZIP, RAR, 7z, TAR, GZIP, BZIP2, CAB et de nombreux autres formats d’archives, ainsi que les documents OLE2 (Microsoft Office), les fichiers PDF et les exécutables ELF/PE. Les directives MaxScanSize et MaxFileSize dans clamd.conf contrôlent la profondeur et les limites de taille pour l’analyse des archives.
Pourquoi freshclam signale-t-il « verrouillé par un autre processus » immédiatement après l’installation ?
Sur Debian/Ubuntu, le service systemd clamav-freshclam démarre automatiquement après l’installation du paquet et maintient un verrou exclusif sur le répertoire de la base de données. L’exécution manuelle de freshclam pendant que ce service est actif provoque un conflit de verrouillage. Arrêtez le service avec sudo systemctl stop clamav-freshclam, effectuez la mise à jour manuelle, puis redémarrez le service.
