Saltar a contenido

Seguridad

Red ZeroTier Infra-mesh — el perímetro principal

Todo el tráfico de monitoreo (métricas, logs, OTLP) viaja dentro de la red ZeroTier dedicada Infra-mesh, separada de otras redes. Los agentes y el LXC central se conectan por su IP de Infra-mesh, nunca por IP pública.

Flow rules

Infra-mesh tiene flow rules propias configuradas en el panel de ZeroTier que controlan qué tráfico se permite entre nodos (segmentan el plano de datos del monitoreo). Al sumar un servidor, revisá que las reglas le permitan llegar al central en el :4317.

graph LR
    subgraph Internet ["Internet (no usamos esto para monitoreo)"]
        style Internet fill:#ffcccc,stroke:#cc0000
        X[❌ tráfico OTLP público]
    end

    subgraph ZT ["ZeroTier Infra-mesh (cifrada, privada)"]
        style ZT fill:#ccffcc,stroke:#009900
        A1[Servidor remoto 1] -->|OTLP :4317| C[Central]
        A2[Servidor remoto 2] -->|OTLP :4317| C
        A3[Servidor remoto N] -->|OTLP :4317| C
    end

Beneficios de usar ZeroTier: - El puerto 4317 (OTLP) del central no necesita estar abierto a internet - La comunicación está cifrada extremo a extremo por ZeroTier - Para agregar un servidor nuevo al monitoreo, primero tiene que unirse a la red ZeroTier

Dos planos distintos

  • Datos (OTLP de los agentes → central): viajan solo por ZeroTier, nunca por internet público.
  • UI / API (personas → SigNoz): se accede público en https://signoz.histrix.com.ar detrás de Cloudflare + TLS. El :8080 del central queda restringido a ZeroTier; el acceso externo lo termina Cloudflare.

Configurar ZeroTier en un servidor nuevo

# Instalar ZeroTier
curl -s https://install.zerotier.com | sudo bash

# Unirse a Infra-mesh (pedir el NETWORK_ID de Infra-mesh a Pablo)
sudo zerotier-cli join <NETWORK_ID>

# Ver la IP asignada
zerotier-cli listnetworks

Después de unirse, el servidor aparece en el panel de ZeroTier y un admin tiene que autorizar el nodo. Una vez autorizado, ya tiene conectividad con el central y se puede instalar el agente.

Firewall en el servidor central

El puerto OTLP (4317) solo tiene que ser accesible desde la interfaz ZeroTier (zt0 o similar), no desde internet:

# Ver el nombre de la interfaz ZeroTier
ip link show | grep zt

# Permitir OTLP solo desde la red ZeroTier (ajustar la IP de red según la configuración)
ufw allow in on zt0 to any port 4317 proto tcp

# La UI (8080) puede limitarse a ZeroTier; el acceso público va por Cloudflare/TLS aparte
ufw allow in on zt0 to any port 8080 proto tcp

# Denegar 4317 desde otras interfaces
ufw deny 4317/tcp

Bindings de los agentes

Los servicios del agente escuchan solo en localhost — no exponen puertos al exterior:

Servicio Puerto Binding
health_check 13133 localhost
métricas internas 8888 (o 8889) localhost
node_exporter 9100 0.0.0.0 (solo lo consume otelcol localmente)

node_exporter en 0.0.0.0

node_exporter escucha en todas las interfaces pero solo es consumido internamente por otelcol-contrib via localhost:9100. Si el servidor tiene firewall, bloquear el 9100 hacia el exterior es una buena práctica:

ufw deny 9100/tcp

Arreglar bindings incorrectos en agentes ya instalados

Si un agente fue instalado con 0.0.0.0 en el health_check o en el puerto de métricas internas, existe un script para corregirlo en masa sin ir servidor por servidor. Ver Mantenimiento → Corregir binding 0.0.0.0.

Resumen de puertos expuestos

Servidor central

Puerto Protocolo Expuesto a Necesario
8080 TCP ZeroTier (o VPN) UI + API de SigNoz
4317 TCP ZeroTier únicamente Agentes OTLP gRPC
4318 TCP ZeroTier (opcional) Agentes OTLP HTTP
9000 TCP localhost ClickHouse TCP (interno)
8123 TCP localhost ClickHouse HTTP (admin)
2181 TCP localhost Zookeeper (interno)

Servidores remotos (agentes)

Puerto Protocolo Expuesto a Necesario
9100 TCP localhost node_exporter (consumido por otelcol)
13133 TCP localhost health_check
8888/8889 TCP localhost métricas internas del collector