112 lines
4.1 KiB
Markdown
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.
|