Skip to content
KitploitKITPLOIT
OutilsBlog
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
qubes-mirage-firewall — Pare-feu unikernel minimal pour QubesOS qui filtre le trafic réseau, implémente le NAT et communique via Qubes DB et qrexec. | Kitploit
Outils/GitHubGitHub/mirage/qubes-mirage-firewall
Outils DéfensifsContrôle d'Accès RéseauVirtualisation de SécuritéSécurité Réseau
GitHubmirage/qubes-mirage-firewall

qubes-mirage-firewall

Pare-feu unikernel minimal pour QubesOS qui filtre le trafic réseau, implémente le NAT et communique via Qubes DB et qrexec.

Voir le dépôt
239298il y a 20 joursVérifié par Kitploit

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

qubes-mirage-firewall

Un unikernel qui peut fonctionner comme ProxyVM QubesOS, remplaçant sys-firewall. Il utilise la bibliothèque mirage-qubes pour implémenter les protocoles Qubes.

Voir Un pare-feu unikernel pour QubesOS pour plus de détails.

Versions binaires

Des binaires précompilés sont disponibles sur la page des releases. Voir la section Deploy ci-dessous pour les instructions d'installation.

Compilation depuis les sources

Remarque : la méthode la plus fiable pour compiler est d'utiliser Docker ou Podman. Fedora 42 fonctionne bien pour cela, Debian 12 fonctionne aussi, mais vous devrez suivre les instructions sur docker.com pour obtenir Docker (n'utilisez pas la version de Debian).

Créez une nouvelle AppVM Fedora-42 (ou réutilisez-en une existante). Dans les paramètres de la Qube (Basic / Disk storage), augmentez la taille maximale du stockage privé de 2048 Mio par défaut à 8192 Mio. Ouvrez un terminal.

