Files

112 lines
4.1 KiB
Markdown

# 📦 Zabbix Template: Port Monitoring LLD
Template para monitorizar de forma dinámica una lista de puertos TCP definida por macro de host. Usa Low Level Discovery (LLD) para crear automáticamente ítems y triggers por cada puerto configurado.
## 🚀 Características
- **Dinámico**: agrega o elimina puertos editando la macro `{$PORTS}` del host.
- **Multiplataforma**: incluye UserParameters para Linux y Windows.
- **Eficiente**: el discovery corre cada 1 hora por defecto; los ítems de escucha se consultan cada 30 segundos.
- **Seguro ante entradas inválidas**: los UserParameters solo descubren puertos numéricos entre `1` y `65535`.
- **Alertas**: dispara una alerta de severidad alta si un puerto deja de escuchar durante más de 2 minutos.
## ✅ Requisitos
| Sistema | Requisito |
| ------- | ----------------------------------------------------------------------- |
| Zabbix | Zabbix 7.0 o superior |
| Linux | Zabbix Agent y `python3` |
| Windows | Zabbix Agent 2 y PowerShell |
| Red | El servidor/proxy Zabbix debe poder consultar checks pasivos del agente |
## ✅ Compatibilidad probada
Probado en entorno controlado con **Zabbix 7.0.26** en hosts **Windows** y **Linux**.
## 🛠️ 1. Configuración en los hosts
Para que el discovery funcione, cada agente necesita el UserParameter `port.discovery[*]`.
### Windows — Zabbix Agent 2
1. Crea o edita este archivo:
```text
C:\Program Files\Zabbix Agent 2\zabbix_agent2.d\plugins.d\ports.conf
```
2. Copiá el contenido de [`ports_win.conf`](ports_win.conf) en ese archivo.
3. Reiniciá el servicio **Zabbix Agent 2**.
### Linux — Zabbix Agent
1. Crea o edita este archivo:
```text
/etc/zabbix/zabbix_agentd.d/ports.conf
```
2. Copia el contenido de [`ports_linux.conf`](ports_linux.conf) en ese archivo.
3. Reiniciá el servicio:
```bash
sudo systemctl restart zabbix-agent
```
## 📥 2. Importación del template
1. Descarga o clona este repositorio.
2. En Zabbix, entra en **Data collection > Templates**.
3. Haz clic en **Import**.
4. Selecciona [`port_monitoring_template.yaml`](port_monitoring_template.yaml).
5. Vincula el template **Port Monitoring LLD** a tus hosts.
## ⚙️ 3. Configuración de macros
Una vez vinculado el template al host, definí o heredá esta macro:
| Macro | Valor de ejemplo | Descripción |
| ---------- | ------------------- | --------------------------------------------------------------------------------------------- |
| `{$PORTS}` | `21,22,80,443,3389` | Lista de puertos separados por coma. Solo se descubren valores numéricos entre `1` y `65535`. |
> Los valores inválidos, vacíos o fuera de rango se ignoran durante el discovery.
## 🔍 4. Verificación
Prueba que el agente responda con el JSON LLD esperado.
### Windows PowerShell
Desde el directorio donde está `zabbix_agent2.exe`:
```powershell
.\zabbix_agent2.exe -t 'port.discovery["21,22,80,443,3389"]'
```
### Linux
```bash
zabbix_get -s 127.0.0.1 -k 'port.discovery["21,22,80,443,3389"]'
```
Resultado esperado:
```json
{"data":[{"{#PORT}":"21"},{"{#PORT}":"22"},{"{#PORT}":"80"},{"{#PORT}":"443"},{"{#PORT}":"3389"}]}
```
## 📊 Estructura del template
| Componente | Valor |
| ----------------- | ------------------------------------- |
| Discovery rule | `Port discovery` |
| Discovery key | `port.discovery["{$PORTS}"]` |
| Item prototype | `Port {#PORT} listening` |
| Item key | `net.tcp.listen[{#PORT}]` |
| Trigger prototype | `Puerto {#PORT} caído en {HOST.NAME}` |
| Severidad | High |
> Si agregás un puerto nuevo a la macro, Zabbix lo detectará en el siguiente ciclo de discovery, por defecto cada 1 hora. También puedes forzarlo desde la interfaz con **Execute now** en la regla de discovery del host.