Aller au contenu

Mises à jour des données de sécurité en air-gap (ClamAV, Grype, EPSS, CISA KEV)

repod n'a besoin d'aucune connexion internet pour son fonctionnement de base — auto-hébergé, l'upload manuel fonctionne entièrement hors-ligne. L'accès internet n'est utilisé que par une poignée de fonctionnalités optionnelles, dont la plus importante est de garder à jour le pipeline de scan CVE. Quatre sources de données se rafraîchissent depuis internet :

Source Ce que c'est Rafraîchie par Chemin local (par défaut)
Signatures ClamAV Base de signatures antivirus freshclam /var/lib/clamav
Base de vulnérabilités Grype Base de correspondance CVE (grype db update, cron security_sync_daily) grype db update /repos/grype-db
Scores EPSS Exploit Prediction Scoring System (FIRST.org) services/cve_enrichment.py /repos/security/epss_cache.json
CISA KEV Catalogue des vulnérabilités connues exploitées services/cve_enrichment.py /repos/security/kev_cache.json

Si votre instance repod n'a aucun accès internet, aucune de ces 4 sources ne peut s'auto-rafraîchir. Ce guide couvre le flux pris en charge : un hôte relais (n'importe quelle machine avec accès internet) récupère les données fraîches, vous les transférez hors-ligne (USB, disque, ou tout ce qu'autorise votre politique de sécurité), et vous les importez sur l'instance air-gap. Le même schéma déjà utilisé pour le cache amont, appliqué ici au pipeline de sécurité plutôt qu'au contenu des paquets.


1. Récupérer sur l'hôte relais

L'hôte relais a besoin de Docker et d'un checkout de ce dépôt — il n'a pas besoin d'être une installation repod complète, et il n'a pas besoin d'accès internet vers le site air-gap, seulement vers le monde extérieur.

git clone <your-repod-repo> && cd repod
bash scripts/security-data-transfer.sh fetch ./security-data-2026-08.tar.gz

Ceci exécute freshclam, grype db update, et le propre services/cve_enrichment.py de repod (rafraîchissement EPSS + KEV), chacun dans un conteneur éphémère de l'image backend repod elle-même — pas une réimplémentation artisanale. Ce point compte : il garantit que les fichiers exportés sont, à l'octet près, ce qu'une instance repod normalement connectée aurait produit (mêmes versions d'outils, même format de fichier de cache), donc aucune dérive de format à craindre à l'import.

Si une image backend a déjà été construite localement (docker compose build backend), le script la réutilise. Sinon il en construit une depuis ./backend — cela peut prendre plusieurs minutes (la compilation Nuitka fait partie du build backend normal), ce qui est attendu la première fois.

Un échec partiel (par ex. l'amont de Grype brièvement injoignable) n'interrompt pas toute la récupération — chacune des 3 étapes est indépendante, et le script avertit puis continue, en empaquetant tout ce qui a réussi. Vérifiez la sortie console avant le transfert si vous avez besoin que les 4 sources soient à jour.


2. Transférer

Déplacez security-data-2026-08.tar.gz vers le site air-gap via tout support hors-ligne autorisé par votre politique de sécurité (clé USB, disque à écriture unique, etc.) — la même étape de remise que dans le guide du cache amont.


3. Importer sur l'instance air-gap

Depuis le checkout repod sur l'hôte air-gap :

bash scripts/security-data-transfer.sh import ./security-data-2026-08.tar.gz

Ceci extrait l'archive directement dans les mêmes répertoires hôtes que docker-compose.yaml monte déjà dans le conteneur backend (./repos/clamav-db, ./repos/grype-db, ./repos/security) — aucune manipulation manuelle de chemin nécessaire sur un déploiement standard. Surchargez d'abord les variables d'environnement CLAMAV_HOST_DIR/GRYPE_HOST_DIR/SECURITY_HOST_DIR si votre déploiement les mappe ailleurs.

ClamAV a besoin d'un redémarrage pour prendre en compte les nouvelles signaturesclamd les charge en mémoire une seule fois au démarrage du conteneur :

docker compose restart backend

Grype et EPSS/KEV sont relus depuis le disque à chaque scan/requête — aucun redémarrage n'est nécessaire pour ceux-là.


4. Maintenir à jour

Répétez les étapes 1 à 3 périodiquement (par ex. chaque semaine pour ClamAV/Grype, qui changent souvent ; EPSS/KEV peuvent attendre plus longtemps entre deux rafraîchissements) sur le relais, transférez, puis importez. Il n'existe pas de mode delta/incrémental — chaque exécution récupère à nouveau l'état complet actuel des 4 sources, ce que freshclam/grype db update font déjà de façon incrémentale contre leur propre amont de toute façon ; l'archive elle-même est toujours un instantané complet, jamais un diff.


Ce que ce guide ne couvre pas

Ce guide traite spécifiquement des 4 sources de données du pipeline CVE ci-dessus. Pour l'air-gap du contenu des paquets lui-même (mirroring de dépôt APT/RPM/APK), voir le guide du cache amont à la place — les deux sont indépendants et généralement utilisés ensemble sur un déploiement entièrement air-gap.