Check Point R80.10 API. Administración a través de CLI, scripts y más

Check Point R80.10 API. Administración a través de CLI, scripts y más

Estoy seguro de que todos los que alguna vez han trabajado con Check Point, han tenido quejas sobre la imposibilidad de editar la configuración desde la línea de comandos. Esto es especialmente extraño para quienes han trabajado anteriormente con Cisco ASA, donde todo se puede configurar en CLI. En Check Point es todo lo contrario: todas las configuraciones de seguridad se realizaban exclusivamente desde la interfaz gráfica. Sin embargo, hay cosas que son completamente incómodas de hacer a través de la GUI (incluso una tan conveniente como la de Check Point). Por ejemplo, la tarea de agregar 100 nuevos hosts o redes se convierte en un procedimiento largo y tedioso. Para cada objeto, se debe hacer clic varias veces y escribir la dirección IP. Lo mismo ocurre con la creación de grupos de sitios o la activación/desactivación masiva de firmas IPS. Además, existe una gran probabilidad de cometer un error.

Recientemente ocurrió un "milagro". Con el lanzamiento de la nueva versión Gaia R80 , se anunció la posibilidad de utilizar API, lo que abre amplias oportunidades para la automatización de configuraciones, administración, monitoreo, etc. Ahora se puede:

  • crear objetos;
  • agregar o editar listas de acceso;
  • activar/desactivar blades;
  • configurar interfaces de red;
  • instalar políticas;
  • y mucho más.

Si soy honesto, no entiendo cómo esta noticia pasó desapercibida en Habr. En este artículo, describiremos brevemente cómo usar la API y daremos algunos ejemplos prácticos de configuración de CheckPoint con scripts..

De inmediato quiero aclarar que la API se utiliza solo para el servidor de administración. Es decir, gestionar gateways sin el servidor de administración sigue siendo imposible.

¿A quién podría interesar esta API?

  1. Administradores de sistemas que quieren simplificar o automatizar tareas rutinarias de configuración de Check Point;
  2. Empresas que desean integrar Check Point con otras soluciones (sistemas de virtualización, sistemas de tickets, sistemas de gestión de configuraciones, etc.);
  3. Integradores de sistemas que desean estandarizar configuraciones o crear productos adicionales relacionados con Check Point.

Esquema típico

Así que, imaginemos un esquema típico con Check Point:

Check Point R80.10 API. Administración a través de CLI, scripts y más

Como de costumbre, tenemos un gateway (SG), un servidor de gestión (SMS) y la consola del administrador (SmartConsole). De este modo, el proceso habitual de configuración del gateway es el siguiente:

Check Point R80.10 API. Administración a través de CLI, scripts y más

Es decir, primero es necesario iniciar SmartConsole, mediante la cual nos conectamos al servidor de gestión (SMS). En el SMS se aplican configuraciones de seguridad, y luego se aplican (política de instalación) en el gateway (SG).

Al usar API de Gestión, en principio podemos omitir el primer paso (iniciar SmartConsole) y aplicar comandos API directamente al servidor de gestión (SMS).

Formas de utilizar la API

Para editar la configuración utilizando la API existen cuatro métodos principales:

1) Usar la utilidad mgmt_cli

Ejemplo — # mgmt_cli add host name host1 ip-address 192.168.2.100
Este comando se ejecuta desde la línea de comandos del servidor de gestión (SMS). Creo que la sintaxis del comando es clara: se crea host1 con la dirección 192.168.2.100.

2) Ingresar comandos API a través de clish (en modo experto)

En esencia, solo necesitas iniciar sesión en la línea de comandos (mgmt login) con la cuenta utilizada para conectarse a través de SmartConsole (o la cuenta root). Luego podrás ingresar comandos API (en este caso no es necesario usar la utilidad antes de cada comando mgmt_cli). Puedes crear scripts completos en BASH.Ejemplo de un script que crea un host:

script de Bash

#!/bin/bash

