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 interfazwt0, no por la regla:22del firewall. - La acción correcta es ELIMINAR la regla
:22whitelisted, no “añadir IPs de NetBird”. Cerrar:22no afecta a NetBird.
End-state objetivo
- Firewall Hetzner (PROD y STAGE): solo
:80y:443abiertos 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 (22SSH ·8428VictoriaMetrics ·5432PostgreSQL ·3000Dokploy), 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:22ni gestionar claves. Mantiene además elsshddel SO sobrewt0como respaldo. - Salvavidas: Consola de Hetzner Cloud (VNC web, independiente de red/firewall).
⚠ Prerrequisitos OBLIGATORIOS (en este orden, lección s44)
- 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. - Confirmar SSH por NetBird funcionando para los 3 (Edu, Dani, Txell):
ssh root@crearack-prod.netbird.cloudy...staging.... - 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.
- 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)
- Verificar consola Hetzner (prereq 1) en STAGE y PROD.
- 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). - (Opcional) habilitar SSH embebido NetBird en STAGE:
netbird down && netbird up --allow-server-sshy probarnetbird 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 ohcloud 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
:22estén caídos.
Documentación a actualizar al ejecutar (Regla 24)
claude-method/guides/NETBIRD_SETUP.mdlínea ~118 dice hoy “No cierres el:22whitelisted — 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:22whitelist” 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]]