Introdução
Precisa de uma maneira eficaz de receber determinados alertas do Fortigate? Possui uma aplicação e/ou determinadas comunicações crÃticas que é necessário saber imediatamente quando a mesma caiu, mesmo quando está "out-of-office"?
No Post de hoje iremos abordar uma maneira eficaz de receber notificações e alertas do Fortigate através do Telegram.
É possÃvel encaminhar as notificações e alertas de diversos "serviços" em que o Fortigate é responsável. Basicamente tudo o que gera Log no Firewall, é possÃvel encaminhar a notificação para o Telegram, como por exemplo Logs de VPN, roteamento dinâmico (OSPF, BGP, etc), Logs de UTM, etc.
Organização do Post
O post ficou organizado conforme tópicos abaixo:
Objetivo
Configurar Automation Stitches no Firewall Fortigate para receber os alertas e notificações assim que estas ocorrerem, pelo Telegram.
Configurações Telegram
Criando um Bot
Acessar a conta via Web pelo https://web.telegram.org/;
Procurar por "BotFather" na aba de Pesquisa e selecioná-lo:
Inicie a conversa com o BotFather com /start;
Para a configuração de um novo bot, digite /newbot;
Escolha um nome para o Bot;
Após, escolha um username para o Bot;
Segue exemplo criado:
Após a conclusão, o BotFather irá enviar o Token da HTTP API, salve essa informação, pois a mesma será utilizada no Fortigate.
Criando um Grupo no Telegram
Agora iremos criar o grupo em que será recebido as notificações do Firewall:
Neste grupo iremos incluir o Bot recém criado e também os usuários que irão receber as notificações.
Após, selecione o chat do grupo criado e salve a URL/chat_id do grupo, conforme abaixo (no caso do grupo que eu criei, o chat_id foi -4265443662), pois usaremos essa informação no Fortigate:
Configurações Firewall Fortigate
No Firewall Fortigate as notificações e eventos serão enviados ao Telegram através de HTTP API, que será acionada utilizando a funcionalidade dos Stitches de Automação do Fortigate.
Um Stitch de automação possuà duas partes:
Trigger: é a condição ou evento no FortiGate que ativa a ação, por exemplo, um log especÃfico ou uma tentativa de login com falha;
Action: a ação é o que o FortiGate faz em resposta ao gatilho (trigger).
No caso do nosso laboratório, a Trigger será os eventos/logs que será configurado que, quando gerados, irá acionar a Action de enviar a Notificação para o Telegram.
Podemos utilizar a mesma Action (no qual é configurado a API HTTP para o Telegram) para diversas Triggers diferentes (eventos gerados), entretanto, no meu ponto de vista é interessante criarmos Actions diferentes para Triggers diferentes, pois assim podemos personalizar o texto que será enviado ao Telegram baseado no Log recebido do Firewall.
Após a configuração da Action e da Trigger, é criado um novo Stitch, onde incluimos a Trigger e a Action que a Trigger terá quando acionada.
As configurações do Stitch são realizadas em Security Fabric > Automation.
Configurando a Action
Segue o comando via CLI para configuração da Action:
config system automation-action
edit "Send Telegram Notification - Admin Login"
set action-type webhook
set protocol https
set uri "api.telegram.org/bot<tokenBotFather>/sendMessage"
set http-body {\"chat_id\":\"-<chat_id>\",\"text\":\"%%msg%%\":}"
set port 443
config http-headers
edit 1
set key "Content-Type"
set value "application/json"
next
end
next
end
Neste comando, se atentar para 3 partes:
<tokenBotFather> - aqui você deve incluir o Token enviado pelo BotFather;
<chat_id> - aqui você deve incluir o chat id do grupo criado no Telegram, conforme passos da Configuração do Telegram acima;
%%msg%% - na parte onde está este texto é onde você personalizará a mensagem enviada ao Telegram. O "%%msg%%" significa que irá coletar o texto do Log do tipo "Message". Exemplo:
Podemos personalizar o texto de diversas maneiras, coletando diversos campos diferentes do LOG, basta incluirmos o Log field de acordo com o tipo desejado, conforme lista retirada do Fórum da Fortinet:
Configurando a Trigger
Em Security Fabric > Automation > Trigger, iremos configurar uma Trigger do Tipo FortiOS Event Log, onde possuà todos os tipos de Eventos e Entradas de LOG que podemos escolher para que seja enviada a notificação ao Telegram.
Configurando o Stitch
Com a Action e a Trigger criada, agora basta configurarmos o Stitch e atrelar ambos no novo Stitch.
Vamos demonstrar alguns exemplos práticos abaixo.
Exemplos Práticos
Alerta de Admin Login Fail/Successfull
Configurando a Action:
via CLI:
config system automation-action
edit "Send Telegram Notification - Admin Login"
set action-type webhook
set protocol https
set uri "api.telegram.org/bot7366502653:AAGBI7DuGNh1CQX2EQ2tdmXY8uK0rNsj4Yg/sendMessage"
set http-body "{\"chat_id\":\"-4265443662\",\"text\":\"FGT SITE-01 - %%msg%%\":}"
set port 443
config http-headers
edit 1
set key "Content-Type"
set value "application/json"
next
end
next
end
via GUI:
Configurando a Trigger:
via CLI:
config system automation-trigger
edit "Admin Login Fail and Successfull"
set event-type event-log
set logid 32002 32001
next
end
via GUI:
Configurando o Stitch:
via CLI:
config system automation-stitch
edit "Admin Login Fail/Successfull"
set trigger "Admin Login Fail and Successfull"
config actions
edit 1
set action "Send Telegram Notification - Admin Login"
set required enable
next
end
next
end
via GUI:
Alertas recebidos no Telegram:
Alerta de Tunnel IPSec UP/Down
Configurando a Action:
Utilizando o mesmo código do exemplo anterior, entretanto neste caso personalizei o texto enviado de acordo com o Log que o tunnel IPSec gera, para obtermos mais detalhes na notificação recebida.
via CLI:
config system automation-action
edit "Send Telegram Notification - IPSec"
set action-type webhook
set protocol https
set uri "api.telegram.org/bot7366502653:AAGBI7DuGNh1CQX2EQ2tdmXY8uK0rNsj4Yg/sendMessage"
set http-body "{\"chat_id\":\"-4265443662\",\"text\":\"Notificação FGT SITE-01 - VPN IPSec: %%vpntunnel%% | IP Remoto: %%remip%% | LOG: %%action%% - %%msg%%\":}"
set port 443
config http-headers
edit 1
set key "Content-Type"
set value "application/json"
next
end
next
end
via GUI:
Configurando a Trigger:
via CLI:
config system automation-trigger
edit "IPSec Tunnel UP/DOWN"
set event-type event-log
set logid 37138
next
end
 via GUI:
Configurando o Stitch:
via CLI:
config system automation-stitch
edit "Admin Login Fail/Successfull"
set trigger "Admin Login Fail and Successfull"
config actions
edit 1
set action "Send Telegram Notification - Admin Login"
set required enable
next
end
next
end
 via GUI:
Alertas recebidos no Telegram:
Vamos demonstrar alguns exemplos práticos abaixo.
Alerta de BGP UP/DOWN
Configurando a Action:
via CLI:
config system automation-action
edit "Send Telegram Notification - BGP"
set action-type webhook
set protocol https
set uri "api.telegram.org/bot7366502653:AAGBI7DuGNh1CQX2EQ2tdmXY8uK0rNsj4Yg/sendMessage"
set http-body "{\"chat_id\":\"-4265443662\",\"text\":\"Notificação FGT SITE-01 - BGP - Tipo de LOG: %%logdesc%% | Ação Ocorrida: %%msg%%\":}"
set port 443
config http-headers
edit 1
set key "Content-Type"
set value "application/json"
next
end
next
end
via GUI:
Configurando a Trigger:
via CLI:
config system automation-trigger
edit "BGP UP/DOWN"
set event-type event-log
set logid 20300
next
end
 via GUI:
Configurando o Stitch:
via CLI:
config system automation-stitch
edit "IPSec UP/DOWN"
set trigger "IPSec Tunnel UP/DOWN"
config actions
edit 1
set action "Send Telegram Notification - IPSec"
set required enable
next
end
next
end
 via GUI:
Alertas recebidos no Telegram:
Conclusão
Conforme vimos, o Automation Stitch pode ser utilizado para automatizar ações baseado em eventos/gatilhos, e uma destas ações vimos hoje que é receber os alertas e notificações imediatamente quando ocorrem pelo Telegram, entretanto, são infinitas as suas aplicações.
Receber alertas crÃticos imediatamente no Telegram pode ser útil quando há serviços crÃticos que precisamos saber imediatamente quando ocorre alguma anomalia, pois podemos estar fora do escritório e não termos visibilidade instantânea do evento que ocorreu.
Referências