main() {
    clear

    #LOGIN (don't ask for username and password, user is already logged in to Management server as 'root' user)
    mgmt_cli login --root true > id_add_host.txt
    on_error_print_and_exit "Error: Failed to login, check that the server is up and running (run 'api status')"

    #READ HOST NAME
    printf "Enter host name:n"
    read -e host_name
    on_empty_input_print_and_exit "$host_name" "Error: The host's name cannot be empty."

    #READ IP ADDRESS
    printf "nEnter host IP address:n"
    read -e ip
    on_empty_input_print_and_exit "$ip" "Error: The host's IP address cannot be empty."

    #CREATE HOST
    printf "Creating new host: $host_name with IP address: $ipn"
    new_host_response=$(mgmt_cli add host name $host_name ip-address $ip -s id_add_host.txt 2> /dev/null)
    on_error_print_and_exit "Error: Failed to create host object. n$new_host_response"

    #PUBLISH THE CHANGES
    printf "nPublishing the changesn"
    mgmt_cli publish --root true -s id_add_host.txt &> /dev/null
    on_error_print_and_exit "Error: Failed to publish the changes."

    #LOGOUT
    logout
	
	printf "Done.n"
}

logout(){
	mgmt_cli logout --root true -s id_add_host.txt &> /dev/null
}

on_error_print_and_exit(){
    if [ $? -ne 0 ]; then
        handle_error "$1" 
	fi
}

handle_error(){
    printf "n$1n" #print error message
    mgmt_cli discard --root true -s id_add_host.txt &> /dev/null
    logout
    exit 1
}

on_empty_input_print_and_exit(){
	if [ -z "$1" ]; then
		printf "$2n" #print error message
		logout
		exit 0
	fi
}

# Script starts here. Call function "main".
main

Si te interesa, puedes ver el video correspondiente:

Reproducir video

3) A través de SmartConsole, abriendo la ventana CLI

Todo lo que necesitas hacer es lanzar la ventana en cli-runtime y kubectl directamente desde SmartConsole, como se muestra en la imagen de abajo.

Check Point R80.10 API. Administración a través de CLI, scripts y más

En esta ventana puedes comenzar a ingresar comandos API de inmediato.

4) Servicios web. Utilizar solicitud Post HTTPS (REST API)

En nuestra opinión, este es uno de los métodos más prometedores, ya que permite “construir” aplicaciones completas para la gestión del servidor de gestión (disculpa la tautología). A continuación, analizaremos este método con más detalle.

Resumiendo:

  1. API + cli es más adecuado para personas acostumbradas a Cisco;
  2. API + shell para utilizar scripts y realizar tareas rutinarias;
  3. REST API para la automatización.

Activación de la API

Por defecto, la API está activada en los servidores de gestión con más de 4 GB de RAM y en configuraciones independientes con más de 8 GB de RAM. Se puede verificar el estado utilizando el comando: api status

Si resulta que la API está desactivada, es bastante sencillo habilitarla a través de SmartConsole: Administrar & Configuraciones > Blades > Management API > Configuraciones avanzadas

Check Point R80.10 API. Administración a través de CLI, scripts y más

Luego, publica (Publicar) los cambios y ejecuta el comando api restart.

Solicitudes web + Python

Para ejecutar comandos API se pueden utilizar solicitudes web con el uso de Python y bibliotecas requests, json.En general, la estructura de la solicitud web consiste en tres partes:

1) Dirección

(https://<servidor de gestión>:<puerto>/web_api/<comando>) 


2) Encabezados HTTP

content-Type: application/json
x-chkp-sid: <token de ID de sesión devuelto por el comando de inicio de sesión>


3) Payload de la solicitud

Texto en formato JSON que contiene los diferentes parámetros

Ejemplo para llamar a varios comandos:


def api_call(ip_addr, port, command, json_payload, sid):
    url = 'https://' + ip_addr + ':' + str(port) + '/web_api/' + command
    if sid == '':
        request_headers = {'Content-Type' : 'application/json'}
    else:
        request_headers = {'Content-Type' : 'application/json', 'X-chkp-sid' : sid}
    r = requests.post(url,data=json.dumps(json_payload), headers=request_headers,verify=False)
    return r.json()                                        
'xxx.xxx.xxx.xxx' -> Dirección IP GAIA

Presentamos algunas tareas típicas con las que a menudo nos encontramos al administrar Check Point.

1) Ejemplo de funciones de autenticación y cierre de sesión:

Script


    payload = {'user': 'your_user', 'password' : 'your_password'}
    response = api_call('xxx.xxx.xxx.xxx', 443, 'login',payload, '')
    return response["sid"]

    response = api_call('xxx.xxx.xxx.xxx', 443,'logout', {} ,sid)
    return response["message"]

2) Activación de blades y configuración de red:

Script


