ClamAV (clamav)
Moteur antivirus (clamd) de la chaîne de sécurité des fichiers, avec des mises à jour de signatures depuis le miroir interne seulement et une passerelle HTTPS authentifiée devant clamd.
Généré depuis catalog/services/clamav.yaml : ne pas modifier à la main.
Résumé
| Version | 1.4.6 |
| Usage | installer et configurer |
| Couche | fonctionnelle (catalogue IA) |
| Catégorie | Sécurité et politiques |
| Méthodes d'installation | podman |
| Connexion externe | non |
| Réservé au bac à sable | non |
Licence
| Identifiant SPDX | GPL-2.0-only |
| Politique de licence | exception de licence |
| Exception de licence | LEX-022 (en attente de la décision du client) |
| Composant de la plateforme | clamav |
Paquets et artefacts
Un paquet que publie le projet du service (son image, son archive binaire, son paquet Python ou système) porte la licence du service ; un paquet tiers porte la licence écrite sur sa ligne, lue dans les métadonnées officielles du projet amont.
| Type | Paquet | Version | Licence | Détails |
|---|---|---|---|---|
| image de conteneur | docker.io/clamav/clamav | 1.4.6 | GPL-2.0-only | clé d'image clamav, utilisée par freshclam, clamd, condensé sha256:8ad6197396974726c35d017e50aaaaf4b91745726a04faec8480c203edd98052 |
| image de conteneur | docker.io/library/python | 3.12.12-alpine3.22 | PSF-2.0 | clé d'image gateway, utilisée par gateway, condensé sha256:848ba4413eb897e225159b8fc1b02094576cbae4aa73fc13142608ae2c8c0e32 |
Les images sont épinglées par étiquette dans le descripteur, et par condensé (digest) quand le descripteur en déclare un (le bundle hors ligne refuse alors une image téléchargée qui ne le porte pas) ; le condensé est enregistré dans le miroir du Manager à l'import du bundle hors ligne, et chaque téléchargement ou chargement est vérifié par rapport à lui.
Systèmes et architectures pris en charge
| Méthode | Systèmes d'exploitation | Architectures |
|---|---|---|
podman | famille RHEL (dnf), famille Debian (apt), Arch Linux (pacman) | x86_64, aarch64 (non restreintes par le descripteur) |
Systèmes hôtes certifiés : RHEL 8/9/10, Rocky Linux 8/9/10, AlmaLinux 8/9/10, Oracle Linux 8/9, CentOS Stream 9/10, Ubuntu 22.04/24.04, Debian 12, Arch Linux (rolling). Le contrôle préalable des hôtes accepte ces systèmes (une autre version d'une famille connue donne un avertissement, une version en fin de vie est refusée) et les architectures x86_64 et aarch64.
Prérequis
Hôte
- au moins 3072 Mo de mémoire (bloquant,
memory). - au moins 2048 Mo libres pour
/var/lib/navin(avertissement,disk).
Programmes que les commandes et les contrôles du service lancent sur l'hôte, hors des racines gérées : les ajouter à allowed_commands de l'agent (voir Sécurité de l'agent Navin), sinon l'agent les refuse avec command_not_allowed : /usr/bin/podman.
Réseau et ports
| Composant | Nom du port | Port | Ouvert dans le pare-feu de l'hôte |
|---|---|---|---|
clamd | clamd | 3310/tcp | non |
gateway | api | 3311/tcp | oui |
Services et connexions nécessaires
Ce service n'a aucune dépendance.
Méthodes et modes d'installation
| Méthode | Défaut | Ce que la méthode utilise |
|---|---|---|
podman | oui | les images de conteneur du descripteur, exécutées par Podman sous systemd |
Composants
| Composant | Type | Méthodes d'installation | Ports |
|---|---|---|---|
Mise à jour des signatures (freshclam) | travailleur | podman | - |
Démon clamd (clamd) | maître | podman | 3310/tcp |
Passerelle d'analyse (gateway) | maître | podman | 3311/tcp |
clamdne tourne que sur un hôte qui porte aussifreshclam.gatewayne tourne que sur un hôte qui porte aussiclamd.
Analyseur unique (standalone) (par défaut)
Un hôte d'analyse (clamd, freshclam et la passerelle).
Ce que le mode déploie :
| Composant | Placement |
|---|---|
freshclam | min 1, max 1 |
clamd | min 1, max 1 |
gateway | min 1, max 1 |
Répliqué (replicated)
Deux hôtes d'analyse indépendants ou plus ; la plateforme bascule entre toutes les passerelles.
Ce que le mode déploie :
| Composant | Placement |
|---|---|
freshclam | min 2, recommandé 2 |
clamd | min 2, recommandé 2 |
gateway | min 2, recommandé 2 |
Installer ce service
L'assistant d'installation du Navin Manager planifie, valide et exécute l'installation ; il faut la permission services:install sur le cluster.
-
Ouvrez l'assistant. Dans Clusters, choisissez l'action de ligne Installer des services du cluster cible. L'assistant s'ouvre sur sa première étape, Service.
-
Choisissez le service. À l'étape Service, sélectionnez ClamAV. La carte affiche la licence
GPL-2.0-only. -
Choisissez les hôtes et le mode. À l'étape Hôtes, cochez les hôtes, puis choisissez le Mode :
standalone(par défaut),replicated. Chaque mode déploie les composants listés dans Méthodes et modes d'installation. Avec plusieurs composants, placez chacun sur ses hôtes dans Répartition des composants (Proposer un placement propose un placement qui respecte les cardinalités). -
Liaisons. Ce service n'a aucune dépendance : l'étape Liaisons n'a rien à lier.
-
Configurez. À l'étape Configuration, relisez les paramètres (voir Paramètres de configuration) ; les paramètres obligatoires sont
mirror_url. Les mots de passe laissés vides avec une valeur générée par défaut sont générés et scellés par le Manager. -
Relisez et installez. À l'étape Installation, le Manager valide le plan et affiche l'ordre d'installation ; quand il indique « Le plan est valide. Prêt pour l'installation. », choisissez Installer. Un mode hautement disponible n'est installé que si ses contrôles HA réussissent.
-
Vérifiez. L'opération se termine quand les contrôles de santé de chaque instance réussissent (voir Contrôles de santé) ; le service apparaît alors en marche dans Services. Ouvrez le service et choisissez Lancer le test fonctionnel dans la carte Contrôles : Envoie le fichier de test EICAR à travers la passerelle (doit être FOUND), puis un fichier propre (doit être OK).
Haute disponibilité
| Cluster | réplicas (replication) |
| Haute disponibilité | externe (external) |
| Bascule | côté client (client) |
| Réplication | aucun (none) |
| Quorum | aucun (none) |
| Découverte | statique (static) |
| Point d'entrée | découverte par le client (client-discovery) |
| Documentation officielle | https://docs.clamav.net/ |
| Références | https://docs.clamav.net/manual/Usage/Scanning.html, https://docs.clamav.net/manual/Usage/Configuration.html, https://docs.clamav.net/appendix/CvdPrivateMirror.html |
| Paramètre TLS entre pairs | tls_enabled |
| Authentification entre pairs | Les clients s'authentifient auprès de chaque passerelle avec la clé porteuse ; clamd n'a aucun pair réseau. |
Topologie par mode
| Modes | Niveau le plus haut du catalogue | Répartition | Composant du quorum | Domaines de panne | Description |
|---|---|---|---|---|---|
standalone | autonome (standalone) | unique (single) | - | 1 | Un hôte d'analyse, sans tolérance aux pannes (les dépôts sont refusés en mode enforce tant qu'il est arrêté). |
replicated | ha (ha) | actif-actif (active-active) | - | 2 | Deux hôtes d'analyse indépendants ou plus, chacun avec clamd, freshclam et sa passerelle ; la plateforme reçoit toutes les passerelles et bascule sur la suivante. |
Remarques
- Chaque hôte charge toute la base de signatures en mémoire (environ 3 Go pendant un rechargement) : prévoir la mémoire de chaque hôte d'analyse.
- Chaque hôte se met à jour seul depuis le miroir interne : le miroir doit rester joignable, les dernières bases continuent de servir en attendant et un import hors ligne reste toujours possible.
Paramètres de configuration
Réseau
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Port de la passerelle (gateway_port) | port | 3311 | - | non | non | oui | Port HTTPS de la passerelle d'analyse (/v1/scan, /readyz, /metrics), seule entrée réseau de l'hôte d'analyse. |
Port local de clamd (clamd_port) | port | 3310 | - | non | non | oui | Port TCP de clamd, utilisé par la passerelle du même hôte seulement : sur 127.0.0.1, ou dans le conteneur Podman isolé un port jamais publié sur l'hôte et joint par le seul conteneur de la passerelle (jamais ouvert dans le pare-feu). (avancé) |
Sécurité
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
TLS (tls_enabled) | bool | true | - | non | non | oui | Servir la passerelle en HTTPS avec un certificat de l'autorité de la console (obligatoire en production). |
Clé d'API (api_key) | password | généré | - | non | oui | non | Clé porteuse des clients de la passerelle (EAI_CLAMAV_API_KEY de la plateforme). |
Signatures
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Miroir interne des signatures (mirror_url) | url | - | ^https:// | oui | non | non | Adresse HTTPS du miroir ClamAV interne qui sert main, daily et bytecode (PrivateMirror de freshclam). Aucun serveur public de mise à jour n'est jamais utilisé. |
Vérifications par jour (checks_per_day) | int | 12 | min 1, max 50 | non | non | non | Nombre de vérifications du miroir interne par freshclam et par jour. |
Limites d'analyse
| Paramètre | Type | Défaut | Valeurs permises | Obligatoire | Secret | Redémarrage | Description |
|---|---|---|---|---|---|---|---|
Plus gros fichier (stream_max_length_mb) | int | 100 | min 1, max 4000, MB | non | non | non | StreamMaxLength de clamd et limite du corps de la passerelle (413 au-delà) ; au moins la limite de la plateforme EAI_FILE_SCAN_MAX_BYTES. |
Données analysées au maximum (max_scan_size_mb) | int | 400 | min 1, max 4000, MB | non | non | non | MaxScanSize : données analysées par fichier, archives comprises (au-delà Heuristics.Limits.Exceeded est signalé). |
Fichier interne maximal (max_file_size_mb) | int | 100 | min 1, max 4000, MB | non | non | non | MaxFileSize : plus gros fichier analysé, membres d'archives compris. |
Profondeur d'archives (max_recursion) | int | 16 | min 1, max 64 | non | non | non | MaxRecursion : imbrication des archives et des objets intégrés. |
Fichiers par archive (max_files) | int | 10000 | min 1, max 1000000 | non | non | non | MaxFiles : fichiers analysés dans une archive. |
Délai d'analyse (scan_timeout_s) | int | 120 | min 5, max 900, s | non | non | non | Analyse la plus longue d'un fichier (MaxScanTime et ReadTimeout de clamd, délai de la passerelle vers clamd). |
Processus d'analyse (max_threads) | int | 8 | min 1, max 64 | non | non | non | MaxThreads de clamd : analyses simultanées sur l'hôte. (recommandé clamp(host.cpu_count, 2, 16)) |
Points d'accès
| Point d'accès | Schéma | Composant | Port | Chemin | Paramètre TLS | Paramètres de liaison | Secrets de liaison | Commande de provisionnement |
|---|---|---|---|---|---|---|---|---|
api | http | gateway | 3311 (gateway_port) | - | tls_enabled | max_file_size, max_scan_size, max_files, max_recursion, stream_max_length | api_key | - |
Commandes
| Commande | Composant | Cible | Description |
|---|---|---|---|
État des signatures (signature_status) | freshclam | tous les hôtes | Version du moteur et chaque base de signatures de chaque hôte d'analyse, avec sa signature numérique vérifiée par sigtool. |
Mettre à jour les signatures (update_signatures) | freshclam | tous les hôtes | Lance freshclam maintenant vers le miroir interne sur chaque hôte d'analyse ; clamd recharge les nouvelles bases. |
Importer des signatures hors ligne (import_signatures) | freshclam | tous les hôtes | Installe les bases .cvd et .cld d'un répertoire de l'hôte : chacune est d'abord vérifiée par sigtool, puis installée de façon atomique et clamd recharge localement. Rien n'est installé quand une base échoue. |
Journaux de clamd (logs) | clamd | hôte choisi | Dernières lignes du journal de clamd. |
Paramètres des commandes
| Commande | Paramètre | Type | Défaut | Obligatoire | Description |
|---|---|---|---|---|---|
import_signatures | Répertoire (directory) | path | - | oui | Répertoire absolu de l'hôte qui contient main, daily et bytecode (.cvd ou .cld). |
Contrôles de santé
Vivacité (par instance)
| Composant | Contrôle | Détails |
|---|---|---|
freshclam | {{ paths.etc }}/signatures.sh has-db | 90 tentatives ; intervalle 10 s ; délai 10 s |
clamd | /usr/bin/podman exec navin-{{ service.name }}-clamd clamdscan --config-file=/etc/navin-clamav/clamd.conf --ping=1 | 60 tentatives ; intervalle 5 s ; délai 10 s |
gateway | HTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.ip or '127.0.0.1' }}:{{ config.gateway_port }}/healthz | Attendu 200 ; 30 tentatives ; intervalle 2 s ; délai 5 s |
Disponibilité (contrôle du service)
| Contrôle | Détails |
|---|---|
HTTP {{ 'https' if config.tls_enabled else 'http' }}://{{ host.ip or '127.0.0.1' }}:{{ config.gateway_port }}/readyz | Attendu 200 ; Attendu "status": "ready" ; 10 tentatives ; intervalle 5 s ; délai 10 s |
Test fonctionnel
Envoie le fichier de test EICAR à travers la passerelle (doit être FOUND), puis un fichier propre (doit être OK). (gateway: eicar_found, clean_ok)
Contrôles préalables
| Contrôle | Type | Signification | Sévérité | Composants |
|---|---|---|---|---|
memory | memory_mb {"min": 3072} | au moins 3072 Mo de mémoire | bloquant | clamd |
disk | disk_free_mb {"path": "/var/lib/navin", "min": 2048} | au moins 2048 Mo libres pour /var/lib/navin | avertissement | freshclam |
gateway_port_free | port_free {"param": "gateway_port"} | port 3311 libre sur l'hôte | bloquant | gateway |
clamd_port_free | port_free {"param": "clamd_port"} | port 3310 libre sur l'hôte | bloquant | clamd |
Désinstallation
Chemins supprimés quand les données sont purgées : {{ paths.data }}, {{ paths.log }}.
Liens rapides
- Métriques de la passerelle :
{{ 'https' if config.tls_enabled else 'http' }}://{{ host.fqdn }}:{{ config.gateway_port }}/metrics
Documentation amont
- Site : https://www.clamav.net
- Sources : https://github.com/Cisco-Talos/clamav
- Haute disponibilité : https://docs.clamav.net/
- Haute disponibilité : https://docs.clamav.net/manual/Usage/Scanning.html
- Haute disponibilité : https://docs.clamav.net/manual/Usage/Configuration.html
- Haute disponibilité : https://docs.clamav.net/appendix/CvdPrivateMirror.html