fbpx

Automatizando Sophos XG

Hola que tal estimada red. Un nuevo post relacionado al mundo de automatización. Esta vez nos centraremos en la marca de seguridad Sophos, en el producto de su catálogo de cortafuegos o Firewall XG. ¿Te llama la atención como poder automatizar este producto?, pues sigue leyendo este post.

Nota: Si necesitas una intro al mundo de automatización, puedes leer mis post anteriores. Te recomiendo el siguiente post: ¿Te gustaría una intro a Devnet? Conoce a Carl…

Había una vez una API…

No alt text provided for this image

Es importante a la hora de querer automatizar alguna tarea, es ver las disposiciones que tiene el objeto a automatizar. En este caso, para automatizar un corta fuego Sophos XG, investigamos un poco sobre y vemos que permite comunicación a través de API REST (Para mayor información y divertida introducción de las api’s, la puedes encontrar en mi post: Un delicioso código con Python – ¿Qué es API?). Información en el siguiente enlace:https://www.linkedin.com/embeds/publishingEmbed.html?articleId=7538188341451177124

¿API XML?

Al observar la documentación de Sophos XG API, vemos que permite la administración por medio de API, utilizando formato XML. Este formato es muy popular, aunque muchos prefieren la información en JSON, ya que es más “fácil” de leer. ¿Se acuerdan lo que es JSON y XML?. Lo mencionamos en el post de pizza con Python, pero un pequeño recordéis aquí:

No alt text provided for this image

La info de la izquierda en format JSON significa lo mismo que la info de la derecha en formato XML. ¿Que tal un ejemplo más complicado?

No alt text provided for this image

Si… la información de la izquierda, significa lo mismo que la información de la derecha. Puedes validar este ejemplo en el siguiente enlace:https://www.linkedin.com/embeds/publishingEmbed.html?articleId=7352132696337756420

Activando API en Sophos XG

En los enlaces anteriores nos indicaban como activar el API en el dispositivo XG. Veamos aquí los pasos:

Cree un perfil administrador

Ve hacia Profiles > Device access y crea un perfil administrador. Que tenga como mínimo la siguiente información y guarde:

No alt text provided for this image

Nota: Aquí se debe colocar en “read” o “Read-write” las opciones que quieres controlar a través de API. En este perfil, solo podremos modificar objetos y redes. Si deseamos modificar reglas del cortafuegos o reglas de IPS, se deben cambiar sus opciones correspondientes.

Cree un administrador

Vaya a la opción Authentication > Users y haga click en Add.

Selecciona la opción User type a modo Administrator.

Seleccione el perfil API admin creado previamente.

No alt text provided for this image

Permitir acceso API

Especificar la configuración API:

Ir a Backup and firmware > API.

Seleccionar configuración API.

En la selección Allowed IP address, agregue las direcciones IP por donde desea realizar las consultas API request.

Haga Clic en Apply.

No alt text provided for this image

Hello World en API Sophos

Bueno, al finalizar este proceso, es hora de probar si funciona el acceso. La forma de acceso, nos los explican en este enlace:https://www.linkedin.com/embeds/publishingEmbed.html?articleId=8238271650059599251

En general se debe entender este formato:

https://<Firewall IP>:<port>/webconsole/APIController?reqxml=<Add the XML request here>
Donde:
<Firewall IP>: Es el IP del Firewall
<port>: es el puerto del Firewall. Por defecto 4444
<Add the XML request here>: Aquí es la solicitud en formato XML.


Para poder saber como construir el XML, en la misma página anterior nos regalan el siguiente ejemplo:

Escribir info:

https://172.16.16.16:4444/webconsole/APIController?reqxml=<Request><Login><Username>apiadmin</Username><Password>SyncorpGroup19_
                </Password></Login><Set><IPHost><Name>Test10</Name><IPFamily>IPv4</IPFamily><HostType>IP</HostType>
                <IPAddress>198.1.2.1</IPAddress></IPHost></Set></Request>

¿Algo complicado de leer no?. Pues, hay un dicho: “divide y vencerás”. Desglosemos la información:

