ES EN

El IDE de nftablesThe IDE for nftables BETA

Mira lo que hace de verdad tu firewallSee what your firewall actually does

eFeFlow es un editor visual, analizador y simulador de paquetes para nftables, libre y de código abierto. Constrúyelo desde cero o importa lo que ya corres, encuentra las reglas que nunca pueden disparar, mira un paquete recorrer tus cadenas hasta su veredicto, y aplica con un rollback que se arma en el propio firewall — así la regla que te corta el acceso no puede impedirte deshacerla. eFeFlow is a free, open-source visual editor, analyser and packet simulator for nftables. Build one from scratch or import what you already run, find the rules that can never fire, watch a packet walk your chains to its verdict, and apply with a rollback that arms on the firewall itself — so the rule that cuts you off cannot stop you undoing it.

v0.9.27 licencialicence MIT Linux · Windows · macOS 1.1031,103 teststests

La regla que nunca disparaThe rule that never fires

No es la sintaxis: es el orden. Y el orden es invisible en un fichero de texto.Not syntax — order. And order is invisible in a text file.

inet filter · chain input
table inet filter {
  chain input {
    type filter hook input priority filter; policy drop;
    ct state established,related counter accept
    tcp dport { 80, 443 } counter accept
    ip saddr 10.10.0.0/24 tcp dport 443 acceptno puede casar jamáscan never match
  }
}

Todo lo que la última regla aceptaría, la de encima ya lo aceptó. Aquí, con cuatro reglas, se ve. Ahora ponla en la línea 411 de 800, detrás de dos jump, en una tabla que heredaste. Nada está roto, nft -c la da por buena — y la regla simplemente está muerta. Everything the last rule would accept, the one above already accepted. With four rules you can see it. Now put it at line 411 of 800, behind two jumps, in a table you inherited. Nothing is broken, nft -c is happy — and the rule is simply dead.

Empieza desde una tabla vacía, no un fichero en blancoStart from an empty table, not a blank file

Un editor completo: compón tablas, cadenas y reglas eligiendo hooks, prioridades, coincidencias y veredictos de menús. Lo que emite es exactamente el nft que habrías escrito tú.A full editor: compose tables, chains and rules by picking hooks, priorities, matches and verdicts from menus. What it emits is exactly the nft you would have written by hand.

El editor visual de eFeFlow: cadenas colocadas en los hooks de netfilter por orden de prioridad, con el nftables generado en vivo abajo The eFeFlow visual editor: chains placed on netfilter hooks in priority order, with the generated nftables live below
El lienzo coloca cada cadena en el hook al que está enganchada: de izquierda a derecha, en el orden en que un paquete los encuentra. La posición es significado.The canvas places each chain on the hook it's attached to — left to right, in the order a packet meets them. Position is meaning.

Qué hace eFeFlowWhat eFeFlow does

Todo se deriva de tus reglas, nunca se escribe a mano. Y todo es deshacible.Everything is derived from your rules, never authored — and all of it is undoable.

Construye desde ceroBuild from scratch

Parte de una tabla vacía y compón tablas, cadenas y reglas visualmente. eFeFlow escribe el nft correcto según avanzas. Ni fichero en blanco ni sintaxis que memorizar.Start from an empty table and compose tables, chains and rules visually. eFeFlow writes correct nft as you go. No blank file, no syntax to memorise.

Simula un paqueteSimulate a packet

Descríbelo, míralo recorrer tus cadenas regla a regla por cada hook, y ve exactamente cuál lo decide: el mismo veredicto que produce tu ruleset exportado.Describe one, watch it walk your chains rule by rule through every hook, and see exactly which rule decides it — the same verdict your exported ruleset produces.

Encuentra reglas que nunca casanFind rules that can never match

Reglas eclipsadas, destinos DNAT en conflicto, cadenas que confían en conntrack pero nunca descartan invalid — deducido de tus reglas, nunca supuesto.Shadowed rules, conflicting DNAT targets, chains that trust conntrack but never drop invalid — derived from your rules, never guessed.

Importa lo que ya corresImport what you already run

Pega nft list ruleset y te demuestra el round-trip línea a línea antes de importar nada. El porcentaje no es una promesa, es una prueba.Paste nft list ruleset and it proves the round-trip line by line before importing a thing. The percentage isn't a promise, it's proof.

