Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
qubes-mirage-firewall — Firewall unikernel minimale per QubesOS che filtra il traffico di rete, implementa NAT e comunica tramite Qubes DB e qrexec. | Kitploit
Strumenti/GitHubGitHub/mirage/qubes-mirage-firewall
Strumenti DifensiviControllo Accesso ReteVirtualizzazione per la SicurezzaSicurezza di Rete
GitHubmirage/qubes-mirage-firewall

qubes-mirage-firewall

Firewall unikernel minimale per QubesOS che filtra il traffico di rete, implementa NAT e comunica tramite Qubes DB e qrexec.

Vedi Repository
239291 mese faRevisionato da Kitploit

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

qubes-mirage-firewall

Un unikernel che può funzionare come ProxyVM di QubesOS, sostituendo sys-firewall. Usa la libreria mirage-qubes per implementare i protocolli di Qubes.

Vedi A Unikernel Firewall for QubesOS per maggiori dettagli.

Binary releases

I binari precompilati sono disponibili nella pagina delle release. Vedi la sezione Deploy qui sotto per le istruzioni di installazione.

Build from source

Nota: il metodo più affidabile per compilare è usare Docker o Podman. Fedora 42 funziona bene per questo, anche Debian 12 funziona, ma dovrai seguire le istruzioni su docker.com per ottenere Docker (non usare la versione di Debian).

Crea una nuova AppVM Fedora-42 (o riutilizzane una esistente). Nelle impostazioni della Qube (Basic / Disk storage), aumenta la dimensione massima dello storage privato da 2048 MiB predefiniti a 8192 MiB. Apri un terminale.

Clona questo repository Git ed esegui lo script build-with.sh con docker o come argomento (Nota: la chiamata è obbligatoria su Fedora con le nuove policy SELinux che non permettono di mantenere standardmente le immagini docker nella home):

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

Oppure

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

Sul mio laptop ci sono voluti circa 15 minuti (sarà molto più veloce se lo esegui di nuovo). Il passaggio del symlink all'inizio non è necessario se la tua VM di build è standalone. Dà a Docker più spazio su disco ed evita di perdere la cache delle immagini Docker quando riavvii la Qube. Con Podman non serve, poiché i container vivono nella tua home directory per impostazione predefinita.

Nota: i file oggetto sono memorizzati nella directory _build per velocizzare le build incrementali. Se cambi le dipendenze, dovrai eliminare questa directory prima di ricompilare.

Va bene installare il pacchetto Docker o Podman in una VM template se vuoi che rimanga dopo un riavvio, ma la build del firewall stesso dovrebbe essere fatta in una normale AppVM.

Puoi anche compilare senza quello script, come per qualsiasi normale unikernel Mirage; vedi le istruzioni di installazione di Mirage per i dettagli.

