# 📦 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.