Clonez ce dépôt Git et exécutez le script build-with.sh avec ou comme argument (Remarque : l'appel est obligatoire sur Fedora avec les nouvelles politiques SELinux qui ne permettent pas de conserver les images Docker dans le répertoire personnel de manière standard) :

docker
podman
chcon
root@kitploit:~
mkdir /home/user/docker
sudo ln -s /home/user/docker /var/lib/docker
sudo chcon -Rt container_file_t /home/user/docker
sudo dnf install docker
sudo systemctl start docker
git clone https://github.com/mirage/qubes-mirage-firewall.git
cd qubes-mirage-firewall
sudo ./build-with.sh docker

Ou

root@kitploit:~
sudo systemctl start podman
git clone https://github.com/mirage/qubes-mirage-firewall.git
cd qubes-mirage-firewall
./build-with.sh podman

Cela a pris environ 15 minutes sur mon ordinateur portable (ce sera beaucoup plus rapide si vous le relancez). L'étape du lien symbolique au début n'est pas nécessaire si votre VM de compilation est autonome. Elle donne plus d'espace disque à Docker et évite de perdre le cache des images Docker lorsque vous redémarrez la Qube. Ce n'est pas nécessaire avec Podman car les conteneurs vivent dans votre répertoire personnel par défaut.

Remarque : les fichiers objets sont stockés dans le répertoire _build pour accélérer les compilations incrémentales. Si vous modifiez les dépendances, vous devrez supprimer ce répertoire avant de recompiler.

Il est acceptable d'installer le paquet Docker ou Podman dans une VM modèle si vous souhaitez qu'il reste après un redémarrage, mais la compilation du pare-feu lui-même doit être effectuée dans une AppVM normale.

Vous pouvez également compiler sans ce script, comme pour tout unikernel Mirage normal ; voir les instructions d'installation de Mirage pour plus de détails.

Le script de compilation fige les versions des bibliothèques qu'il utilise, garantissant que vous obtiendrez exactement le même binaire que celui de la release. Si vous compilez sans lui, la compilation se fera avec les dernières versions à la place (le hash ne correspondra donc probablement pas). Cependant, cela devrait tout de même fonctionner correctement.

Deploy

Déploiement manuel

Si vous souhaitez déployer manuellement, il vous suffit de télécharger qubes-firewall.xen et qubes-firewall.sha256 dans domU et de vérifier que le fichier .xen a une somme de contrôle correspondante. qubes-firewall.xen est l'unikernel lui-même et doit être copié vers vmlinuz dans le répertoire /var/lib/qubes/vm-kernels/mirage-firewall dans dom0, par exemple (si dev est l'AppVM où vous l'avez compilé) :

root@kitploit:~
[tal@dom0 ~]$ mkdir -p /var/lib/qubes/vm-kernels/mirage-firewall/
[tal@dom0 ~]$ cd /var/lib/qubes/vm-kernels/mirage-firewall/
[tal@dom0 mirage-firewall]$ qvm-run -p dev 'cat mirage-firewall/qubes-firewall.xen' > vmlinuz

Exécutez cette commande dans dom0 pour créer une VM mirage-firewall en utilisant le noyau mirage-firewall que vous avez ajouté ci-dessus

root@kitploit:~
qvm-create \
  --property kernel=mirage-firewall \
  --property kernelopts='' \
  --property memory=32 \
  --property maxmem=32 \
  --property netvm=sys-net \
  --property provides_network=True \
  --property vcpus=1 \
  --property virt_mode=pvh \
  --property audiovm='' \
  --label=green \
  --class StandaloneVM \
  mirage-firewall

qvm-features mirage-firewall qubes-firewall 1
qvm-features mirage-firewall no-default-kernelopts 1
qvm-features mirage-firewall skip-update 1

Déploiement avec saltstack

Si vous êtes familiarisé avec l'exécution des états Salt dans Qubes, vous pouvez également utiliser le script SaltScriptToDownloadAndInstallMirageFirewallInQubes.sls pour déployer automatiquement la dernière version de mirage firewall dans votre Qubes OS. Une introduction est disponible ici et ici. En suivant les instructions du premier lien, vous pouvez exécuter le script dans dom0 avec la commande sudo qubesctl --show-output state.apply SaltScriptToDownloadAndInstallMirageFirewallInQubes saltenv=user. Le script vérifie la somme de contrôle du serveur d'intégration et la compare avec la dernière version fournie dans les releases GitHub. Il peut être nécessaire d'ajuster les modèles de VM dans le script utilisés pour télécharger l'unikernel Mirage, si vos modèles par défaut n'ont pas les outils curl et tar installés par défaut. N'oubliez pas non plus de changer les VM dans lesquelles l'unikernel doit être utilisé ou d'ajuster les « Qubes Global Settings ».

Mise à niveau

Pour mettre à niveau à partir d'une version antérieure, il suffit de remplacer /var/lib/qubes/vm-kernels/mirage-firewall/vmlinuz par la nouvelle version et de redémarrer la VM du pare-feu.

Configurer les AppVMs pour l'utiliser

Vous pouvez exécuter mirage-firewall parallèlement à votre sys-firewall existant et choisir quelles AppVMs utilisent quel pare-feu via l'interface graphique. Pour configurer une AppVM afin qu'elle l'utilise, accédez aux paramètres de la VM d'application dans l'interface graphique et changez son NetVM de default (sys-firewall) à mirage-firewall.

Vous pouvez également la configurer en exécutant cette commande dans dom0 (remplacez my-app-vm par le nom de l'AppVM) :

root@kitploit:~
qvm-prefs --set my-app-vm netvm mirage-firewall

Alternativement, vous pouvez configurer mirage-firewall comme VM de pare-feu par défaut.

Notez que par défaut dom0 utilise sys-firewall comme « UpdateVM » (un proxy pour télécharger les mises à jour). mirage-firewall ne peut pas être utilisé pour cela, mais n'importe quelle VM Linux devrait convenir. https://www.qubes-os.org/doc/software-update-dom0/ dit :

Le rôle d'UpdateVM peut être attribué à n'importe quelle VM dans le Qubes VM Manager, et il n'y a pas d'implications de sécurité significatives dans ce choix. Par défaut, ce rôle est attribué à la firewallvm.

Configurer le pare-feu avec un netvm de type OpenBSD

OpenBSD ne peut actuellement pas être utilisé comme netvm, donc si vous voulez utiliser un BSD comme VM sys-net, vous devrez définir son netvm sur qubes-mirage-firewall (voir https://github.com/mirage/qubes-mirage-firewall/issues/146 pour plus d'informations). Cela signifie que vous aurez AppVMs -> qubes-mirage-firewall <- OpenBSD, la flèche représentant le réglage de la propriété netvm.

Dans ce cas, vous devrez indiquer à qubes-mirage-firewall quel client AppVM doit être utilisé comme liaison montante :

root@kitploit:~
qvm-prefs --set mirage-firewall -- kernelopts '--ipv4=X.X.X.X --ipv4-gw=Y.Y.Y.Y'

avec X.X.X.X l'adresse IP de mirage-firewall et Y.Y.Y.Y l'adresse IP de votre HVM OpenBSD.

Composants

Ce diagramme montre les principaux composants (chaque boîte correspond à un fichier source .ml portant le même nom) :

Les trames Ethernet arrivent des qubes clientes (comme work ou personal) ou de sys-net. Les paquets Internet (IP) sont envoyés à firewall, qui consulte la table NAT et les règles de QubesDB pour décider quoi faire du paquet. S'il doit être transmis, il utilise router pour l'envoyer à la destination choisie. client_net surveille la base de données XenStore fournie par dom0 pour savoir quand des clients doivent être ajoutés ou supprimés.

Le processus de démarrage :

  • config.ml décrit les bibliothèques utilisées et les paramètres de configuration statiques (taille de la table NAT). L'outil mirage utilise ce fichier pour générer main.ml.
  • main.ml initialise les pilotes sélectionnés par config.ml et appelle la fonction start dans unikernel.ml.
  • unikernel.ml connecte les agents Qubes, configure les composants réseau, puis attend une demande d'arrêt.

Déploiement facile pour les développeurs

Pour le développement, utilisez les scripts test-mirage pour déployer l'unikernel (qubes-firewall.xen) depuis votre AppVM de développement. La première fois, la mise en place demande un peu plus de travail, mais cela ira beaucoup plus vite ensuite. Par exemple :

root@kitploit:~
[user@dev ~]$ test-mirage dist/qubes-firewall.xen mirage-firewall
Waiting for 'Ready'... OK
Uploading 'dist/qubes-firewall.xen' (7454880 bytes) to "mirage-test"
Waiting for 'Booting'... OK
Connecting to mirage-test console...
Solo5: Xen console: port 0x2, ring @0x00000000FEFFF000
            |      ___|
  __|  _ \  |  _ \ __ \
\__ \ (   | | (   |  ) |
____/\___/ _|\___/____/
Solo5: Bindings version v0.7.3
Solo5: Memory map: 32 MB addressable:
Solo5:   reserved @ (0x0 - 0xfffff)
Solo5:       text @ (0x100000 - 0x319fff)
Solo5:     rodata @ (0x31a000 - 0x384fff)
Solo5:       data @ (0x385000 - 0x53ffff)
Solo5:       heap >= 0x540000 < stack < 0x2000000
2022-08-13 14:55:38 -00:00: INF [qubes.rexec] waiting for client...
2022-08-13 14:55:38 -00:00: INF [qubes.db] connecting to server...
2022-08-13 14:55:38 -00:00: INF [qubes.db] connected
2022-08-13 14:55:38 -00:00: INF [qubes.db] got update: "/mapped-ip/10.137.0.20/visible-ip" = "10.137.0.20"
2022-08-13 14:55:38 -00:00: INF [qubes.db] got update: "/mapped-ip/10.137.0.20/visible-gateway" = "10.137.0.23"
2022-08-13 14:55:38 -00:00: INF [qubes.rexec] client connected, using protocol version 3
2022-08-13 14:55:38 -00:00: INF [unikernel] QubesDB and qrexec agents connected in 0.041 s
2022-08-13 14:55:38 -00:00: INF [dao] Got network configuration from QubesDB:
            NetVM IP on uplink network: 10.137.0.4
            Our IP on uplink network:   10.137.0.23
            Our IP on client networks:  10.137.0.23
            DNS resolver:               10.139.1.1
            DNS secondary resolver:     10.139.1.2
2022-08-13 14:55:38 -00:00: INF [net-xen frontend] connect 0
2022-08-13 14:55:38 -00:00: INF [net-xen frontend] create: id=0 domid=1
2022-08-13 14:55:38 -00:00: INF [net-xen frontend]  sg:true gso_tcpv4:true rx_copy:true rx_flip:false smart_poll:false
2022-08-13 14:55:38 -00:00: INF [net-xen frontend] MAC: 00:16:3e:5e:6c:00
2022-08-13 14:55:38 -00:00: INF [ethernet] Connected Ethernet interface 00:16:3e:5e:6c:00
2022-08-13 14:55:38 -00:00: INF [ARP] Sending gratuitous ARP for 10.137.0.23 (00:16:3e:5e:6c:00)
2022-08-13 14:55:38 -00:00: INF [ARP] Sending gratuitous ARP for 10.137.0.23 (00:16:3e:5e:6c:00)
2022-08-13 14:55:38 -00:00: INF [udp] UDP layer connected on 10.137.0.23
2022-08-13 14:55:38 -00:00: INF [dao] Watching backend/vif
2022-08-13 14:55:38 -00:00: INF [memory_pressure] Writing meminfo: free 20MiB / 27MiB (72.68 %)

Tester si le pare-feu fonctionne

Un unikernel qui teste le pare-feu est disponible dans le sous-répertoire test/. Pour l'utiliser, exécutez test.sh et suivez les instructions pour configurer l'environnement de test.

Avis de sécurité

Voir les problèmes étiquetés « security » pour les avis de sécurité concernant le pare-feu.

LICENCE

Voir LICENSE.md

Télécharger l’outil