Avancé 11 minHardening

Air-gapper sa machine d'inférence

Réponse directe

Air-gapper une machine d'inférence, c'est la priver de toute liaison réseau (câble, Wi-Fi, Bluetooth) et n'y faire entrer modèles et mises à jour que par un support physique contrôlé. Un pare-feu sortant est une couche utile, pas un air-gap : ce n'est qu'une configuration logicielle. Les points faibles réels sont les logiciels qui appellent dehors (Ollama Cloud, mises à jour, téléchargements) et la clé USB.

Le mot « local » ne suffit pas pour certains contextes sensibles : une machine locale reste connectée, et ses logiciels peuvent contacter l'extérieur. Ce guide distingue l'air-gap véritable de l'isolement par pare-feu, dresse la liste des composants d'une pile LLM qui appellent dehors par défaut et de la manière de les couper, décrit un transfert de modèles par clé USB vérifié par empreintes, et propose des tests d'étanchéité que vous pouvez rejouer.

Par Mohamed Meguedmi·Màj 2026-09-30·Testé sur Windows, macOS, Linux

#Quand un air-gap se justifie, et quand il coûte trop cher

Un air-gap se décide par une analyse de risques, pas par principe. Les cas où il se justifie : données classifiées ou couvertes par un secret industriel de haut niveau, exigences contractuelles ou sectorielles qui imposent explicitement un réseau isolé, environnements qui pratiquent déjà l'isolement et dans lesquels le LLM doit s'intégrer, et postes dédiés à des dossiers d'une sensibilité exceptionnelle (un avocat, un chercheur). Pour les données personnelles ordinaires, y compris de santé ou financières, les textes demandent des mesures proportionnées au risque plutôt qu'un isolement total : un LLM local sur un poste chiffré, sans compte cloud, répond déjà à la plupart des besoins. Le guide sur l'IA locale en entreprise et la checklist de confidentialité couvrent ce niveau intermédiaire.

!
Le vrai coût
Chaque mise à jour, chaque modèle, chaque document passe par un support physique et un protocole. Une machine air-gappée qui n'est jamais mise à jour accumule des failles ; une machine dont le protocole est trop lourd finit contournée par ses utilisateurs. Prévoyez qui fait les transferts, à quelle fréquence, et comment on vérifie.

Avant de vous lancer, posez trois questions. Qui fera les transferts, et selon quelle fréquence ? Quels composants la pile exige-t-elle qu'on mette à jour (Ollama, llama.cpp, l'interface, les modèles) ? Et que se passe-t-il le jour où un modèle plus récent devient indispensable : le processus doit rester praticable sans exception, car une exception faite une fois devient la règle. Si vous ne pouvez pas répondre à ces trois questions, commencez par un poste hors ligne par usage avec pare-feu strict, et montez d'un niveau seulement quand le risque le justifie.

#Air-gap, quasi air-gap et pare-feu : ne pas les confondre

Le kit IA Locale en Entreprise

Déployer une IA locale au travail : RGPD, AI Act, architecture multi-utilisateurs, coûts, note pour la direction.

  • Espace en ligne à vie
  • PDF + fichiers
  • Mises à jour à vie
Trois niveaux d'isolement
NiveauCe que c'estCe qui reste possible
Machine hors ligne par usagePas de connexion active, mais la carte réseau existeUne reconnexion par erreur ou par un logiciel ; tout dépend de la discipline
Pare-feu strict (refus par défaut, sortant compris)Configuration logicielle qui bloque le trafic sortantUne règle ajoutée « pour essayer », une faille du système, un service qui contourne
Air-gap physiqueAucune interface réseau active : câble absent, Wi-Fi et Bluetooth coupés au firmware ou retirésLes fuites par support amovible ; les canaux physiques (hors périmètre de ce guide)

Ce guide couvre les trois : le pare-feu est la couche minimale que tout poste sensible devrait avoir, et l'air-gap physique la couche supérieure. Sur un Mac, les réglages propres à macOS relèvent du guide sur l'optimisation des Mac à puce Apple ; sous Windows, les principes sont les mêmes mais le contrôle des composants qui appellent dehors est moins fin qu'avec un Linux minimal, d'où la préférence donnée ici à Linux.

