la caja arrancó con nf_tables — y la Semilla la levantó ENTERA sola
`nft list ruleset` contesta vacío y sin error: nf_tables funciona por primera vez en una máquina
takana. Comprobado con el mecanismo que reemplaza a fail2ban y no con una regla de adorno: un set
`flags dynamic` con `add @ban4 { ip saddr timeout 10s limit rate over 5/minute } drop`, aceptado por
el kernel y releído tal cual.
LO QUE EL REINICIO PROBÓ DE PASO, y vale más que el kernel: la Semilla levantó los OCHO entes sola,
todos con ↻ 0 — incluidos los DOS enjaulados en qorpa, que arrancan desde el genesis con su
newuidmap, su overlay y su harkaq igual que un binario nativo. Todo lo que se editó en
/ente/seed.card.json a lo largo del día era hasta ahora una declaración SIN PROBAR: un reinicio es
el único examen que toma. Desde fuera, al minuto: siete dominios en 200, el proxy en 407 y
`git ls-remote` por SSH:2345 devolviendo el commit. Cero intervención.
⚠ `reboot` NO reinicia una caja con arje-zero: le pide a PID 1 que lo haga y arje-zero no implementa
ese protocolo — el comando vuelve, no dice nada, y la máquina sigue arriba (`up 4 days` después de
«reiniciar»). Funciona `reboot -f`, que llama a reboot(2) saltándose al init. Falta la pieza: un
init que gobierna producción tiene que atender un apagado ordenado.
🧨 Y CASI REINICIO EL HUB POR UN BACKTICK: el aviso decía «no atiende el `reboot` normal» dentro de
comillas DOBLES, y la shell ejecutó lo de entre backticks — `reboot`, en gioser. No pasó nada porque
la sesión no es root y OpenRC contestó «you must be root». Es la TERCERA vez en el día que un
backtick dentro de un texto se ejecuta; las otras dos sólo se comieron un comentario. La regla deja
de ser de estilo: nunca un backtick dentro de comillas dobles en una shell.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1778,6 +1778,58 @@ ofrecer contraseña ✅, `:2345` igual ✅, y el `git ls-remote` por SSH sigue f
|
||||
Decidir «fail2ban muere porque tenemos algo mejor» es correcto **y** deja un hueco abierto hasta que
|
||||
ese algo mejor pueda ejecutarse. Entre la decisión y la capacidad hay un kernel de por medio.
|
||||
|
||||
### 6.31 ✅ La caja arrancó con `nf_tables` — y el init la levantó ENTERA sola *(2026-09-15)*
|
||||
|
||||
$ nft list ruleset
|
||||
$ ← sin error: vacío, que es lo correcto en una caja sin reglas
|
||||
|
||||
El kernel `b3:63fdd57c…` bootea, y con él **`nft` funciona por primera vez en una máquina takana**.
|
||||
Comprobado con el mecanismo exacto que reemplaza a fail2ban, no con una regla de adorno: un
|
||||
`set ... flags dynamic; timeout 10s` con `add @ban4 { ip saddr timeout 10s limit rate over 5/minute }
|
||||
drop` — aceptado por el kernel (`rc=0`) y releído tal cual. Eso es el ban por IP **dentro del
|
||||
kernel**, sin daemon.
|
||||
|
||||
#### Lo que el reinicio probó de paso, y vale más que el kernel
|
||||
|
||||
**La Semilla levantó los OCHO entes sola, todos con `↻ 0`:** `sshd`, `gitea`, `caddy`, `squid`,
|
||||
`crond`, `chronyd`, `sergioh-api` y `gioser-php` — o sea los dos servicios enjaulados en `qorpa`
|
||||
(con su `newuidmap`, su overlay y su `harkaq`) **arrancan desde el genesis igual que un binario
|
||||
nativo**. Todo lo que se fue editando en `/ente/seed.card.json` a lo largo del día era, hasta este
|
||||
momento, una declaración sin probar: un reinicio es el único examen que toma.
|
||||
|
||||
Desde fuera, al minuto: los siete dominios en **200**, el proxy en **407** y `git ls-remote` por
|
||||
SSH:2345 devolviendo el commit. Cero intervención.
|
||||
|
||||
#### ⚠ `reboot` NO reinicia una caja con arje-zero
|
||||
|
||||
`reboot` de busybox le pide a PID 1 que lo haga, y **arje-zero no implementa ese protocolo**: el
|
||||
comando vuelve, no dice nada, y la máquina sigue arriba (`up 4 days` después de «reiniciar»). Lo que
|
||||
sí funciona es **`reboot -f`**, que llama a `reboot(2)` directo saltándose al init. Con `sync` antes,
|
||||
claro: el corte es duro por definición.
|
||||
|
||||
⇒ **Y falta la pieza**: un init que gobierna un servidor de producción tiene que atender un apagado
|
||||
ordenado. Hoy la única vía es el corte duro, que ya costó el `write_atomic` no durable del §6.13.
|
||||
|
||||
#### 🧨 Casi reinicio el HUB por un backtick en un `echo`
|
||||
|
||||
Escribiendo el aviso del reinicio, el mensaje decía ``… no atiende el `reboot` normal …`` dentro de
|
||||
comillas DOBLES. La shell ejecutó lo que había entre backticks: **`reboot`, en gioser**. No pasó nada
|
||||
por una razón que no es mérito de nadie —la sesión no es root y OpenRC contestó «you must be root»—
|
||||
y el hub lleva 11 días arriba, con la granja y el cron encima.
|
||||
|
||||
Es la **tercera vez en el día** que un backtick dentro de un texto se ejecuta
|
||||
([[heredoc-sin-comillas-ejecuta-comentarios]]), y las dos anteriores sólo se comieron un comentario.
|
||||
La regla deja de ser de estilo: **nunca un backtick dentro de comillas dobles en una shell** —
|
||||
comillas simples, o `$(printf '%s' …)`, o directamente no poner el acento grave en el texto.
|
||||
|
||||
#### Lo que queda para cerrar el frente del cortafuegos
|
||||
|
||||
El kernel ya no estorba; falta **la política**: `PoliticaEntrada` (.ron) → `generate-input` →
|
||||
`apply-input` del cortafuegos de tawasuyu, con los puertos reales de la caja (`22022`, `2345`, `80`,
|
||||
`443`, `1137`). ⚠ Y hay que aplicarla con **interruptor de hombre muerto** (aplicar, esperar, y
|
||||
`flush` automático si nadie confirma): una regla mal puesta en una caja **sin consola serie** deja
|
||||
la única salida en `hcloud server enable-rescue`.
|
||||
|
||||
## 7. Reusar los scripts que ya existen, y no escribir de nuevo
|
||||
|
||||
Pedido explícito del usuario. El inventario de lo que ya hace el trabajo:
|
||||
|
||||
Reference in New Issue
Block a user