feat: Introduce a comprehensive Zabbix Gold Standard template for pfSense hybrid monitoring, including SNMP and detailed OpenVPN user metrics and scripts.

This commit is contained in:
João Pedro Toledo Goncalves 2026-01-05 20:09:43 -03:00
parent b4a56ed604
commit be2867ecd6
7 changed files with 369 additions and 24 deletions

View File

@ -84,3 +84,28 @@ TROUBLESHOOTING
- Se zabbix_agentd -t retornar "Permission denied": Verifique se o usuário zabbix está no grupo wheel.
- Se retornar TIMEOUT: Verifique se você está usando o script DE LEITURA (openvpn-discovery.sh) no UserParameter e não o coletor.
- Se retornar VAZIO { "data": [] }: Execute o coletor manualmente e veja se gera erros. Verifique se existem arquivos em /var/etc/openvpn/server*/sock
PASSO 6: INSTALAR O ACCESS TRACKER (REPLAY DE ACESSOS) [OPCIONAL]
------------------------------------------------------------------
O Access Tracker é um script adicional que correlaciona usuários VPN com a tabela de estados do firewall,
permitindo visualizar quais destinos cada usuário acessou (replay de sessão).
1. Copie o arquivo 'files/openvpn-access-tracker.sh' para '/opt/zabbix/':
chmod +x /opt/zabbix/openvpn-access-tracker.sh
2. Adicione ao cron (executa a cada minuto):
echo '* * * * * root /opt/zabbix/openvpn-access-tracker.sh' >> /etc/crontab
3. O script gerará logs em /var/log/openvpn_user_activity.log
Formato: TIMESTAMP|USER|VIRTUAL_IP|DESTINO:PORTA|PROTOCOLO|ESTADO
Nota: Este script requer que o openvpn-collector.sh esteja rodando (usa o cache de métricas).
NOVAS MÉTRICAS DISPONÍVEIS (v7)
-------------------------------
- openvpn.user.time_online[USER]: Tempo online em segundos
- openvpn.user.bytes_recv.cached[USER]: Bytes recebidos (cache)
- openvpn.user.bytes_sent.cached[USER]: Bytes enviados (cache)
- openvpn.access.destinations[USER]: Lista de destinos acessados
- openvpn.access.log.tail[N]: Últimas N linhas do log de replay

View File