Lo script di build fissa le versioni delle librerie che usa, assicurando che tu ottenga esattamente lo stesso binario della release. Se compili senza, verrà compilato contro le ultime versioni (e quindi probabilmente l'hash non corrisponderà). Tuttavia, dovrebbe funzionare comunque bene.

Deploy

Manual deployment

Se vuoi fare il deploy manualmente, devi solo scaricare qubes-firewall.xen e qubes-firewall.sha256 in domU e verificare che il file .xen abbia un hashsum corrispondente. qubes-firewall.xen è l'unikernel stesso e dovrebbe essere copiato in vmlinuz nella directory /var/lib/qubes/vm-kernels/mirage-firewall in dom0, es. (se dev è la AppVM dove hai compilato):

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

Esegui questo comando in dom0 per creare una VM mirage-firewall usando il kernel mirage-firewall aggiunto sopra

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

Deployment usando saltstack

Se sai come eseguire gli stati salt in Qubes, puoi anche usare lo script SaltScriptToDownloadAndInstallMirageFirewallInQubes.sls per distribuire automaticamente l'ultima versione del firewall mirage nel tuo Qubes OS. Un'introduzione si può trovare qui e qui. Seguendo le istruzioni del primo link, puoi eseguire lo script in dom0 con il comando sudo qubesctl --show-output state.apply SaltScriptToDownloadAndInstallMirageFirewallInQubes saltenv=user. Lo script controlla il checksum dal server di integrazione e lo confronta con l'ultima versione fornita nelle release di github. Potrebbe essere necessario adattare i template VM nello script usati per il download dell'unikernel mirage, se i tuoi template predefiniti non hanno gli strumenti curl e tar installati di default. Inoltre, non dimenticare di cambiare le VM in cui l'unikernel dovrebbe essere usato o di regolare le "Qubes Global Settings".

Upgrading

Per aggiornare da una release precedente, basta sovrascrivere /var/lib/qubes/vm-kernels/mirage-firewall/vmlinuz con la nuova versione e riavviare la VM del firewall.

Configurare le AppVM per usarlo

Puoi eseguire mirage-firewall insieme al tuo sys-firewall esistente e puoi scegliere quali AppVM usano quale firewall tramite la GUI. Per configurare una AppVM per usarlo, vai nelle impostazioni della VM app nella GUI e cambia il suo NetVM da default (sys-firewall) a mirage-firewall.

Puoi anche configurarlo eseguendo questo comando in dom0 (sostituisci my-app-vm con il nome della AppVM):

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

In alternativa, puoi configurare mirage-firewall come VM firewall predefinita.

Nota che di default dom0 usa sys-firewall come sua "UpdateVM" (un proxy per scaricare gli aggiornamenti). mirage-firewall non può essere usato per questo, ma qualsiasi VM Linux dovrebbe andare bene. https://www.qubes-os.org/doc/software-update-dom0/ dice:

Il ruolo di UpdateVM può essere assegnato a qualsiasi VM nel Qubes VM Manager, e non ci sono implicazioni di sicurezza significative in questa scelta. Di default, questo ruolo è assegnato alla firewallvm.

Configurare il firewall con netvm stile OpenBSD

OpenBSD attualmente non può essere usato come netvm, quindi se vuoi usare un BSD come VM sys-net, dovrai impostare il suo netvm su qubes-mirage-firewall (vedi https://github.com/mirage/qubes-mirage-firewall/issues/146 per maggiori informazioni). Ciò significa che avrai AppVMs -> qubes-mirage-firewall <- OpenBSD con la freccia che rappresenta l'impostazione della proprietà netvm.

In tal caso dovrai dire a qubes-mirage-firewall quale client AppVM deve essere usato come uplink:

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

con X.X.X.X l'indirizzo IP per mirage-firewall e Y.Y.Y.Y l'indirizzo IP del tuo HVM OpenBSD.

Componenti

Questo diagramma mostra i componenti principali (ogni riquadro corrisponde a un file sorgente .ml con lo stesso nome):

I frame Ethernet arrivano dai qubes client (come work o personal) o da sys-net. I pacchetti Internet (IP) vengono inviati a firewall, che consulta la tabella NAT e le regole da QubesDB per decidere cosa fare con il pacchetto. Se deve essere inoltrato, usa router per inviarlo alla destinazione scelta. client_net osserva il database XenStore fornito da dom0 per scoprire quando i client devono essere aggiunti o rimossi.

Il processo di avvio:

  • config.ml descrive le librerie usate e le impostazioni di configurazione statiche (dimensione della tabella NAT). Lo strumento mirage usa questo per generare main.ml.
  • main.ml inizializza i driver selezionati da config.ml e chiama la funzione start in unikernel.ml.
  • unikernel.ml collega gli agenti Qubes, configura i componenti di rete, e poi attende una richiesta di spegnimento.

Deployment facile per sviluppatori

Per lo sviluppo, usa gli script test-mirage per distribuire l'unikernel (qubes-firewall.xen) dalla tua AppVM di sviluppo. La prima volta richiede un po' più di configurazione, ma dopo sarà molto più veloce. es.

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 %)

Testare se il firewall funziona

Un unikernel che testa il firewall è disponibile nella sottodirectory test/. Per usarlo, esegui test.sh e segui le istruzioni per configurare l'ambiente di test.

Avvisi di sicurezza

Vedi issue etichettate "security" per gli avvisi di sicurezza che riguardano il firewall.

LICENZA

Vedi LICENSE.md

Scarica lo strumento