new_gateway_data = {'name':'CPGleb','anti-bot':True,'anti-virus' : True,'application-control':True,'ips':True,'url-filtering':True,'interfaces':
                    [{'name':'eth0','topology':'external','ipv4-address': 'xxx.xxx.xxx.xxx','ipv4-network-mask': '255.255.255.0'},
                     {'name':'eth1','topology':'internal','ipv4-address': 'xxx.xxx.xxx.xxx','ipv4-network-mask': '255.255.255.0'}]}
new_gateway_result = api_call('xxx.xxx.xxx.xxx', 443,'set-simple-gateway', new_gateway_data ,sid)
print(json.dumps(new_gateway_result))

3) Cambio de reglas del cortafuegos:

Script


new_access_data={'name':'Cleanup rule','layer':'Network','action':'Accept'}
new_access_result = api_call('xxx.xxx.xxx.xxx', 443,'set-access-rule', new_access_data ,sid)
print(json.dumps(new_access_result))

4) Adición de la capa de aplicación:

Script


add_access_layer_application={ 'name' : 'application123','applications-and-url-filtering' : True,'firewall' : False}
add_access_layer_application_result = api_call('xxx.xxx.xxx.xxx', 443,'add-access-layer', add_access_layer_application ,sid)
print(json.dumps(add_access_layer_application_result))

set_package_layer={"name" : "Standard","access":True,"access-layers" : {"add" : [ { "name" : "application123","position" :2}]} ,"installation-targets" : "CPGleb"}
set_package_layer_result = api_call('xxx.xxx.xxx.xxx', 443,'set-package', set_package_layer ,sid)
print(json.dumps(set_package_layer_result))

5) Publicar e instalar políticas, verificar la ejecución del comando (task-id):

Script


publish_result = api_call('xxx.xxx.xxx.xxx', 443,"publish", {},sid)
print("resultado de publicación: " + json.dumps(publish_result))
new_policy = {'policy-package':'Standard','access':True,'targets':['CPGleb']}
new_policy_result = api_call('xxx.xxx.xxx.xxx', 443,'install-policy', new_policy ,sid)
print(json.dumps(new_policy_result))

task_id=(json.dumps(new_policy_result ["task-id"]))
len_str=len(task_id)
task_id=task_id[1:(len_str-1)]
show_task_id ={'task-id':(task_id)}
show_task=api_call('xxx.xxx.xxx.xxx',443,'show-task',show_task_id,sid)
print(json.dumps(show_task))

6) Agregar host:

Script


new_host_data = {'name':'JohnDoePc', 'ip-address': '192.168.0.10'}
new_host_result = api_call('xxx.xxx.xxx.xxx', 443,'add-host', new_host_data ,sid)
print(json.dumps(new_host_result))

7) Agregar campo de Prevención de Amenazas:

Script


set_package_layer={'name':'Standard','threat-prevention' :True,'installation-targets':'CPGleb'}
set_package_layer_result = api_call('xxx.xxx.xxx.xxx', 443,'set-package',set_package_layer,sid)
print(json.dumps(set_package_layer_result))

8) Ver lista de sesiones

Script


new_session_data = {'limit':'50', 'offset':'0','details-level' : 'standard'}
new_session_result = api_call('xxx.xxx.xxx.xxx', 443,'show-sessions', new_session_data ,sid)
print(json.dumps(new_session_result))

9) Crear un nuevo perfil:

Script


add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "bajo","active-protections-severity" : "bajo o superior","confidence-level-medium" : "prevenir",
  "confidence-level-high" : "prevenir", "threat-emulation" : True,"anti-virus" : True,"anti-bot" : True,"ips" : True,
  "ips-settings" : { "newly-updated-protections" : "staging","exclude-protection-with-performance-impact" : True,"exclude-protection-with-performance-impact-mode" : "Alto o inferior"},
  "overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Prevenir","track" : "Registrar"},
                  {"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Prevenir","track" : "Registrar"} ]}
add_threat_profile_result=api_call('xxx.xxx.xxx.xxx',443,'add-threat-profile',add_threat_profile,sid)
print(json.dumps(add_threat_profile_result))  

10) Cambiar acción para la firma de IPS:

Script


set_threat_protection={
  "name" : "3Com Network Supervisor Directory Traversal",
  "overrides" : [{ "profile" : "Apeiron","action" : "Detectar","track" : "Registrar","capture-packets" : True},
    { "profile" : "Apeiron", "action" : "Detectar", "track" : "Registrar", "capture-packets" : False} ]}