@ -91,3 +91,44 @@ zabbix_agentd -t openvpn.discovery
# Saída esperada (imediata):
# [t|{"data":[{"{#VPN.USER}":"joao.silva"...}]}]
```
---
## Passo 6: Instalar Access Tracker (Replay de Acessos) [OPCIONAL]
O **Access Tracker** correlaciona usuários VPN com a tabela de estados do firewall (`pfctl`), gerando um log de atividade para replay.
```bash
# Copie e dê permissão:
chmod +x /opt/zabbix/openvpn-access-tracker.sh
# Adicione ao cron:
echo '* * * * * root /opt/zabbix/openvpn-access-tracker.sh' >> /etc/crontab
```
**Log gerado:** `/var/log/openvpn_user_activity.log`
**Formato:** `TIMESTAMP|USER|VIRTUAL_IP|DESTINO:PORTA|PROTOCOLO|ESTADO`
---
## Novas Métricas Disponíveis (v7)
| Chave | Descrição |
|-------|-----------|
| `openvpn.user.time_online[USER]` | Tempo online em segundos |
| `openvpn.user.bytes_recv.cached[USER]` | Bytes recebidos (via cache) |
| `openvpn.user.bytes_sent.cached[USER]` | Bytes enviados (via cache) |
| `openvpn.access.destinations[USER]` | Lista de destinos acessados |
| `openvpn.access.log.tail[N]` | Últimas N linhas do log de replay |
| `openvpn.access.count[USER]` | Contagem de conexões do usuário |
---
## Retenção de Dados no Zabbix
| Tipo de Dado | Histórico | Tendência |
|--------------|-----------|-----------|
| Logs de Replay (texto) | 30 dias | N/A |
| Métricas (bytes, tempo) | 30 dias | 365 dias |
| Eventos/Alertas | 365 dias | N/A |

View File

@ -0,0 +1,68 @@
#!/bin/sh
# OpenVPN Access Tracker - Sampled Replay (Arthur's Gold Standard v1)
# Correlaciona usuários VPN com a tabela de estados do Packet Filter
# Compatível com: pfSense 2.x / FreeBSD
#
# Instalação:
# 1. Copie para /opt/zabbix/openvpn-access-tracker.sh
# 2. chmod +x /opt/zabbix/openvpn-access-tracker.sh
# 3. Adicione ao cron: */1 * * * * /opt/zabbix/openvpn-access-tracker.sh
#
# Output: /var/log/openvpn_user_activity.log
# Format: TIMESTAMP|USER|REAL_IP|DST_IP:PORT|PROTOCOL
METRICS_FILE="/tmp/openvpn_metrics.json"
LOG_FILE="/var/log/openvpn_user_activity.log"
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
# Verifica se temos dados de VPN
if [ ! -f "$METRICS_FILE" ]; then
exit 0
fi
# Extrai lista de usuários e seus IPs virtuais
# Formato esperado: "user": { ... "virtual_ip": "10.0.8.5" ... }
user_ips=$(cat "$METRICS_FILE" | sed 's/},{/}\n{/g' | grep -oE '"[^"]+":{"bytes_recv"[^}]+' | \
sed 's/"//g' | awk -F: '{user=$1; for(i=2;i<=NF;i++) if($i ~ /virtual_ip/) {getline; print user":"$2}}' 2>/dev/null)
# Alternativa mais robusta: usar jq se disponível, senão parse manual
if command -v jq >/dev/null 2>&1; then
# jq disponível - parse limpo
user_list=$(jq -r 'to_entries[] | "\(.key):\(.value.virtual_ip)"' "$METRICS_FILE" 2>/dev/null)
else
# Parse manual simplificado
user_list=$(cat "$METRICS_FILE" | tr ',' '\n' | tr '{' '\n' | tr '}' '\n' | \
grep -E '^"[a-zA-Z0-9._-]+"|virtual_ip' | paste - - 2>/dev/null | \
sed 's/"//g;s/virtual_ip://g' | awk '{print $1":"$2}')
fi
# Se não temos usuários, sai
[ -z "$user_list" ] && exit 0
# Captura tabela de estados
state_table=$(pfctl -ss 2>/dev/null)
[ -z "$state_table" ] && exit 0
# Para cada usuário VPN, busca conexões na state table
echo "$user_list" | while IFS=: read -r user vip; do
[ -z "$user" ] || [ -z "$vip" ] && continue
# Busca estados onde o IP virtual é a origem
# Formato pfctl -ss: all tcp 10.0.8.5:54321 -> 192.168.1.100:443 ESTABLISHED:ESTABLISHED
echo "$state_table" | grep " $vip:" | while read -r state_line; do
# Extrai protocolo, destino
proto=$(echo "$state_line" | awk '{print $2}')
dst=$(echo "$state_line" | awk '{print $4}' | sed 's/->//g')
state=$(echo "$state_line" | awk '{print $NF}')
[ -z "$dst" ] && continue
# Loga a atividade
printf "%s|%s|%s|%s|%s|%s\n" "$TIMESTAMP" "$user" "$vip" "$dst" "$proto" "$state" >> "$LOG_FILE"
done
done
# Rotação simples: mantém só últimas 50000 linhas (~5MB)
if [ -f "$LOG_FILE" ] && [ $(wc -l < "$LOG_FILE") -gt 50000 ]; then
tail -40000 "$LOG_FILE" > "$LOG_FILE.tmp" && mv "$LOG_FILE.tmp" "$LOG_FILE"
fi

View File

@ -1,5 +1,5 @@
#!/bin/sh
# OpenVPN Discovery - COLETOR (Arthur's Gold Standard v6-CACHE)
# OpenVPN Discovery - COLETOR (Arthur's Gold Standard v7-METRICS)
# Este script roda via CRON e grava o resultado em cache
# Compatível com: pfSense 2.x / FreeBSD
#
@ -7,15 +7,24 @@
# 1. Copie para /opt/zabbix/openvpn-collector.sh
# 2. chmod +x /opt/zabbix/openvpn-collector.sh
# 3. Adicione ao cron: */1 * * * * /opt/zabbix/openvpn-collector.sh
#
# v7 Changelog:
# - Adicionado métricas expandidas: Bytes Received, Bytes Sent, Connected Since
# - Novo cache secundário para métricas: /tmp/openvpn_metrics.json
SOCKET_DIR="/var/etc/openvpn"
CACHE_FILE="/tmp/openvpn_discovery.json"
CACHE_FILE_TMP="/tmp/openvpn_discovery.json.tmp"
METRICS_FILE="/tmp/openvpn_metrics.json"
METRICS_FILE_TMP="/tmp/openvpn_metrics.json.tmp"
# Inicia JSON
# Inicia JSON de discovery
printf '{"data":[' > "$CACHE_FILE_TMP"
# Inicia JSON de métricas
printf '{' > "$METRICS_FILE_TMP"
first=1
first_discovery=1
first_metrics=1
# Loop através de cada socket
for sockdir in "$SOCKET_DIR"/server*/; do
@ -27,27 +36,41 @@ for sockdir in "$SOCKET_DIR"/server*/; do
server_name=$(basename "$sockdir")
# Consulta o socket e processa linha por linha
# CLIENT_LIST format: type, cn, realaddr, virtaddr, virtaddr6, bytes_received, bytes_sent, connected_since_human, connected_since_unix, username, clientid, peerid, cipher
(echo "status 2"; sleep 0.3; echo "quit") | /usr/bin/nc -U "$sockfile" 2>/dev/null | \
grep "^CLIENT_LIST," | grep -v "Common Name" | \
while IFS=',' read -r type cn realaddr virtaddr rest; do
while IFS=',' read -r type cn realaddr virtaddr virtaddr6 bytes_recv bytes_sent conn_human conn_unix rest; do
[ -z "$cn" ] && continue
real_ip=$(echo "$realaddr" | cut -d: -f1)
virt_ip=$(echo "$virtaddr" | cut -d: -f1)
if [ $first -eq 0 ]; then
printf ','
# --- Discovery JSON ---
if [ $first_discovery -eq 0 ]; then
printf ',' >> "$CACHE_FILE_TMP"
fi
printf '{"{#VPN.USER}":"%s","{#VPN.SERVER}":"%s","{#VPN.REAL_IP}":"%s","{#VPN.VIRTUAL_IP}":"%s"}' "$cn" "$server_name" "$real_ip" "$virt_ip" >> "$CACHE_FILE_TMP"
first_discovery=0
printf '{"{#VPN.USER}":"%s","{#VPN.SERVER}":"%s","{#VPN.REAL_IP}":"%s","{#VPN.VIRTUAL_IP}":"%s"}' "$cn" "$server_name" "$real_ip" "$virt_ip"
first=0
done >> "$CACHE_FILE_TMP"
# --- Metrics JSON ---
# Format: "username": { "bytes_recv": N, "bytes_sent": N, "connected_since": N, "real_ip": "x.x.x.x", "virtual_ip": "y.y.y.y" }
if [ $first_metrics -eq 0 ]; then
printf ',' >> "$METRICS_FILE_TMP"
fi
printf '"%s":{"bytes_recv":%s,"bytes_sent":%s,"connected_since":%s,"real_ip":"%s","virtual_ip":"%s","server":"%s"}' \
"$cn" "${bytes_recv:-0}" "${bytes_sent:-0}" "${conn_unix:-0}" "$real_ip" "$virt_ip" "$server_name" >> "$METRICS_FILE_TMP"
first_metrics=0
done
first=0
first_discovery=0
first_metrics=0
done
printf ']}\n' >> "$CACHE_FILE_TMP"
printf '}\n' >> "$METRICS_FILE_TMP"
# Move atomicamente para evitar leitura parcial
mv "$CACHE_FILE_TMP" "$CACHE_FILE"
mv "$METRICS_FILE_TMP" "$METRICS_FILE"
chmod 644 "$CACHE_FILE"
chmod 644 "$METRICS_FILE"

View File

@ -41,3 +41,38 @@ UserParameter=openvpn.user.real_address.new[*],for sock in /var/etc/openvpn/serv
# Status do usuário (1=conectado, 0=desconectado)
# Uso: openvpn.user.status[joao.silva]
UserParameter=openvpn.user.status[*],for sock in /var/etc/openvpn/server*/sock; do [ -S "$sock" ] && (echo "status 2"; sleep 0.2; echo "quit") | /usr/bin/nc -U "$sock" 2>/dev/null | grep -q "^CLIENT_LIST,$1," && echo 1 && exit; done; echo 0
# ============================================================================
# MÉTRICAS AVANÇADAS v6 (Arthur's Gold Standard)
# Requer: openvpn-collector.sh rodando via cron (gera /tmp/openvpn_metrics.json)
# ============================================================================
# Tempo online em segundos (calculado a partir do connected_since)
# Uso: openvpn.user.time_online[joao.silva]
UserParameter=openvpn.user.time_online[*],conn=$(cat /tmp/openvpn_metrics.json 2>/dev/null | grep -oE '"$1":\{[^}]+' | grep -oE 'connected_since":[0-9]+' | cut -d: -f2); [ -n "$conn" ] && [ "$conn" -gt 0 ] && echo $(( $(date +%s) - $conn )) || echo 0
# Métricas via cache JSON (mais rápido que consultar socket)
# Bytes recebidos (via cache)
UserParameter=openvpn.user.bytes_recv.cached[*],cat /tmp/openvpn_metrics.json 2>/dev/null | grep -oE '"$1":\{[^}]+' | grep -oE 'bytes_recv":[0-9]+' | cut -d: -f2 || echo 0
# Bytes enviados (via cache)
UserParameter=openvpn.user.bytes_sent.cached[*],cat /tmp/openvpn_metrics.json 2>/dev/null | grep -oE '"$1":\{[^}]+' | grep -oE 'bytes_sent":[0-9]+' | cut -d: -f2 || echo 0
# IP Virtual do usuário (via cache)
UserParameter=openvpn.user.virtual_ip.cached[*],cat /tmp/openvpn_metrics.json 2>/dev/null | grep -oE '"$1":\{[^}]+virtual_ip":"[^"]+' | grep -oE 'virtual_ip":"[^"]+' | cut -d'"' -f3 || echo ""
# ============================================================================
# LOG DE ACESSO (REPLAY) - Requer: openvpn-access-tracker.sh via cron
# ============================================================================
# Últimas N linhas do log de atividade (para widget de replay)
# Uso: openvpn.access.log.tail[100] -> últimas 100 linhas
UserParameter=openvpn.access.log.tail[*],tail -$1 /var/log/openvpn_user_activity.log 2>/dev/null || echo ""
# Contagem de conexões de um usuário específico (últimas 24h)
# Uso: openvpn.access.count[joao.silva]
UserParameter=openvpn.access.count[*],grep -c "|$1|" /var/log/openvpn_user_activity.log 2>/dev/null || echo 0
# Destinos únicos acessados por um usuário (lista)
# Uso: openvpn.access.destinations[joao.silva]
UserParameter=openvpn.access.destinations[*],grep "|$1|" /var/log/openvpn_user_activity.log 2>/dev/null | cut -d'|' -f4 | sort -u | head -50 | tr '\n' ',' | sed 's/,$//' || echo ""

View File

@ -2755,6 +2755,123 @@ zabbix_export:
newvalue: Disponível
- value: '2'
newvalue: Desconhecido
- uuid: 830106fa5d2a45f9897c9154431eef08
name: VPN User Status
mappings:
- value: '0'
newvalue: Desconectado
- value: '1'
newvalue: Conectado
discovery_rules_vpn:
- uuid: 34ed656ffcf845b0b5598870de258002
name: Descoberta de Usuários OpenVPN
type: ZABBIX_ACTIVE
key: openvpn.discovery
delay: 5m
description: |
Descobre usuários conectados ao OpenVPN através do script openvpn-discovery.sh.
Requisito: Zabbix Agent ativo com UserParameter configurado.
item_prototypes:
- uuid: a8a060a8e0494d3d99a71cd4f2b6a7c8
name: 'OpenVPN [{#VPN.USER}]: Download Total (Bytes)'
type: ZABBIX_ACTIVE
key: 'openvpn.user.bytes_recv.cached[{#VPN.USER}]'
delay: 1m
history: 30d
trends: 365d
units: B
description: Total de bytes recebidos (download) pelo usuário VPN.
tags:
- tag: component
value: vpn
- tag: vpn_user
value: '{#VPN.USER}'
- uuid: 36362e120e9445a1bbdc750afc0f6a1f
name: 'OpenVPN [{#VPN.USER}]: Upload Total (Bytes)'
type: ZABBIX_ACTIVE
key: 'openvpn.user.bytes_sent.cached[{#VPN.USER}]'
delay: 1m
history: 30d
trends: 365d
units: B
description: Total de bytes enviados (upload) pelo usuário VPN.
tags:
- tag: component
value: vpn
- tag: vpn_user
value: '{#VPN.USER}'
- uuid: 7eee5d914f0346c8a2b1c3d4e5f6a7b8
name: 'OpenVPN [{#VPN.USER}]: Tempo Online (Segundos)'
type: ZABBIX_ACTIVE
key: 'openvpn.user.time_online[{#VPN.USER}]'
delay: 1m
history: 30d
trends: 365d
units: s
description: Tempo de conexão do usuário VPN em segundos.
tags:
- tag: component
value: vpn
- tag: vpn_user
value: '{#VPN.USER}'
- uuid: c3a4b5c6d7e84f0991a2b3c4d5e6f7a8
name: 'OpenVPN [{#VPN.USER}]: Status'
type: ZABBIX_ACTIVE
key: 'openvpn.user.status[{#VPN.USER}]'
delay: 1m
history: 30d
trends: '0'
valuemap:
name: VPN User Status
description: Status de conexão do usuário VPN (1=conectado, 0=desconectado).
tags:
- tag: component
value: vpn
- tag: vpn_user
value: '{#VPN.USER}'
- uuid: 1f2a3b4c5d6e4f8a9b0c1d2e3f4a5b6c
name: 'OpenVPN [{#VPN.USER}]: IP Real'
type: ZABBIX_ACTIVE
key: 'openvpn.user.real_address.new[{#VPN.USER}]'
delay: 1m
history: 30d
trends: '0'
value_type: TEXT
description: Endereço IP real (público) do usuário VPN.
tags:
- tag: component
value: vpn
- tag: vpn_user
value: '{#VPN.USER}'
- uuid: 9e8d7c6b5a4941f2bccd1e2f3a4b5c6d
name: 'OpenVPN [{#VPN.USER}]: Destinos Acessados'
type: ZABBIX_ACTIVE
key: 'openvpn.access.destinations[{#VPN.USER}]'
delay: 5m
history: 30d
trends: '0'
value_type: TEXT
description: Lista de destinos únicos acessados pelo usuário VPN (para replay).
tags:
- tag: component
value: vpn
- tag: component
value: audit
- tag: vpn_user
value: '{#VPN.USER}'
graph_prototypes:
- uuid: 2b3c4d5e6f7a4892abcd1e2f3a4b5c6d
name: 'OpenVPN [{#VPN.USER}]: Tráfego'
graph_items:
- color: 199C0D
item:
host: 'PFSense by SNMP'
key: 'openvpn.user.bytes_recv.cached[{#VPN.USER}]'
- sortorder: '1'
color: F63100
item:
host: 'PFSense by SNMP'
key: 'openvpn.user.bytes_sent.cached[{#VPN.USER}]'
graphs:
- uuid: 18b72f3eafe54206a574f431e7bb563a
name: 'PFSense: Códigos de Motivo (Packet Filter)'

View File

@ -1,21 +1,18 @@
# Documentação: PFSense Hybrid: SNMP + OpenVPN Agent
# Documentação: PFSense by SNMP
**Template:** PFSense Hybrid: SNMP + OpenVPN Agent
**Template:** PFSense by SNMP
**Descrição:**
Template Híbrido para monitoramento do pfSense.
SNMP: Monitoramento de interfaces, firewall, serviços (DHCP, DNS, Nginx).
Agent: Monitoramento avançado de OpenVPN (usuários, túneis S2S, tráfego).
Requisitos:
1. Habilite o daemon SNMP em Services na interface web do pfSense.
2. Instale o Zabbix Agent e configure os UserParameters OpenVPN (ver INSTRUCOES_AGENTE.txt).
Template para monitoramento do pfSense via SNMP
Configuração:
1. Habilite o daemon SNMP em Services na interface web do pfSense: https://docs.netgate.com/pfsense/en/latest/services/snmp.html
2. Configure a regra de firewall para permitir acesso do Zabbix Proxy/Server via SNMP: https://docs.netgate.com/pfsense/en/latest/firewall/index.html#managing-firewall-rules
3. Associe o template ao host.
MIBs: BEGEMOT-PF-MIB, HOST-RESOURCES-MIB
Keys Agent: openvpn.*
MIBs usadas:
BEGEMOT-PF-MIB
HOST-RESOURCES-MIB
Gerado pelo Padrão Gold (Arthur) - ITGuys
Gerado originalmente pela ferramenta oficial "Templator", Otimizado para Padrão Gold (Arthur)
## Itens Monitorados
@ -45,6 +42,36 @@ Gerado pelo Padrão Gold (Arthur) - ITGuys
### Regras de Descoberta (LLD)
#### Descoberta de interfaces de rede (`pfsense.net.if.discovery`)
- **Protótipos de Itens:**
- Interface [{#IFNAME}({#IFALIAS})]: Tráfego IPv4 de entrada bloqueado (`net.if.in.block.v4.bps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes IPv4 de entrada bloqueados (`net.if.in.block.v4.pps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Tráfego IPv6 de entrada bloqueado (`net.if.in.block.v6.bps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes IPv6 de entrada bloqueados (`net.if.in.block.v6.pps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes de entrada descartados (`net.if.in.discards[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes de entrada com erros (`net.if.in.errors[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Tráfego IPv4 de entrada permitido (`net.if.in.pass.v4.bps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes IPv4 de entrada permitidos (`net.if.in.pass.v4.pps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Tráfego IPv6 de entrada permitido (`net.if.in.pass.v6.bps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes IPv6 de entrada permitidos (`net.if.in.pass.v6.pps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Bits recebidos (`net.if.in[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Tráfego IPv4 de saída bloqueado (`net.if.out.block.v4.bps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes IPv4 de saída bloqueados (`net.if.out.block.v4.pps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Tráfego IPv6 de saída bloqueado (`net.if.out.block.v6.bps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes de saída descartados (`net.if.out.discards[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes de saída com erros (`net.if.out.errors[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Tráfego IPv4 de saída permitido (`net.if.out.pass.v4.bps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes IPv4 de saída permitidos (`net.if.out.pass.v4.pps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Tráfego IPv6 de saída permitido (`net.if.out.pass.v6.bps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Pacotes IPv6 de saída permitidos (`net.if.out.pass.v6.pps[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Bits enviados (`net.if.out[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Contagem de referências de regras (`net.if.rules.refs[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Velocidade (`net.if.speed[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Status operacional (`net.if.status[{#SNMPINDEX}]`)
- Interface [{#IFNAME}({#IFALIAS})]: Tipo de interface (`net.if.type[{#SNMPINDEX}]`)
#### Descoberta de Processos DHCP (`pfsense.dhcp.discovery`)
- **Protótipos de Itens:**
- Processo DHCP [{#HR_SW_PARAMS}]: Status (`pfsense.dhcp.process.status[{#HR_SW_PARAMS}]`)
#### Descoberta de Usuários OpenVPN (`openvpn.discovery`)
- **Protótipos de Itens:**
- OpenVPN [{#VPN.USER}]: Download Total (Bytes) (`openvpn.user.bytes_received.total[{#VPN.USER}]`)
@ -70,4 +97,13 @@ Gerado pelo Padrão Gold (Arthur) - ITGuys
### Protótipos de Triggers (LLD)
**Regra: Descoberta de interfaces de rede**
- [WARNING] **🐢 Congestionamento: Descartes na interface {#IFNAME}**
- [WARNING] **⚠️ PFSense: Interface [{#IFNAME}({#IFALIAS})]: Alta taxa de erros de entrada**
- [WARNING] **⚠️ PFSense: Interface [{#IFNAME}({#IFALIAS})]: Alta taxa de erros de saída**
- [AVERAGE] **🔌 PFSense: Interface [{#IFNAME}({#IFALIAS})]: Link indisponível**
**Regra: Descoberta de Processos DHCP**
- [HIGH] **🚨 DHCP Parado: Instância {#HR_SW_PARAMS} não está rodando**
**Regra: Descoberta de Usuários OpenVPN**