Saltar a contenido

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

  1. Tests de conectividad automatizados: Un script programado verifica periódicamente que las comunicaciones permitidas funcionan y que las bloqueadas no son posibles.
  2. Diagrama generado desde código: Las reglas definidas en OpenTofu se convierten automáticamente en un diagrama actualizado de la red.
  3. 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

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


Secciones relacionadas