Post

Usando API para Monitorar IPSec da Palo Alto

Um guia para monitorar o status dos seus túneis IPSec

Usando API para Monitorar IPSec da Palo Alto

Quando se trata de monitoramento de rede, SNMP é, de longe, um dos protocolos mais utilizados. É simples de ter visibilidade de tráfego e status de interfaces somente coletando dados da base de dados das OIDs relacionadas à conectividade. Entretanto, nem todos os fabricantes disponibilizam o monitoramento de interfaces virtuais (como túneis IPSec) da mesma maneira das interfaces físicas. A Palo Alto é um destes casos. Se você consultar a documentação (disponível aqui), verá que o status dos túneis IPSec é monitorado somente via traps SNMP, e não coletas.

Sendo assim, neste post vou endereçar como monitorar o status de túneis IPSec utilizando chamadas API ao invés de SNMP, quando o último não é uma opção.

Para contornar isso, desenvolvi um script em Python que se utiliza da API da Palo Alto para capturar o status dos túneis IPSec. Apesar deste script ter sido primariamente para ser integrado com o Zabbix, pode ser adaptado para qualquer outra ferramenta de monitoramento. Se você estiver interessado em como o monitoramento dinâmico do Zabbix funciona (LLD), recomendo dar uma olhada nos meus posts anteriores para mais detalhes.

Porque Não Podemos Usar SNMP Neste Caso?

O SNMP funciona capturando informações de uma árvore de dados hierárquica, que é atualizada continuamente pelo sistema operacional. Ferramentas de monitoramento como o Zabbix ou Prometheus coletam estes dados periodicamente. Por exemplo, você pode listar todas as interfaces de um dispositivo utilizando o simples comando (assumindo que você está usando a comunidade padrão public):

1
snmpwalk -v 3c public 1.2.3.4 ifname

Isto retornará uma lista com todas as interfaces, incluindo as interfaces túnel:

Lista padrão de interfaces em um dispositivo Palo Alto Lista padrão de interfaces em um dispositivo Palo Alto

Apesar do SNMP trazer todas as interfaces listadas em Network > Interface > Tunnel, ele não monitora os túneis IPSec em Network > IPSec Tunnels, e é aqui que está o grande problema:

  • Interfaces túnel são virtuais e não refletem o real estado do túnel IPSec. Mesmo que o IPSec venha a ficar offline, a interface túnel associada a ele continuará a ser exibida como operacional.

Demonstrando o problema

Para o propósito deste post, criei uma interface IPSec falsa chamada Medium e a conectei à interface tunnel.1.

![Lista das interfaces túnel]((assets/img/monitoring-using-api/list-tunnel-interfaces.png) Lista das interfaces túnel

Lista dos túneis IPSec Lista dos túneis IPSec

Se agora listarmos as interfaces novamente, veremos que a interface IPSec Medium não é listada, diferente da interface tunnel.1 que, sim, é listada normalmente. Por padrão, o protocolo SNMP coloca um número de indexação logo após o nome da interface. Este número é incrementado a cada nova interface criada.

1
snmpwalk -v 2c -c public 1.2.3.4 ifname

Lista de interfaces mostrando tunnel.1 Lista de interfaces mostrando tunnel.1

Se usarmos o SNMP para consultar o status operacional da interface tunnel.1, teremos o retorno incorreto “up”, mesmo sabendo que a interface mostra claramente que o túnel está offline (bolinha de status vermelha).

1
snmpwalk -v 2c -c public 1.2.3.4 IF-MIB::ifOperStatus.400000001

Status operacional da interface tunnel.1 Status operacional da interface tunnel.1

Resultado

A resposta SNMP permanece trazendo que o estado do túnel é operacional.

Como Resolvemos Isso?

Como dito acima, desenvolvi um script em Python que consome a API do firewall para coletar a informação precisa sobre o estado do túnel. Este script suporta duas ações principais:

  1. Descoberta: Imprime todos os túneis em formato JSON, ideal para o processo de LLD do Zabbix;
  2. Status: Retorna um valor numérico de estado para um túnel específico. Você pode encontrar e baixar o script aqui. Abaixo seguem alguns exemplos de como utilizá-lo:

a) Modo de descoberta

A ação discovery lista todas as interfaces IPSec em formato JSON:

1
script.py 1.2.3.4 usuario senha discovery

Saída do script Saída do script

Esta saída JSON é bastante poderosa para ferramentas como Zabbix para dinamicamente criar itens de monitoramento através do processo LLD. Se tivéssemos mais de uma interface, a saída seria algo assim:

1
2
3
4
5
6
7
{  
 "data": [  
 {"{#TUNNELNAME}": "Tunnel1"},  
 {"{#TUNNELNAME}": "Medium"},  
 {"{#TUNNELNAME}": "BackupTunnel"}  
 ]  
}

b) Modo status

Para coletar o estado específico de um túnel, use a ação status:

1
script.py 1.2.3.4 username password status 'Medium'

Estado do túnel Estado do túnel

Os possíveis valores são:

  • 1 — O túnel está operacional;
  • 2 — O túnel não está online.

Integrando o Script com o Zabbix

Você pode, facilmente, integrar o script à sua ferramenta de monitoramento. Para o Zabbix, eu seguiria o seguinte caminho:

  1. Integração de Descoberta: use a ação discovery para criar itens de monitoramento de túneis de forma dinâmica.
  2. Monitoramento de Estado: regularmente colete o estado do túnel, utilizando a ação status.
  3. Disparo de Alertas: configure alertas, caso seu túnel venha a ficar indisponível.

Conclusão

Aproveitar a API da Palo Alto te dá a opção de contornar as limitações de coletas SNMP e aumentar a visibilidade dos seus túneis IPSec. Essa estratégia pode ser estendida para outros cenários em que a informação que você precisa só está disponível via API.

Espero que você ache este post útil para o seu ambiente de monitoramento. Se tiver questões ou sugestões, sinta-se à vontade para compartilhar nos comentários. Grande Abraço!

Esta postagem está licenciada sob CC BY 4.0 pelo autor.