4.1 KiB
4.1 KiB
📜 Especificação Técnica: Template pfSense SNMP (Zabbix 7.0 Native)
Este documento define a especificação exata para a implementação das melhorias no template template_app_pfsense_snmp.yaml. O agente executor deve seguir estritamente as definições de UUID, Tags e Expressões abaixo.
1. Diretrizes de Engenharia (Reference: Zabbix 7.0 Advanced YAML)
- UUIDs: Devem ser gerados novos para cada entidade (Item, Trigger, Dashboard). Formato: 32 chars hex lowercase (ex:
uuidgen | tr -d '-' | tr 'A-F' 'a-f'). - Tags: Taxonomia obrigatória para todos os novos triggers.
scope:availability|capacity|performance|securitylayer:hardware|network|application
- Macros: Usar macros de template
{$MACRO}para todos os thresholds.
2. Novos Triggers (Física & Segurança)
2.1 Interface Health (Contexto LLD: net.if.discovery)
Aplicar nos Trigger Prototypes.
| Nome do Trigger | Expressão (Notação Zabbix) | Severidade | Tags |
|---|---|---|---|
| 🚨 Falha Física: Erros de Entrada Excessivos na {#IFNAME} | min(/PFSense by SNMP/net.if.in.errors[{#SNMPINDEX}],#3) > {$IF.ERRORS.WARN} |
HIGH | scope:availability, layer:hardware |
| ⚠️ Possível Duplex Mismatch: Erros de Saída na {#IFNAME} | min(/PFSense by SNMP/net.if.out.errors[{#SNMPINDEX}],#3) > {$IF.ERRORS.WARN} |
HIGHER | scope:performance, layer:network |
| 🐢 Congestionamento: Descartes na interface {#IFNAME} | min(/PFSense by SNMP/net.if.in.discards[{#SNMPINDEX}],5m) > {$IF.DISCARDS.WARN} |
WARNING | scope:capacity, layer:network |
2.2 Security & Integrity (Global)
Aplicar em Triggers Globais.
| Nome do Trigger | Expressão | Sev | Tags |
|---|---|---|---|
| 🛡️ Possível Portscan: Pico de Bloqueios na WAN | min(/PFSense by SNMP/pfsense.packets.match, 5m) > avg(/PFSense by SNMP/pfsense.packets.match, 1h) * 3 |
WARNING | scope:security, type:anomaly |
| 🧩 Fragmentação Excessiva IPv4 | min(/PFSense by SNMP/pfsense.packets.fragment, 5m) > {$PF.FRAG.MAX} |
WARNING | scope:security |
3. Análise Preditiva & Derivada (Calculated Items & Triggers)
3.1 Item Calculado: Noise Ratio
Criar novo item calculado para medir a "sujeira" do tráfego.
- Key:
pfsense.firewall.noise_ratio - Formula:
last(//pfsense.packets.match) / ( last(//pfsense.packets.match) + last(//net.if.pass.total) + 0.001 )- Nota:
net.if.pass.totaldeve ser um item de soma de todas as interfaces (pode ser complexo em SNMP puro, alternativa: usar apenas counters globais do PF se disponíveis). - Correção: O PF MIB tem counters globais. Usaremos:
last(//pfsense.packets.match) / ( last(//pfsense.pf_counters.walk[...pass]) + ... ). Simplificação para o agente: Usar apenas Taxa de Bloqueio se o total não estiver claro. - Fallback Specification: Usar Trigger em
pfsense.packets.match(Bloqueio) comparado com baseline.
- Nota:
3.2 Triggers Preditivas (Forecast)
| Nome do Trigger | Expressão | Sev |
|---|---|---|
| ⏳ Tabela de Estados cheia em < 1h | timeleft(/PFSense by SNMP/pfsense.state.table.pused, 1h, 100) < 1h |
HIGH |
| ⏳ Source Tracking cheia em < 1h | timeleft(/PFSense by SNMP/pfsense.source.tracking.table.pused, 1h, 100) < 1h |
HIGH |
4. Dashboards (Visualização como Código)
Adicionar bloco dashboards no YAML root.
- Dashboard: "PFsense: Security & Health"
- Widgets:
- Graph (Stacked): "Firewall Traffic Mix" -> Series:
pfsense.packets.match(Red),pfsense.packets.normalize(Yellow). - Gauge: "State Table Capacity" -> Item:
pfsense.state.table.pused. - Top Hosts (Honeycomb style equivalent if 7.0): "Interface Errors" -> LLD Items
net.if.in.errors[*].
- Graph (Stacked): "Firewall Traffic Mix" -> Series:
5. Instruções de Execução
- Edição: Inserir os novos blocos no
template_app_pfsense_snmp.yaml. - Validação: Garantir que UUIDs sejam únicos (não reutilizar strings do exemplo).
- Macros: Adicionar as macros
{$IF.ERRORS.WARN},{$IF.DISCARDS.WARN},{$PF.FRAG.MAX}no blocomacrosdo template.