Aplica con redApply with a net

El rollback commit-confirm se arma en el firewall, así que la regla que te corta el acceso no puede impedirte deshacerla. No vuelvas a dejarte fuera.The commit-confirm rollback arms on the firewall, so the rule that cuts you off cannot stop you undoing it. Never lock yourself out again.

Exporta nft de verdadExport real nft source

No un formato propio. Lo que sale es exactamente lo que habrías escrito a mano, con cuatro formatos de exportación.Not a config format of its own. What comes out is exactly what you'd have written by hand — with four export formats.

¿Qué regla va a aceptar este paquete?Which rule is going to accept this packet?

Describe el paquete y míralo ir: hook a hook, cadena a cadena, regla a regla, hasta un veredicto.Describe the packet and watch it go — hook by hook, chain by chain, rule by rule, to a verdict.

El veredicto que ves es el que produce tu ruleset exportado: el simulador evalúa el mismo modelo del que se emite el código. Y donde no puede modelar algo, lo dice en vez de suponer en silencio.The verdict shown is the one your exported ruleset produces — the simulator evaluates the same model the code is emitted from. And where it can't model something, it says so instead of guessing quietly.

La regla que no sabías que estaba muertaThe rule you didn't know was dead

Se deduce por subsunción: la regla A eclipsa a la B cuando todo paquete que casa con B ya casa con A, y A va antes y es terminal.Worked out by subsumption: rule A shadows B when every packet matching B already matches A, and A comes first and is terminal.

Te enseña las dos reglas, dice qué paquetes se disputan y se ofrece a borrar la muerta. Donde no puede leer una regla entera, se niega a juzgarla en vez de llamar muerta a una viva.It shows you both rules, says which packets are in play, and offers to delete the dead one. Where it can't read a rule whole, it refuses to judge it rather than call a live rule dead.
  • Shadoweduna regla que ya decide otra anteriora rule an earlier one already decides
  • Conflictreglas DNAT solapadas con destinos distintosoverlapping DNAT rules with different targets
  • Dormantuna tabla entera cargada y sin aplicarsea whole table loaded and not running
  • Unbounded setun set que llena el tráfico sin size ni timeouta set filled by traffic with no size or timeout
  • Full setun set al 90% de su size, tras el cual el kernel rechaza en silencioa set at 90% of its size, past which the kernel silently refuses
  • Mergereglas que solo difieren en el puerto, sustituibles por un setrules differing only by port, replaceable by one set lookup
  • Unusedun set cargado que ninguna regla consumea set loaded that no rule consumes
  • Hardeninguna cadena que confía en conntrack y nunca descarta invalida chain that trusts conntrack but never drops invalid
  • Resilienceuna regla de log sin límite de tasaa log rule with no rate limit
  • Coldreglas que, según el kernel, no han casado nadarules the kernel says have matched nothing

Las mismas preguntas, sin ventanaThe same questions, without a window

Todo lo que decide algo vive en src/core/ y nunca toca el DOM — así el mismo motor entra en tu CI, antes de que un ruleset llegue a una máquina.Everything that decides anything lives in src/core/ and never touches the DOM — so the same engine drops into your CI, before a ruleset reaches a machine.

efeflow lint
$ efeflow lint fw.nft
fw.nft:103  error conflict   Conflicting DNAT targets for the same destination port
      ip saddr 198.51.100.0/24 tcp dport 8443 dnat to 10.20.0.31:443
fw.nft:71   warn  shadowed   Rule 11 is shadowed by rule 9 and can never match
      ip saddr 10.10.0.0/24 tcp dport 443 accept

  31 rules in 7 chains across 2 tables  ·  round-trip 75/75 = 100%
  1 error  2 warnings  3 hints

--json para lo que no es una persona, --fail-on error|warn|hint para mover el umbral. No sustituye a nft -c, y no lo pretende — donde el de verdad existe, se lo pasa.--json for what isn't a person, --fail-on error|warn|hint to move the threshold. It doesn't replace nft -c, and doesn't pretend to — where the real thing exists, it hands off to it.

Aplicar sin miedoApply without fear

La regla que te deja fuera no puede impedirte deshacerlaThe rule that locks you out can't stop you undoing it

