Saltar a contenido

4. Segmentación de redes

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

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