FortiGateGuías técnicas

Fortigate REST API con Python: firewall policy counters

Muchas veces nos encontramos con la necesidad de monitorear nuestros equipos de seguridad/red y quizás no tenemos forma de hacerlo mediante herramientas estándar como es el caso de SNMP o mismo el dato que necesitamos no esté accesible en ese formato. Es por eso, que FortiOS nos da herramientas adicionales y muy fáciles de usar como es el caso de la REST API.

En el siguiente post mostrare como obtener contadores (bytes, paquetes, sesión, etc.) de las políticas de firewall mediante accesos REST API utilizando código Python.

Datos utilizados:

  • Firmware FortiOS 6.2.x (IP interna 192.168.0.1)
  • Python 3.7

1 – Crear un perfil de administrador (FortiGate)

En este caso, sólo necesitamos los permisos del Firewall en el perfil.

CLI

config system accprofile

    edit “profile_api”

        set comments ‘profile API policy’

        set secfabgrp none

        set ftviewgrp none

        set authgrp none

        set sysgrp none

        set netgrp none

        set loggrp none

        set fwgrp read-write

        set vpngrp none

        set utmgrp none

        set wanoptgrp none

        set wifi none

        set admintimeout-override disable

    next

end

WEB

2 – Crear el admin REST API (FortiGate)

Cuando configuramos el administrador REST API, es altamente recomendable indicar los trusted host para el acceso.

CLI

config system api-user

    edit “admin_api”

        set comments ”

        set api-key ENC SH2tbaKe7Qqh4MEVMJ/ptokE8uBpP3REdqOHljqMZFRMQzn8N0fYr5Jasw/GWk=

        set accprofile “profile_api”

        set vdom “root”

        set schedule ”

        set cors-allow-origin ”

        set peer-auth disable

        config trusthost

            edit 1

                set type ipv4-trusthost

                set ipv4-trusthost 192.168.0.0 255.255.255.0

            next

            edit 2

                set type ipv4-trusthost

                set ipv4-trusthost 10.212.134.0 255.255.255.0

            next

        end

    next

end

WEB

 

3 – Obtener todas las políticas de firewall

 Para obtener todas las políticas de firewall, podemos hacerlo desde cualquier navegador con la siguiente URL

https://<<ip-fortigate>>/api/v2/monitor/firewall/politica?access_token<<token>>

URL

https://192.168.0.1/api/v2/monitor/firewall/policy/?access_token=cc7H54hxHr1Qgn4pqncQnd1j758zG

CURL

curl -H “Authorization:cc7H54hxHr1Qgn4pqncQnd1j758zGQ” -k

“https://192.168.0.1/api/v2.0/monitor/firewall/policy/”

4 – Código en Python

Es un código simple, un par de líneas y solamente necesitamos importar el módulo requests para las consultas

import requests

 

url = ‘https://192.168.0.1/api/v2/monitor/firewall/policy’

token = ‘cc7H54hxHr1Qgn4pqncQnd1j758zGQ’

parameters = {“access_token”: token}

req = requests.get(url, params=parameters, verify=False)

print(req.text)   

Resultado (python)

{  “http_method”:”GET”,

  “results”:[

    {

      “policyid”:0,

      “active_sessions”:0,

      “bytes”:3012,

      “packets”:10,

      “last_used”:1587398000,

      “first_used”:1579793659,

      “hit_count”:120

    },

    {

      “policyid”:1,

      “uuid”:”62f56c00-9564-51ea-50de-f76a212109c7″,

      “uuid_type”:”firewall.policy”,

      “active_sessions”:0,

      “bytes”:0,

      “packets”:0

      “last_used”:1587398000,

      “first_used”:1579793659,

      “hit_count”:6

    },

    {

      “policyid”:2,

      “uuid”:”6824a238-962f-51ea-65b9-2355fda669cd”, 

En caso que necesitemos obtener una determinada política (por ejemplo política ID 2), tenemos que agregar otro parámetro al request (policyid:2)

url = ‘https://192.168.0.1/api/v2/monitor/firewall/policy’

token = ‘cc7H54hxHr1Qgn4pqncQnd1j758zGQ’

parameters = {‘policyid’: ‘2’, ‘access_token’: token}

req = requests.get(url, params=parameters, verify=False)

print(req.text)

Resultado (python)

{

  “http_method”:”GET”,

  “results”:[

    {

      “policyid”:2,

      “active_sessions”:0,

      “bytes”:3012,

      “packets”:10,

      “last_used”:1587398000,

      “first_used”:1579793659,

      “hit_count”:10

    }

  ],

  “vdom”:”root”,

  “path”:”firewall”,

  “name”:”policy”,

  “status”:”success”,

  “version”:”v6.2.3″,

  “build”:1066

}

 

Saludos,

Leandro Varone

IT Project Lead, Globalgate

 

Tags

Contenidos relacionados

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *