Skip to content
KitploitKITPLOIT
HerramientasExploitsBlog
Enviar
HerramientasExploitsBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
NetworkSandboxEngine — Un sandbox de red determinista para probar reglas de nftables. Utiliza espacios de nombres de red de Linux efímeros (netns) y Scapy para validar la lógica del firewall de forma segura. | Kitploit
Herramientas/GitHubGitHub/onyks-os/networksandboxengine
Herramientas DefensivasSniffing y Análisis de PaquetesScripting y AutomatizaciónAuditoría de ConfiguraciónSeguridad de RedesDevSecOps
GitHubonyks-os/networksandboxengine

NetworkSandboxEngine

Un sandbox de red determinista para probar reglas de nftables. Utiliza espacios de nombres de red de Linux efímeros (netns) y Scapy para validar la lógica del firewall de forma segura.

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Ver RepositorioSitio web
25hace 1 díaAún no revisado
Compartir

Network Sandbox Engine (NSE)

Un motor Linux para pruebas deterministas de cortafuegos nftables dentro de espacios de nombres de red aislados.

Linux Python CI Status Documentation PyPI

License

¿Por qué NSE? • Características • Requisitos • Instalación • Inicio rápido • Cómo funciona • Estructura del proyecto


Network Sandbox Engine Interface


¿Por qué NSE?

Probar conjuntos de reglas de cortafuegos en un sistema Linux en producción conlleva riesgos significativos: reglas mal formadas pueden cortar sesiones de gestión SSH, filtrar tráfico en texto claro durante las pruebas o dejar tablas de cortafuegos huérfanas activas en el host.

Network Sandbox Engine (NSE) proporciona un entorno de pruebas seguro y reproducible. Construye espacios de nombres de red Linux efímeros, conecta pares de ethernet virtuales, compila conjuntos de reglas nftables e inyecta paquetes sintéticos de Capa 2 y Capa 3 usando Scapy. Toda la evaluación ocurre dentro del espacio de nombres del sandbox: el estado del cortafuegos del host nunca se modifica.

Propiedades arquitectónicas clave:

  • Cero mutación del host: Los conjuntos de reglas se cargan exclusivamente en espacios de nombres efímeros del sandbox (nse_<uuid>) y se eliminan por completo durante el desmontaje.
  • Oráculo autoverificable: Cada ejecución inyecta un paquete canario antes de los paquetes de prueba y de nuevo después de ellos, y solo informa un resultado si se observó el rastro del kernel para ambos. Consulte El contrato del oráculo.
  • Doble pila y topologías: Soporte nativo para tráfico IPv4 e IPv6, además de topologías Gateway multiespacio de nombres para la validación de conjuntos de reglas de enrutador, NAT y reenvío.
  • Superficie pequeña y auditable: Un paquete, sin servidor web, sin JavaScript. nse/ tiene ~1150 sentencias con 98% de cobertura de pruebas.

Requiere root

NSE crea espacios de nombres de red, carga conjuntos de reglas nftables y lee eventos de rastreo del kernel, por lo que se ejecuta como root. No abre un socket, un puerto ni un endpoint RPC de ningún tipo — es una biblioteca y una CLI que usted invoca, y mantiene privilegios solo durante la duración de una ejecución.

La versión 2.1.0 eliminó la interfaz web FastAPI/Svelte que incluían las versiones anteriores. Esa interfaz se ejecutaba en proceso como root desde la 2.0.0 en adelante, lo que representaba una gran superficie de ataque para una herramienta de pruebas; el código permanece en el historial de git en la etiqueta v2.0.0 si lo necesita.


El contrato del oráculo

Una prueba de cortafuegos es una aserción negativa — "este paquete no pasó" — y una aserción negativa no vale nada a menos que se sepa que el instrumento funciona. Un monitor de rastreo que nunca se conectó al kernel y un cortafuegos que bloqueó todo producen una salida idéntica byte a byte.

Por lo tanto, NSE se niega a informar un veredicto que no pueda demostrar que midió:

GarantíaMecanismo
El monitor estaba conectado antes del primer paquete de pruebaSe inyecta un canario de preparación y se reinyecta hasta que se observe su rastro en el kernel. Sin observación, no hay ejecución.
El monitor seguía conectado después del últimoSe ejecuta un canario de vitalidad después de la inyección. Si se pierde, el flujo de veredictos se declara truncado.
El analizador entendió lo que dijo el kernelLas líneas de rastreo que ningún patrón coincide se cuentan, y cualquier recuento superior a cero es un error en lugar de un registro de depuración.
El monitor no murió silenciosamenteEl bucle de lectura registra por qué terminó — parada limpia, EOF inesperado, tiempo de espera o fallo — y solo una parada limpia es aceptable.
Un veredicto ausente no es un aprobadoEl ejecutor de la CLI falla cuando el número de veredictos observados difiere del número esperado, en cualquier dirección.

Los paquetes canario se excluyen de los resultados por id de rastreo, por lo que nunca aparecen en su flujo de veredictos.

La suite demuestra que esto se cumple, en lugar de afirmarlo: make test-blind fuerza al analizador a no entender nada, y la compilación falla a menos que el ejecutor salga con un código distinto de cero. Ese trabajo se ejecuta en CI en cada push.


Características

  • Motor en proceso: API directa de Python (run_test_pipeline) que devuelve modelos Pydantic estructurados (TestRequest, TraceEvent).
  • Inyección de paquetes con Scapy: Forja paquetes TCP arbitrarios (con flags SYN, ACK, FIN, RST personalizados), UDP, ICMP e ICMPv6.
  • Topologías aisladas:
    • Simple: Un único espacio de nombres de sandbox (nse_<id>) conectado directamente al host.
    • Gateway: Cadena de Router (nse_router_<id>) y Servidor (nse_server_<id>) para pruebas de reenvío y NAT.
  • Limpieza automatizada: Los barridos de inicio detectan y eliminan espacios de nombres y pares veth sobrantes de ejecuciones abortadas anteriores. Los desmontajes incluyen reintentos con retroceso exponencial.
  • Ejecutor de pruebas YAML por CLI: Ejecute suites de pruebas YAML declarativas para canalizaciones automatizadas de CI/CD (nse-runner). Sale con un código distinto de cero ante un veredicto incorrecto y ante un veredicto que no pudo observar.
  • Estándares de calidad estrictos: Verificación de tipos estática completa (mypy --strict), aplicación de límites arquitectónicos (import-linter), formateo con ruff y un trinquete de cobertura (make test-cov, mínimo 98%).

Requisitos

  • SO Linux (Kernel 5.4 o posterior con soporte para espacios de nombres de red y nftables)
  • Python 3.10+
  • nftables (nft)
  • iproute2 (ip)
  • Privilegios de root (necesarios para ip netns y operaciones de rastreo del kernel)

En sistemas Debian o Ubuntu:

root@kitploit:~
sudo apt update && sudo apt install -y nftables iproute2 conntrack

Instalación

1. Paquete PyPI (recomendado)

Instale el motor principal con soporte de CLI:

root@kitploit:~
pip install "network-sandbox-engine[cli]"

2. Instalación manual desde el código fuente

Para desarrollo local:

root@kitploit:~
git clone https://github.com/onyks-os/NetworkSandboxEngine.git
cd NetworkSandboxEngine
make setup

Inicio rápido

1. Biblioteca Python sin interfaz gráfica

root@kitploit:~
import asyncio
from nse.core.netns_controller import NetnsController
from nse.core.pipeline import run_test_pipeline
from nse.models.test_request import TestRequest, PacketSpec

rules = """
table ip filter {
    chain input {
        type filter hook input priority 0; policy drop;
        tcp dport 80 accept
    }
}
"""

request = TestRequest(
    rules=rules,
    packets=[
        PacketSpec(protocol="tcp", src_ip="10.0.0.1", dst_ip="10.0.0.2", dst_port=80),
        PacketSpec(protocol="tcp", src_ip="10.0.0.1", dst_ip="10.0.0.2", dst_port=22),
    ],
)


async def main():
    controller = NetnsController()
    events = await run_test_pipeline(request=request, controller=controller)
    for evt in events:
        if evt.verdict:
            print(f"[{evt.chain}] Verdict: {evt.verdict}")


asyncio.run(main())

2. Ejecutor de suites de pruebas YAML (CLI)

Cree un archivo de prueba firewall_test.yaml:

root@kitploit:~
tests:
  - name: "Allow HTTP Port 80, Drop SSH Port 22"
    topology: simple
    rules: |
      table ip filter {
        chain input {
          type filter hook input priority 0; policy drop;
          tcp dport 80 accept
        }
      }
    packets:
      - protocol: tcp
        src_ip: 10.0.0.1
        dst_ip: 10.0.0.2
        dst_port: 80
        expected_verdict: ACCEPT
      - protocol: tcp
        src_ip: 10.0.0.1
        dst_ip: 10.0.0.2
        dst_port: 22
        expected_verdict: DROP

expected_verdict es por paquete. Las claves desconocidas se rechazan en lugar de usar valores predeterminados, por lo que un error tipográfico hace fallar la suite en lugar de convertirse silenciosamente en una expectativa que usted nunca escribió.