set_threat_protection_result=api_call('xxx.xxx.xxx.xxx',443,'set-threat-protection',set_threat_protection,sid)
print(json.dumps(set_threat_protection_result))

11) Añadir tu propio servicio:

Script


add_service_udp={    "name" : "Dota2_udp", "port" : '27000-27030',
"keep-connections-open-after-policy-installation" : False,
"session-timeout" : 0, "match-for-any" : True,
"sync-connections-on-cluster" : True,
"aggressive-aging" : {"enable" : True, "timeout" : 360,"use-default-timeout" : False  },
"accept-replies" : False}
add_service_udp_results=api_call('xxx.xxx.xxx.xxx',443,"add-service-udp",add_service_udp,sid)
print(json.dumps(add_service_udp_results))

12) Añadir categoría, sitio o grupo:

Script


add_application_site_category={  "name" : "Valve","description" : "Valve Games"}
add_application_site_category_results=api_call('xxx.xxx.xxx.xxx',443,"add-application-site-category",add_application_site_category,sid)
print(json.dumps(add_application_site_category_results))

add_application_site={    "name" : "Dota2", "primary-category" : "Valve",  "description" : "Dotka",
  "url-list" : [ "www.dota2.ru" ], "urls-defined-as-regular-expression" : False}
add_application_site_results=api_call('xxx.xxx.xxx.xxx',443,"add-application-site " , 
add_application_site , sid)
print(json.dumps(add_application_site_results))

add_application_site_group={"name" : "Juegos","members" : [ "Dota2"]}
add_application_site_group_results=api_call('xxx.xxx.xxx.xxx',443,"add-application-site-group",add_application_site_group,sid)
print(json.dumps(add_application_site_group_results))

Además, con Web API puedes añadir y eliminar redes, hosts, roles de acceso, etc. Hay una opción para configurar blades Antivirus, Antibot, IPS, VPN. También es posible instalar licencias usando el comando run-script. Con todos los comandos API de Check Point se puede consultar aquí.

Check Point API + Postman

También es conveniente utilizar Check Point Web API en conjunto con Postman. Postman tiene versiones de escritorio para Windows, Linux y MacOS. Además, hay un plugin para Google Chrome. Y lo utilizaremos. Primero, necesitas buscar Postman en Google Chrome Store e instalar:

Check Point R80.10 API. Administración a través de CLI, scripts y más

Con esta herramienta, podremos generar solicitudes Web a la API de Check Point. Para no tener que recordar todos los comandos de la API, existe la posibilidad de importar las llamadas colecciones (plantillas), que ya contienen todos los comandos necesarios:

Check Point R80.10 API. Administración a través de CLI, scripts y más

Aquí encontrará colección para R80.10. Después de la importación, se nos harán disponibles las plantillas de comandos de la API:

Check Point R80.10 API. Administración a través de CLI, scripts y más

En mi opinión, es muy conveniente. Se puede comenzar muy rápidamente el desarrollo de aplicaciones utilizando la API de Check Point.

Check Point + Ansible

También me gustaría señalar que existe Ansible módulo para la API de CheckPoint. El módulo permite gestionar configuraciones, pero no es tan conveniente para resolver tareas exóticas. Escribir scripts en cualquier lenguaje de programación proporciona soluciones más flexibles y convenientes.

Salida

Con esto, podemos concluir nuestra pequeña revisión de la API de Check Point. En mi opinión, esta función ha sido muy esperada y necesaria. La aparición de la API abre oportunidades muy amplias tanto para los administradores de sistemas como para los integradores de sistemas que trabajan con productos de Check Point. Orquestación, automatización, feedback con SIEM… todo esto ahora es posible.

P.D. Más artículos sobre Check Point puede encontrarlos, como siempre, en nuestro blog Habr o en el blog de el sitio web.

P.D.S. Puede hacer preguntas técnicas relacionadas con la configuración de Check Point aquí

Solo los usuarios registrados pueden participar en la encuesta. Inicie sesión, por favor.

¿Planea utilizar la API?

  • 70,6%Sí12

  • 23,5%No4

  • 5,9%Ya estoy usando1

17 usuarios votaron. 3 usuarios se abstuvieron.

Fuente: habr.com

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster