
Firewall unikernel mínimo para QubesOS que filtra el tráfico de red, implementa NAT y se comunica a través de Qubes DB y qrexec.
Un unikernel que puede ejecutarse como ProxyVM de QubesOS, reemplazando a sys-firewall.
Utiliza la biblioteca [mirage-qubes][] para implementar los protocolos de Qubes.
Consulte [A Unikernel Firewall for QubesOS][] para más detalles.
Los binarios precompilados están disponibles en la [página de lanzamientos][releases page]. Consulte la sección Deploy a continuación para las instrucciones de instalación.
Nota: La forma más fiable de compilar es usando Docker o Podman. Fedora 42 funciona bien para esto; Debian 12 también funciona, pero deberá seguir las instrucciones de [docker.com][debian-docker] para obtener Docker (no use la versión de Debian).
Cree una nueva AppVM Fedora-42 (o reutilice una existente). En los ajustes de la Qube (Basic / Disk storage), aumente el tamaño máximo de almacenamiento privado de los 2048 MiB predeterminados a 8192 MiB. Abra una terminal.
Clone este repositorio Git y ejecute el script build-with.sh con docker o podman como argumento (Nota: la llamada a chcon es obligatoria en Fedora con las nuevas políticas de SELinux que no permiten mantener las imágenes de docker en el directorio personal de forma estándar):
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
O
sudo systemctl start podman
git clone https://github.com/mirage/qubes-mirage-firewall.git
cd qubes-mirage-firewall
./build-with.sh podman
Esto tardó unos 15 minutos en mi portátil (será mucho más rápido si lo vuelve a ejecutar). El paso del enlace simbólico al principio no es necesario si su VM de compilación es independiente. Le da a Docker más espacio en disco y evita perder la caché de imágenes de Docker cuando reinicia la Qube. No es necesario con Podman, ya que los contenedores viven en su directorio personal por defecto.
Nota: los archivos objeto se almacenan en el directorio _build para acelerar las compilaciones incrementales.
Si cambia las dependencias, deberá eliminar este directorio antes de recompilar.
Está bien instalar el paquete de Docker o Podman en una VM plantilla si desea que permanezca después de un reinicio, pero la compilación del firewall en sí debe realizarse en una AppVM normal.
También puede compilar sin ese script, como para cualquier unikernel Mirage normal; consulte las instrucciones de instalación de Mirage para más detalles.
El script de compilación fija las versiones de las bibliotecas que utiliza, asegurando que obtendrá exactamente el mismo binario que está en el lanzamiento. Si compila sin él, se compilará contra las últimas versiones (y por lo tanto, el hash probablemente no coincidirá). Sin embargo, debería funcionar bien.
Si desea realizar un despliegue manual, solo necesita descargar qubes-firewall.xen y
qubes-firewall.sha256 en domU y comprobar que el archivo .xen tiene un
hashsum correspondiente. qubes-firewall.xen es el unikernel en sí y debe copiarse a
vmlinuz en el directorio /var/lib/qubes/vm-kernels/mirage-firewall en dom0, p. ej.
(si dev es la AppVM donde lo compiló):
[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
Ejecute este comando en dom0 para crear una VM mirage-firewall usando el kernel mirage-firewall que añadió anteriormente
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
Si sabe cómo ejecutar estados de salt en Qubes, también puede usar el script SaltScriptToDownloadAndInstallMirageFirewallInQubes.sls para desplegar automáticamente la última versión de mirage firewall en su Qubes OS. Puede encontrar una introducción aquí y aquí. Siguiendo las instrucciones del primer enlace, puede ejecutar el script en dom0 con el comando sudo qubesctl --show-output state.apply SaltScriptToDownloadAndInstallMirageFirewallInQubes saltenv=user. El script comprueba el checksum del servidor de integración y lo compara con la última versión proporcionada en los lanzamientos de github. Puede ser necesario ajustar las plantillas de VM en el script que se utilizan para la descarga del unikernel de mirage, si sus plantillas predeterminadas no tienen las herramientas curl y tar instaladas por defecto. Tampoco olvide cambiar las VMs en las que se debe usar el uni kernel o ajustar los "Qubes Global Settings".
Para actualizar desde una versión anterior, simplemente sobrescriba /var/lib/qubes/vm-kernels/mirage-firewall/vmlinuz con la nueva versión y reinicie la VM del firewall.
Puede ejecutar mirage-firewall junto con su sys-firewall existente y puede elegir qué AppVMs usan cada firewall mediante la GUI.
Para configurar una AppVM para que lo use, vaya a los ajustes de la VM de la aplicación en la GUI y cambie su NetVM de default (sys-firewall) a mirage-firewall.
También puede configurarlo ejecutando este comando en dom0 (reemplace my-app-vm con el nombre de la AppVM):
qvm-prefs --set my-app-vm netvm mirage-firewall
Alternativamente, puede configurar mirage-firewall como su VM de firewall predeterminada.
Tenga en cuenta que, por defecto, dom0 usa sys-firewall como su "UpdateVM" (un proxy para descargar actualizaciones). mirage-firewall no puede usarse para esto, pero cualquier VM Linux debería ser suficiente. https://www.qubes-os.org/doc/software-update-dom0/ dice:
El rol de UpdateVM puede asignarse a cualquier VM en Qubes VM Manager, y no hay implicaciones de seguridad significativas en esta elección. Por defecto, este rol se asigna a la firewallvm.
Actualmente OpenBSD no puede usarse como netvm, así que si desea usar un BSD como su VM sys-net, deberá establecer su netvm a qubes-mirage-firewall (consulte https://github.com/mirage/qubes-mirage-firewall/issues/146 para más información).
Eso significa que tendrá AppVMs -> qubes-mirage-firewall <- OpenBSD con la flecha representando el ajuste de la propiedad netvm.
En ese caso, tendrá que indicar a qubes-mirage-firewall qué cliente AppVM debe usarse como uplink:
qvm-prefs --set mirage-firewall -- kernelopts '--ipv4=X.X.X.X --ipv4-gw=Y.Y.Y.Y'
con X.X.X.X como dirección IP para mirage-firewall e Y.Y.Y.Y como dirección IP de su HVM OpenBSD.
Este diagrama muestra los componentes principales (cada caja corresponde a un archivo fuente .ml con el mismo nombre):