<Firewall IP>: 172.16.16.16
<port>: 4444

<Add the XML request here>: 


<Request>
  <Login>
    <Username>apiadmin</Username>
    <Password>SyncorpGroup19_</Password>
  </Login>
  <Set>
    <IPHost>
      <Name>Test10</Name>
      <IPFamily>IPv4</IPFamily>
      <HostType>IP</HostType>
      <IPAddress>198.1.2.1</IPAddress>
    </IPHost>
  </Set>
</Request>

Es más leíble de esta manera para nosotros los humanos. Analicemos la data:

Etiqueta <Login>

Aquí se engloba 2 etiquetas obligatorias: Username Password. En cada petición se debe agregar este grupo. Con esta info, el Sophos autentica y autoriza el uso API.

Etiqueta <Set>

Esta etiqueta engloba cualquier cambio que se quiera realizar al Sophos XG. En este ejemplo, estamos apuntando al subgrupo de etiquetas IPHost y que este a su vez tiene las etiquetas Name, IPFamily, HostType, IPAddress. Este subgrupo se encuentra en la parte gráfica GUI en SYSTEM – Host and Services – IP Host

No alt text provided for this image

Bueno, utilicemos el comando curl para realizar esta petición:

No alt text provided for this image
curl -k "https://172.16.16.16:4444/webconsole/APIController?reqxml=<Request><Login><Username>apiadmin</Username><Password>SyncorpGroup19_</Password></Login><Set><IPHost><Name>Test10</Name><IPFamily>IPv4</IPFamily><HostType>IP</HostType><IPAddress>198.1.2.1</IPAddress></IPHost></Set></Request>"

Para Solicitar info la sintáxis sería:

https://172.16.16.16:4444/webconsole/APIController?reqxml=<Request><Login><Username>apiadmin</Username><Password>SyncorpGroup19_
                </Password></Login><Get><IPHost><Name></Name><IPFamily></IPFamily><HostType></HostType><IPAddress></IPAddress></IPHost>
                </Get></Request>

Y probando la info sería:

No alt text provided for this image
curl -k "https://172.16.16.16:4444/webconsole/APIController?reqxml=<Request><Login><Username>apiadmin</Username><Password>SyncorpGroup19_</Password></Login><Get><IPHost><Name></Name><IPFamily></IPFamily><HostType></HostType><IPAddress></IPAddress></IPHost></Get></Request>"

Toda esta información está basada en el enlace anterior:

No alt text provided for this image

Librería Sophos XG

Como vieron con el ejemplo anterior, sería tedioso manejarlo de esa manera, por lo que decidí construir una librería en Python y poder utilizarlo como una función más. Aquí colocando el mismo ejemplo con una función creada con los mismos pasos ya explicados anteriormente:

1ra parte:

No alt text provided for this image

2da parte:

No alt text provided for this image

Aquí mi aporte a la comunidad Sophos en el mundo de automatización. La librería la pueden descargar en el portal github:https://www.linkedin.com/embeds/publishingEmbed.html?articleId=8556513720804029162

API Sophos XG – Documentación

Hay mayor información en la documentación API de la plataforma (¿se acuerdan de la documentación API de Cisco Webex que vimos previamente?, es similar aquí. Para info de como es en Cisco aquí: Crea tu bot en Webex con Python ). Aquí su enlace:https://www.linkedin.com/embeds/publishingEmbed.html?articleId=8826730458413577844

La librería fue basada en la versión 18.001 y la misma transforma la respuesta de formato XML a JSON para mayor facilidad.

Conclusión

DEVNET abre un mundo de posibilidades para manipular las redes de manera automatizada y API es la ventana que nos permite comunicarnos de máquina a máquina.

¿Dudas, comentarios? Puedes dejarlo en la sección de abajo.

Si te interesa alguno de nuestros servicios o leer todos nuestros posts, puedes localizarlos por esta red social o en el portal SYNCORP.

Referencias:

Sophos:

  • https://support.sophos.com/support/s/article/KB-000038263?language=en_US

Leave a Reply