Ejecute la suite con privilegios de root:

root@kitploit:~
sudo nse-runner --file firewall_test.yaml

Códigos de salida: 0 todos los paquetes coincidieron; 1 un veredicto fue incorrecto o el motor no pudo observar uno. Los errores del oráculo se informan por separado de los fallos del cortafuegos, porque significan que la medición se rompió, no el conjunto de reglas.

3. En un contenedor

root@kitploit:~
podman build -t nse .
podman run --rm --cap-add=NET_ADMIN --cap-add=NET_RAW \
    -v "$PWD/firewall_test.yaml:/suite.yaml:ro" nse --file /suite.yaml

Útil para fijar la versión de nftables contra la que se prueban sus reglas.


Cómo funciona

NSE orquesta los subsistemas de red del kernel de Linux y las interfaces de rastreo a través de una canalización de ejecución estructurada de múltiples etapas:

root@kitploit:~
graph TD
    subgraph Step1["1. Test Specification"]
        Req["<b>TestRequest</b><br/>ruleset + packets + topology"]
    end

    subgraph Step2["2. Ephemeral Netns Sandbox"]
        direction TB
        Netns["<b>Netns Setup</b><br/>nse_&lt;id&gt; & veth links"]
        RuleEng["<b>Rule Engine</b><br/>validate & load nftables"]
        Inject["<b>Scapy Injector</b><br/>L2/L3 packet injection"]
        NFT["<b>Kernel nftables</b><br/>meta nftrace set 1"]

        Netns --> RuleEng
        RuleEng --> Inject
        Inject --> NFT
    end

    subgraph Step3["3. Trace Evaluation & Oracle"]
        direction TB
        Harvester["<b>Trace Harvester</b><br/>nft monitor trace stream"]
        Oracle["<b>Deterministic Oracle</b><br/>TraceEvents & verdicts"]

        Harvester --> Oracle
    end

    Step1 --> Step2
    Step2 --> Step3
  1. Validación del conjunto de reglas: RuleEngine.validate() ejecuta en seco el conjunto de reglas usando nft --check -f.
  2. Aprovisionamiento del sandbox: NetnsController crea el espacio de nombres de red aislado y configura las interfaces de ethernet virtual (veth).
  3. Inicialización del rastreo: Los conjuntos de reglas se cargan en el espacio de nombres con el rastreo del kernel armado (meta nftrace set 1).
  4. Inyección de paquetes: ScapyInjector inyecta tramas sintéticas a través del enlace veth.
  5. Recolección de veredictos: TraceHarvester captura eventos de nft monitor trace y devuelve objetos TraceEvent estructurados.
  6. Desmontaje: El espacio de nombres y todas las interfaces veth asociadas se eliminan automáticamente.

Para especificaciones técnicas completas, consulte la Guía de arquitectura técnica.


Estructura del proyecto

root@kitploit:~
NetworkSandboxEngine/
├── nse/                        # Core PyPI package (network-sandbox-engine)
│   ├── core/                   # Kernel primitives, pipeline, and naming rules
│   ├── models/                 # Pydantic models (TestRequest, PacketSpec, TraceEvent)
│   └── cli/                    # Headless YAML runner entrypoint
├── docs/                       # Architecture specs and MkDocs web documentation
├── tests/                      # Unit, golden file, and privileged e2e tests
│   └── fixtures/nft_trace/     # Golden `nft monitor trace` corpus
├── pyproject.toml              # Build backend configuration
└── Makefile                    # Local automation and CI workflow

Publicación de versiones

Una etiqueta. git push origin vX.Y.Z compila, firma con Sigstore, publica la GitHub Release, sube a TestPyPI, instala desde TestPyPI y lo prueba de humo, y solo entonces sube a PyPI. Ensaye con make release-dry.

Consulte docs/RELEASING.md.

Documentación

La documentación web interactiva completa está disponible en:
https://onyks-os.github.io/nse/

Compile la documentación localmente:

root@kitploit:~
make docs

Sirva la documentación con recarga en caliente en http://127.0.0.1:8000:

root@kitploit:~
make docs-serve

Pruebas y CI local

Ejecute el linting estático y las pruebas unitarias:

root@kitploit:~
make verify

Ejecute la verificación completa de CI local (incluye linting, pruebas unitarias, compilación del frontend, compilación de la documentación, prueba de humo de PyPI y pruebas de integración con privilegios):

root@kitploit:~
make ci-local

Licencia

Este proyecto está licenciado bajo la Licencia MIT.

Descargar herramienta