
Estoy seguro de que todos los que alguna vez han trabajado con , 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?
- Administradores de sistemas que quieren simplificar o automatizar tareas rutinarias de configuración de Check Point;
- Empresas que desean integrar Check Point con otras soluciones (sistemas de virtualización, sistemas de tickets, sistemas de gestión de configuraciones, etc.);
- 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:

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:

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:

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.

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:
- API + cli es más adecuado para personas acostumbradas a Cisco;
- API + shell para utilizar scripts y realizar tareas rutinarias;
- 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

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 .
Check Point API + Postman
También es conveniente utilizar Check Point Web API en conjunto con . 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:

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:

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

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 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 puede encontrarlos, como siempre, en nuestro blog o en el blog de .
P.D.S. Puede hacer preguntas técnicas relacionadas con la configuración de Check Point
Solo los usuarios registrados pueden participar en la encuesta. , 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
