04 segmentacion
Principio¶
SmallCountry separa los dominios funcionales en redes lógicamente aisladas definidas como código en OpenTofu sobre Proxmox VE.
La finca en Garganta la Olla opera con dispositivos de campo (ESP32 (microcontrolador WiFi para sensores), Cerbo GX con Node-RED, Mosquitto y equipo Victron), mientras que la casa en Chapinería alberga el servidor principal y un Node-RED doméstico independiente.
Ambas ubicaciones se conectan a través de la malla NetBird, pero el tráfico entre dominios está restringido por una política de Default Deny en el firewall de Proxmox VE.
Solo se habilitan comunicaciones concretas y justificadas mediante reglas explícitas.
Un atacante que comprometa un servicio de usuario, un dispositivo IoT o incluso la red doméstica no podrá alcanzar la infraestructura crítica ni los dispositivos de campo de la finca.
Topología real del sistema¶
Finca (Garganta la Olla)¶
| Componente | Función |
|---|---|
| ESP32 | Sensores y actuadores de campo (humedad, temperatura, riego). Comunicación local con el Cerbo GX. |
| Cerbo GX | Controlador Victron. Alberga Node-RED y Mosquitto para la gestión en tiempo real de la finca. |
| Equipo Victron | Inversores, cargadores, baterías, MPPT. El Cerbo GX centraliza sus datos. |
La finca opera la Capa 1 (Edge) y la Capa 2 (Tiempo real) de forma autónoma.
Si la conexión con la casa se pierde, la finca sigue funcionando con sus umbrales preprogramados.
La comunicación con el exterior solo se permite a través del túnel NetBird hacia el servidor principal.
Casa (Chapinería)¶
| Componente | Función |
|---|---|
| Servidor principal (Ra (servidor principal de SmallCountry)) | Proxmox VE con todos los LXC (contenedor ligero de Proxmox) de infraestructura, servicios de usuario y orquestación lógica. |
| Node-RED doméstico** | Automatización de la casa, independiente del Node-RED de la finca. Se comunica con el servidor principal a través de la red interna. |
Dentro de Proxmox VE, el servidor principal aplica la segmentación por Tiers descrita más abajo.
El Node-RED doméstico reside en la red de servicios de usuario (vmbr2) y no tiene acceso directo a la red de gestión (vmbr1) ni a la red de la finca (vmbr3).
Comunicación entre ubicaciones¶
| Origen | Destino | Canal | Propósito |
|---|---|---|---|
| Cerbo GX (finca) | Servidor (casa) | NetBird | Envío de métricas Victron y telemetría de sensores |
| Servidor (casa) | Cerbo GX (finca) | NetBird | Actualizaciones OTA (actualización de firmware por WiFi) de firmware ESP32 |
| Node-RED doméstico | Servidor (casa) | Red interna (vmbr2) | Envío de métricas de la casa, recepción de órdenes |
Regla fundamental: La finca nunca inicia conexiones hacia la red doméstica.
Solo el servidor principal puede iniciar comunicaciones hacia la finca, y siempre a través del túnel NetBird.
Segmentación interna de Proxmox (Tiers y Default Deny)¶
Dentro del servidor principal, OpenTofu define tres bridges con políticas de aislamiento estrictas.
La segmentación se alinea con los Tiers que ya conocemos y está diseñada para contener ataques:
| Bridge | Tier | Propósito | Ejemplos |
|---|---|---|---|
| vmbr1 | Tier A y 2 | Gestión, infraestructura crítica y observabilidad. | Forgejo, Authentik, NetBird, Grafana, Victoria Metrics |
| vmbr2 | Tier B y 3 | Servicios de usuario, medios, oficina y Node-RED doméstico. | Nextcloud, Immich, Jellyfin, Homepage, Node-RED casa |
| vmbr3 | Tier B y 3 | IoT, finca y datos geoespaciales. Recibe telemetría de la finca. | farmOS, Mosquitto, PostGIS, QGIS Server |
Política de Default Deny:
Por defecto, ningún tráfico está permitido entre bridges.
Si un atacante compromete Jellyfin (vmbr2), no puede alcanzar Authentik (vmbr1) ni farmOS (vmbr3).
Solo las reglas explícitas definidas en OpenTofu habilitan comunicaciones puntuales.
Reglas de firewall explícitas¶
| Origen | Destino | Protocolo / Puerto | Justificación |
|---|---|---|---|
| vmbr2 (Homepage) | vmbr1 (Authentik) | TCP/443 | Verificación de identidad para el panel de inicio |
| vmbr1 (Caddy) | vmbr2 (Nextcloud) | TCP/443 | Proxy inverso tras autenticación |
| vmbr1 (Forgejo Actions) | vmbr2, vmbr3 | TCP/22 | Despliegue automatizado vía Ansible |
| vmbr3 (Mosquitto) | vmbr1 (Victoria Metrics) | TCP/8428 | Métricas de sensores y telemetría de la finca |
| vmbr1 (Node-RED orquestación) | vmbr3 (Mosquitto) | TCP/1883 | Publicación de órdenes hacia la finca |
Cualquier otra comunicación está bloqueada por defecto y requiere una regla explícita con justificación documentada en el repositorio de Forgejo.
Verificación y visualización¶
- Tests de conectividad automatizados: Un script programado verifica periódicamente que las comunicaciones permitidas funcionan y que las bloqueadas no son posibles.
- Diagrama generado desde código: Las reglas definidas en OpenTofu se convierten automáticamente en un diagrama actualizado de la red.
- Modo debug temporal: Ante un problema de conectividad, se puede activar un registro completo del tráfico entre bridges durante un tiempo limitado.
Stack necesario¶
- Proxmox VE – Bridges Linux, VLANs y firewall integrado.
- OpenTofu – Definición declarativa de redes, bridges y reglas de firewall.
- NetBird – Túnel seguro entre la casa y la finca.
- Forgejo – Repositorio donde se versiona el código de la infraestructura de red.
- Script de verificación de conectividad – Automatiza las pruebas de comunicación entre servicios.
Relaciones con otros principios¶
- 3. Aislamiento del núcleo y perímetro único de acceso: la segmentación es la segunda capa de defensa. Si NetBird se viese comprometido, el firewall interno bloquearía el movimiento lateral.
- 5. Resiliencia física delegada al hardware: la finca sigue operando aunque la conexión con la casa se pierda. El Cerbo GX y los ESP32 mantienen su lógica local.
- 6. Arquitectura por capas funcionales independientes: la segmentación refuerza la independencia de las capas. La Capa 1 (finca) y la Capa 2 (Node-RED) no dependen de la Capa 3 (n8n) para funcionar.
- 11. Contención de recursos y degradación planificada: en caso de saturación del servidor, los servicios se agrupan por bridge para su apagado ordenado.
Diagrama de segmentación y flujo de datos¶
´´´ mermade graph TD subgraph Finca [Finca - Garganta la Olla] direction TB ESP[ESP32 - sensores/actuadores] Cerbo[Cerbo GX] NR_Finca[Node-RED - finca] MQTT_Finca[Mosquitto - finca] Vic[Equipo Victron] ESP --> Cerbo Cerbo --> NR_Finca Cerbo --> MQTT_Finca Vic --> Cerbo end
subgraph Casa [Casa - Chapinería]
direction TB
NR_Casa[Node-RED - doméstico]
subgraph Servidor [Servidor Ra - Proxmox VE]
direction TB
subgraph vmbr1 [Gestión - vmbr1]
Auth[Authentik]
Forgejo[Forgejo]
NetBird[NetBird]
end
subgraph vmbr2 [Servicios - vmbr2]
Next[Nextcloud]
Jelly[Jellyfin]
Home[Homepage]
NR_Casa_Srv[Node-RED casa]
end
subgraph vmbr3 [IoT/Finca - vmbr3]
Farm[farmOS]
MQTT_Srv[Mosquitto]
PostGIS[PostGIS]
end
end
end
%% Comunicación casa-finca
MQTT_Finca <-->|NetBird VPN (red privada virtual)| NetBird
NetBird <-->|NetBird VPN (red privada virtual)| MQTT_Srv
%% Comunicación Node-RED doméstico
NR_Casa -->|Red interna| NR_Casa_Srv
%% Reglas explícitas dentro del servidor
Home -->|OIDC (protocolo de autenticación OpenID Connect) Auth| Auth
Auth -->|Forward Auth| Home
Forgejo -->|Deploy SSH| Next
Forgejo -->|Deploy SSH| Jelly
MQTT_Srv -->|Métricas| vmbr1
%% Default Deny
vmbr2 -.-|Bloqueado| vmbr1
vmbr3 -.-|Bloqueado| vmbr2
style Finca fill:#ffe082,stroke:#f57f17,color:#000
style Casa fill:#e1bee7,stroke:#8e24aa,color:#000
style vmbr1 fill:#90caf9,stroke:#1565c0,color:#000
style vmbr2 fill:#a5d6a7,stroke:#2e7d32,color:#000
style vmbr3 fill:#ffcc80,stroke:#e65100,color:#000
```
← Principio 3: Aislamiento del núcleo | Principio 5: Resiliencia física →