CreaRack-SL

Runbook · Endurecer firewall Hetzner: quitar whitelist de IPs personales y dejar admin solo por NetBird

Estado: propuesta, NO urgente. Ejecutar cuando baje el trabajo. Diseñado en s106 (03-06-2026). Toca acceso a PROD → consensuar y ejecutar con la consola de Hetzner verificada (lección footguns_ssh_lockout_s44).

Objetivo

Dejar de mantener la whitelist de IPs personales del staff en el firewall de Hetzner (hoy se autoriza un rango entero de la operadora de cada uno — allowlist amplio, frágil, cambia con la IP dinámica) y pasar la administración a solo NetBird, más estrecho y por identidad.

Aclaración técnica clave (no equivocarse)

Las IPs 100.x de NetBird NO se añaden al firewall de Hetzner: viajan cifradas dentro del túnel WireGuard; el firewall de borde nunca las ve. Doc oficial NetBird: “los peers no requieren puertos de entrada abiertos” (usan salida HTTPS 443 + UDP/STUN/TURN a Management/Signal/Relay). Por tanto:

  • El SSH por NetBird (ssh root@crearack-prod.netbird.cloud → 100.96.x) entra por la interfaz wt0, no por la regla :22 del firewall.
  • La acción correcta es ELIMINAR la regla :22 whitelisted, no “añadir IPs de NetBird”. Cerrar :22 no afecta a NetBird.

End-state objetivo

  • Firewall Hetzner (PROD y STAGE): solo :80 y :443 abiertos al mundo (SaaS público). Sin regla :22 (ni whitelist ni 0.0.0.0). Salida sin restringir (NetBird la necesita).
  • NetBird ACL: sustituir la política “Default” (todo-con-todo) por Source: users → Destination: servers, TCP one-way a los puertos necesarios (22 SSH · 8428 VictoriaMetrics · 5432 PostgreSQL · 3000 Dokploy), con posture check “NetBird última versión”.
  • (Opcional, recomendado) SSH embebido de NetBird: netbird up --allow-server-ssh → SSH gateado por identidad NetBird + posture, sin exponer :22 ni gestionar claves. Mantiene además el sshd del SO sobre wt0 como respaldo.
  • Salvavidas: Consola de Hetzner Cloud (VNC web, independiente de red/firewall).

⚠ Prerrequisitos OBLIGATORIOS (en este orden, lección s44)

  1. Verificar la consola de Hetzner DE VERDAD en cada servidor: es VNC web, la clave SSH no sirve → hace falta password de root puesta (o saber usar rescue mode). Probar el login por consola ANTES de quitar :22. Si no entras por consola, NO continuar.
  2. Confirmar SSH por NetBird funcionando para los 3 (Edu, Dani, Txell): ssh root@crearack-prod.netbird.cloud y ...staging....
  3. Regla 24 (acceso igualitario): si el salvavidas pasa a ser la consola de Hetzner y solo Edu la tiene, Dani/Txell se quedan sin red de seguridad si NetBird cae. Decidir: dar acceso a consola Hetzner a los 3, o asumir el riesgo explícitamente.
  4. No tocar :80/:443 (SaaS público) ni la salida.

Procedimiento (STAGE primero, luego PROD)

Firewall Hetzner = panel web o hcloud firewall. Cambio de acceso PROD → lo ejecuta Edu o Claude con Edu delante (feedback_consensuar_acciones_prod, feedback_prod_changes).

Fase 0 — preparar (sin cortar nada)

  1. Verificar consola Hetzner (prereq 1) en STAGE y PROD.
  2. En el panel NetBird: crear la ACL users → servers (TCP 22/8428/5432/3000, one-way) + posture check “última versión”. Dejar la “Default” activa todavía (no romper conectividad aún).
  3. (Opcional) habilitar SSH embebido NetBird en STAGE: netbird down && netbird up --allow-server-ssh y probar netbird ssh root@crearack-staging.

Fase 1 — STAGE 4. Auditar la regla actual: hcloud firewall describe <fw-stage> (o panel) — anotar la regla :22 con el rango de la operadora. 5. Quitar la regla :22 del firewall STAGE (dejar solo :80/:443). 6. Validar: los 3 hacen ssh root@crearack-staging.netbird.cloud (debe ir) · ssh root@178.104.131.173 (debe fallar/timeout — ya no hay :22 público) · el sitio STAGE responde en :443 · Dokploy/VM por NetBird OK. Confirmar consola Hetzner STAGE. 7. Desactivar la política “Default” de NetBird y dejar solo la ACL acotada. Re-validar acceso.

Fase 2 — PROD (solo si STAGE quedó perfecto, 24-48h después) 8. Repetir pasos 4-7 en PROD (<fw-prod>, crearack-prod.netbird.cloud, IP pública 116.203.31.166). 9. Validación final: SaaS público OK en crearack.com:443; admin solo por NetBird; :22 público muerto; consola Hetzner confirmada.

Rollback

  • Re-añadir la regla :22 (temporalmente a la IP actual del que recupera, o 0.0.0.0 solo durante la emergencia y cerrar después) vía consola Hetzner o hcloud firewall add-rule.
  • Reactivar la política “Default” de NetBird si la ACL acotada dio problemas.
  • La consola Hetzner permite todo lo anterior aunque NetBird Y :22 estén caídos.

Documentación a actualizar al ejecutar (Regla 24)

  • claude-method/guides/NETBIRD_SETUP.md línea ~118 dice hoy “No cierres el :22 whitelisted — mantener” → cambiar a la nueva política (admin solo NetBird + consola Hetzner como salvavidas).
  • CLAUDE.md §4 (CreaRack-Pro): la descripción del salvavidas pasa de “SSH :22 whitelist” a “Consola de Hetzner Cloud”.
  • Versión coloquial si aplica (Regla 27).

Por qué es mejor (resumen)

Un rango CGNAT de operadora = miles de IPs ajenas autorizadas. Cambiarlo por “túnel NetBird con ACL por identidad + posture check” reduce drásticamente la superficie y elimina el mantenimiento de IPs dinámicas. NetBird no necesita ningún puerto de entrada, así que no se añade superficie nueva.

Véase también

  • [[crearack-tech—reports—security-audit-04-04-2026]]
  • [[crearack-tech—guides—production-deployment]]