#Préparer la machine

Système minimal
Debian ou Ubuntu Server sans interface graphique pour un serveur d'inférence. Pas de navigateur, pas de gestionnaire de paquets connecté à un magasin d'applications.
Services de mise à jour automatique
Désactivez les minuteurs de mise à jour, par exemple sudo systemctl disable --now apt-daily.timer apt-daily-upgrade.timer, pour qu'aucune tentative de connexion ne parte en silence.
Comptes
Un compte dédié à l'usage du LLM, sudo restreint à l'administrateur.
Radios et interfaces
Wi-Fi et Bluetooth désactivés au BIOS ou au firmware, mieux : physiquement absents. Pas de câble réseau branché.
Pas de double démarrage
Une partition connectée à côté crée des voies indirectes (fichier d'échange, fichiers partagés).
Heure
Réglez l'horloge à la main ou depuis une source interne : une synchronisation avec un serveur de temps public est un trafic sortant.
Disque chiffré
Un poste isolé se vole ou se saisit : chiffrez le disque (voir le guide dédié).

#Les logiciels de la pile LLM qui appellent dehors par défaut

Pour une machine physiquement isolée, ces appels échouent sans dommage ; pour une machine en simple pare-feu, ou en attente de déconnexion, ils sont le vrai risque. Une pile locale type contient plusieurs composants qui contactent Internet si on ne les en empêche pas. Voici ceux que la documentation officielle permet de couper.

Composants qui contactent l'extérieur et leur interrupteur
ComposantCe qu'il peut faireRéglage documenté
OllamaModèles et recherche web hébergés (Ollama Cloud)OLLAMA_NO_CLOUD=1 ou disable_ollama_cloud dans ~/.ollama/server.json ; les journaux affichent alors « Ollama cloud disabled: true »
Ollama (exposition réseau)Serveur HTTP localÉcoute sur 127.0.0.1 par défaut ; ne changez OLLAMA_HOST que pour un réseau interne isolé
Open WebUIVérifications de mise à jour, téléchargement de modèles d'embeddings depuis Hugging FaceOFFLINE_MODE=true (désactive aussi ENABLE_VERSION_UPDATE_CHECK) ; téléchargez les modèles d'embeddings avant
Bibliothèques Hugging Face (transformers, sentence-transformers)Appels au Hub pour vérifier ou téléchargerHF_HUB_OFFLINE=1 : aucun appel HTTP au Hub, seuls les fichiers en cache sont utilisés
Bases vectoriellesTélémétrie éventuelleWeaviate : DISABLE_TELEMETRY=true ; vérifiez l'option équivalente pour chaque composant

La documentation d'Ollama précise que, lorsqu'on utilise Ollama en local, l'éditeur ne voit ni les requêtes ni les données ; désactiver les fonctions cloud fait perdre l'accès aux modèles hébergés et à la recherche web, ce qui est exactement le but. Attention à Open WebUI : la documentation avertit que, si vous n'avez pas téléchargé un modèle d'embeddings avant d'activer OFFLINE_MODE, les fonctions de RAG, de recherche web et d'analyse de documents peuvent ne pas fonctionner. Téléchargez tout ce dont la machine aura besoin avant de la couper.

→
Outils, agents et recherche web
Un LLM local relié à des outils (recherche web, lecteurs d'URL, serveurs MCP distants) peut lui-même émettre des requêtes vers l'extérieur. Sur une machine isolée, désactivez ou n'installez pas ces outils : ce n'est pas le modèle qui sort, c'est l'outil qu'on lui donne.

#Pare-feu strict : refuser par défaut, entrée comme sortie

Le pare-feu est la seconde ligne, derrière la déconnexion physique, et la seule protection sur un poste qui reste sur un réseau interne. Le principe est le refus par défaut dans les deux sens, avec quelques autorisations explicites vers le réseau interne isolé. Écrivez les règles d'autorisation avant d'activer le pare-feu, faute de quoi vous vous coupez vous-même d'une session SSH.

ufw : refus par défaut, réseau interne autorisé
sudo ufw default deny incoming
sudo ufw default deny outgoing

# Réseau interne isolé (exemple), y compris l'administration SSH depuis un poste connu
sudo ufw allow in from 192.168.50.0/24 to any port 22 proto tcp
sudo ufw allow out to 192.168.50.0/24

sudo ufw enable
sudo ufw status verbose

Le trafic sur l'interface locale (loopback) est nécessaire au fonctionnement d'Ollama et d'Open WebUI qui se parlent sur 127.0.0.1 ; vérifiez avec ufw status verbose que votre configuration ne le bloque pas. Si la machine est sur un LAN interne, doublez la protection côté routeur : un VLAN sans route vers Internet.

#Vérifier ce qu'écoute Ollama

Ports en écoute
sudo ss -tlnp | grep ollama
# attendu : 127.0.0.1:11434 et non 0.0.0.0:11434
# si 0.0.0.0 : régler OLLAMA_HOST=127.0.0.1:11434

#Transférer les modèles et les mises à jour par clé USB

Une machine isolée reçoit des modèles (de quelques Go à plusieurs dizaines), des mises à jour (Ollama, llama.cpp, Open WebUI), parfois des documents. Le point critique est la clé USB : c'est la seule porte, donc la seule voie d'entrée d'un logiciel malveillant. Utilisez toujours la même clé, dédiée, formatée régulièrement, et jamais une clé qui a servi ailleurs.

  1. 01
    Télécharger sur une machine connectée
    Récupérez le fichier GGUF du modèle depuis Hugging Face ou le binaire de mise à jour depuis le site officiel. Notez l'empreinte SHA-256 affichée par la source quand elle existe.
  2. 02
    Calculer l'empreinte et analyser
    Exécutez sha256sum sur le fichier, puis passez-le à un antivirus (par exemple ClamAV) sur cette machine de transit, qui n'est pas la machine isolée.
  3. 03
    Copier sur la clé
    Copiez le fichier et un fichier texte contenant son empreinte.
  4. 04
    Vérifier côté isolé avant usage
    Sur la machine isolée, recalculez l'empreinte : elle doit être identique. Une différence signifie un fichier modifié ou corrompu : ne l'utilisez pas.
  5. 05
    Importer dans Ollama
    Créez un Modelfile avec FROM /chemin/vers/modele.gguf puis ollama create nom-du-modele -f Modelfile. Ollama ne quantifie pas un GGUF à l'import : le fichier doit déjà avoir la quantification voulue.
Empreinte et import du modèle
# machine de transit
sha256sum modele-q4_k_m.gguf > modele.sha256

# machine isolée
sha256sum -c modele.sha256
printf 'FROM ./modele-q4_k_m.gguf\n' > Modelfile
ollama create mon-modele -f Modelfile
ollama run mon-modele

La méthode alternative consiste à copier tout le dossier des modèles d'une machine connectée (blobs et manifestes) vers la machine isolée. Elle fonctionne, mais le dossier n'est pas au même endroit selon l'installation : la FAQ d'Ollama donne ~/.ollama/models sous macOS, /usr/share/ollama/.ollama/models sous Linux avec l'installateur standard, et C:\Users\%username%\.ollama\models sous Windows. Le passage par un fichier GGUF isolé est plus simple à vérifier, car il n'y a qu'une empreinte à comparer. Le guide sur l'import GGUF détaille le Modelfile.

#Durcir le port USB

Une clé peut se faire passer pour un clavier ou un autre périphérique. Sur Linux, USBGuard se présente en une phrase comme un outil de liste blanche de périphériques USB : il définit quels types d'appareils sont autorisés et comment ils peuvent interagir avec le système. Désactivez aussi le montage automatique des supports, pour que rien ne s'exécute au branchement. Pour les contextes très sensibles, une diode de données (un dispositif qui ne laisse passer les données que dans un sens) remplace la clé, au prix d'une mise en place plus lourde.

#Tester l'étanchéité

Un test ne prouve l'étanchéité que sur la durée pendant laquelle il a observé : recommencez-le après chaque mise à jour et laissez la capture tourner pendant une session de travail complète. Le protocole minimal couvre le fonctionnement, l'absence de route, l'absence de résolution de noms et le trafic réel.

Fonctionnement hors ligne
Débranchez le câble et coupez toutes les radios, puis exécutez le flux complet (modèle, RAG, interface). Tout doit fonctionner : sinon, un composant dépendait d'Internet.
Absence de route
ping -c 1 8.8.8.8 doit échouer (« Network is unreachable » ou équivalent).
Absence de DNS
host exemple.org doit échouer ; vérifiez /etc/resolv.conf : aucun serveur externe.
Connexions établies
sudo ss -tunp state established : aucune connexion vers une adresse hors du réseau interne.
Trafic réel
Une capture avec tcpdump sur toutes les interfaces, en excluant le réseau interne, doit rester vide pendant toute une session d'usage.
Capture de contrôle
# rien ne doit apparaître (hors loopback et réseau interne)
sudo tcpdump -i any -n 'not (host 127.0.0.1 or host ::1) and not (net 192.168.50.0/24)'

#Audit régulier

Rythme de contrôle proposé
FréquenceContrôleObjectif
Mensuelleufw status verbose et liste des règles ; ss -tlnpRepérer une règle ajoutée « pour essayer »
À chaque transfertEmpreintes avant et après la clé ; analyse antivirusDétecter un fichier modifié
À chaque mise à jour d'un composantRelancer les tests d'étanchéité et relire les variables hors ligneUn nouveau composant peut ajouter un appel sortant
Semestrielle ou annuelleRéinstallation propre à partir d'images vérifiées ; revue de la menaceÉliminer une compromission accumulée

#Questions fréquentes sur l'air-gap d'une machine LLM

FAQ
Un pare-feu sortant suffit-il pour parler d'air-gap ?+
Non. Un pare-feu est une configuration logicielle : une règle oubliée, une faille ou un service qui la contourne suffisent à ouvrir une sortie. L'air-gap suppose l'absence physique de liaison réseau. Le pare-feu reste une bonne seconde ligne, et la seule protection quand la machine doit rester sur un réseau interne.
Comment mettre à jour Ollama sur une machine sans Internet ?+
Téléchargez le programme sur une machine connectée depuis la source officielle, calculez son empreinte, analysez-le, copiez-le sur une clé dédiée, recalculez l'empreinte sur la machine isolée avant installation, puis installez-le à la main. Relancez ensuite les tests d'étanchéité et vérifiez que les fonctions cloud restent désactivées.
Comment transférer un modèle vers la machine isolée ?+
Le plus simple est un fichier GGUF déjà quantifié : téléchargez-le, calculez son SHA-256, copiez-le sur la clé, recalculez l'empreinte côté isolé, puis créez le modèle avec un Modelfile et ollama create. Copier le dossier de modèles fonctionne aussi, mais son emplacement varie selon le système.
Ollama envoie-t-il mes requêtes à l'extérieur ?+
Selon la documentation d'Ollama, un fonctionnement en local ne transmet ni requêtes ni données à l'éditeur. Les fonctions cloud (modèles hébergés, recherche web) sont facultatives et peuvent être désactivées avec OLLAMA_NO_CLOUD=1 ou un réglage dans server.json. Pour une machine sensible, désactivez-les explicitement et vérifiez le message dans les journaux.
La clé USB est-elle le maillon faible ?+
C'est la seule porte d'entrée, donc la plus surveillée. Utilisez une clé dédiée, désactivez le montage automatique, comparez des empreintes SHA-256 avant et après le transfert, et envisagez USBGuard pour n'autoriser que les appareils attendus. Une diode de données est la solution supérieure si les contraintes le justifient.
Faut-il chiffrer le disque d'une machine déjà isolée ?+
Oui. L'isolement réseau ne protège pas contre le vol ou la saisie de la machine : un disque non chiffré se lit dès qu'on le branche ailleurs. Chiffrez le disque système, sauvegardez la clé de récupération hors de la machine et gardez la même discipline pour les sauvegardes.
Ce guide vous a aidé ?

Un retour, une erreur, une précision ? Faites-nous signe, ça améliore le guide pour tout le monde.