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:
parent
b4a56ed604
commit
be2867ecd6
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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 |
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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 ""
|
||||
|
|
@ -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)'
|
||||
|
|
|
|||
|
|
@ -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**
|
||||
|
|
|
|||
Loading…
Reference in New Issue