templates-zabbix-itguys/templates_gold/pfsense_hybrid_snmp_agent/userparameter.conf

78 lines
5.3 KiB
Plaintext

# OpenVPN UserParameters for Zabbix Agent (Arthur's Gold Standard v5-FINAL)
# Compatível com: Zabbix 7.0+ / pfSense 2.x / FreeBSD
# Instalação: Copiar para /usr/local/etc/zabbix7/zabbix_agentd.conf.d/
#
# IMPORTANTE: Usa Management Interface via sockets Unix
# Testado em pfSense 2.8.0-RELEASE
# Discovery de usuários conectados (via sockets)
UserParameter=openvpn.discovery,/opt/zabbix/openvpn-discovery.sh
# Versão do OpenVPN
UserParameter=openvpn.version,openvpn --version 2>&1 | head -1 | awk '{print $2}'
# Contagem total de usuários conectados (todos os servidores)
UserParameter=openvpn.user.count.total,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; done | grep -c "^CLIENT_LIST," 2>/dev/null || echo 0
# Contagem de usuários por servidor
# Uso: openvpn.user.count[server14]
UserParameter=openvpn.user.count[*],[ -S "/var/etc/openvpn/$1/sock" ] && (echo "status 2"; sleep 0.2; echo "quit") | /usr/bin/nc -U "/var/etc/openvpn/$1/sock" 2>/dev/null | grep -c "^CLIENT_LIST," || echo 0
# Status do servidor OpenVPN (1=online, 0=offline)
# Uso: openvpn.server.status[server14]
UserParameter=openvpn.server.status[*],[ -S "/var/etc/openvpn/$1/sock" ] && (echo "status 2"; sleep 0.2; echo "quit") | /usr/bin/nc -U "/var/etc/openvpn/$1/sock" 2>/dev/null | grep -q "^TITLE" && echo 1 || echo 0
# Bytes recebidos pelo usuário (busca em todos os servidores)
# Uso: openvpn.user.bytes_received[joao.silva]
UserParameter=openvpn.user.bytes_received.total[*],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 "^CLIENT_LIST,$1,"; done | head -1 | cut -d, -f6
# Bytes enviados pelo usuário
# Uso: openvpn.user.bytes_sent[joao.silva]
UserParameter=openvpn.user.bytes_sent.total[*],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 "^CLIENT_LIST,$1,"; done | head -1 | cut -d, -f7
# Timestamp de conexão do usuário (epoch)
# Uso: openvpn.user.connected_since[joao.silva]
UserParameter=openvpn.user.connected_since[*],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 "^CLIENT_LIST,$1,"; done | head -1 | cut -d, -f9
# IP real do usuário
# Uso: openvpn.user.real_address.new[joao.silva]
UserParameter=openvpn.user.real_address.new[*],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 "^CLIENT_LIST,$1,"; done | head -1 | cut -d, -f3 | cut -d: -f1
# 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 ""