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.ardetrás de Cloudflare + TLS. El:8080del 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:
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 |