templates-zabbix-itguys/templates_gold/improvement_plan.md

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 | security
    • layer: 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.total deve 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.

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:
    1. Graph (Stacked): "Firewall Traffic Mix" -> Series: pfsense.packets.match (Red), pfsense.packets.normalize (Yellow).
    2. Gauge: "State Table Capacity" -> Item: pfsense.state.table.pused.
    3. Top Hosts (Honeycomb style equivalent if 7.0): "Interface Errors" -> LLD Items net.if.in.errors[*].

5. Instruções de Execução

  1. Edição: Inserir os novos blocos no template_app_pfsense_snmp.yaml.
  2. Validação: Garantir que UUIDs sejam únicos (não reutilizar strings do exemplo).
  3. Macros: Adicionar as macros {$IF.ERRORS.WARN}, {$IF.DISCARDS.WARN}, {$PF.FRAG.MAX} no bloco macros do template.