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…
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í:
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?
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:
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.
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.
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 y 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
Bueno, utilicemos el comando curl para realizar esta petición:
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:
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:
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:
2da parte:
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