Aplicar es la única operación que puede dejarte fuera de una máquina. Y tiene una forma cruel: la regla que te corta el acceso es la que te impide revertirla. Por eso la red de seguridad no vive en esta ventana; se arma en el propio firewall.Applying is the one operation that can lock you out of a machine — and it fails cruelly: the rule that cuts your access is the one that stops you reverting it. So the safety net doesn't live in this window; it arms on the firewall itself.

El diálogo de aplicar de eFeFlow: destino, qué reemplaza (solo mis tablas), rollback automático a los 60s, y validación con nft -c eFeFlow's apply dialog: target, what it replaces (only my tables), automatic 60s rollback, and nft -c validation
El diálogo real de aplicar. Las tres garantías, en una sola ventana: reemplaza solo tus tablas, se revierte solo a los 60s salvo que confirmes, y pasa nft -c antes de escribir un byte.The real apply dialog. All three guarantees in one window: replaces only your tables, rolls itself back after 60s unless you confirm, and runs nft -c before a byte is written.

Rollback en la máquinaRollback on the machine

Antes de escribir nada, eFeFlow copia allí el ruleset en marcha y lanza un temporizador desacoplado que lo restaura salvo que confirmes. Conservar lo aplicado es deliberado; perder la conexión, la ventana o el portátil lo revierte. Los routers lo llaman commit-confirm desde hace treinta años.Before writing anything, eFeFlow copies the running ruleset there and starts a detached timer that restores it unless you confirm. Keeping a change is deliberate; losing the connection, the window or the laptop reverts it. Routers have called it commit-confirm for thirty years.

Solo tus tablasOnly your tables

Reemplaza solo las tablas de tu proyecto, no flush ruleset — que en una máquina con Docker, libvirt, kubernetes o fail2ban borraría las suyas sin que nadie las reponga.It replaces only your project's tables, never flush ruleset — which on a box also running Docker, libvirt, kubernetes or fail2ban would wipe theirs with nothing to put them back.

nft -c primeronft -c first

Se ejecuta en la máquina antes de escribir un solo byte, y se niega por ti si algo no cuadra. Nada llega a producción si no lo pides tú.It runs on the machine before a single byte is written, and refuses on your behalf if something is off. Nothing reaches production unless you ask.

Beta, pero ya no sin kilometrajeBeta — but no longer with no mileage

3.0383,038
rulesets reales, cada uno vuelve significando lo mismo que entróreal rulesets, each comes back meaning what it went in as
99,8%99.8%
de 84.100 líneas vuelven byte a byteof 84,100 lines come back byte for byte
1.1031,103
comprobaciones automáticas sobre parser, analizador y simuladorautomated checks over parser, analyser and simulator

Se descargaron 4.337 rulesets de repositorios públicos; los 3.038 que nft acepta se cargaron en una instancia de netfilter vacía y se listaron de vuelta. El nuestro se cargó igual, y el kernel no distingue los dos listados. El corpus encontró 18 fallos reales, y prueba también los hallazgos: por cada regla que el analizador da por muerta, el simulador construye un paquete y la comprueba. Discreparon cero. Trata lo que genera como un borrador que revisas; valida con nft -c antes de aplicar.4,337 rulesets were fetched from public repos; the 3,038 nft accepts were loaded into an empty netfilter instance and listed back — ours loaded the same way, and the kernel can't tell the two listings apart. The corpus found 18 real defects, and it proves the findings too: for every rule the analyser calls dead, the simulator builds a packet and checks it. They disagreed zero times. Treat what it generates as a draft you review; validate with nft -c before applying.

DescargarDownload

Libre y de código abierto bajo licencia MIT. App de escritorio nativa para cada plataforma.Free and open source under the MIT licence. Native desktop app for every platform.

.deb — Debian / Ubuntu .rpm — Fedora / RHEL .AppImage — cualquier Linuxany Linux .dmg — macOS .msi — Windows
nft solo existe en Linux, así que diseñar, analizar, simular, importar y exportar va en las tres plataformas; leer y aplicar en una máquina local es Linux — y por SSH desde cualquiera, que para eso el firewall casi nunca es la máquina donde tienes el editor abierto.nft only exists on Linux, so design, analyse, simulate, import and export work on all three; reading and applying on a local machine is Linux — and over SSH from anywhere, because the firewall is rarely the machine with your editor open.