Estoy seguro de que todos los que alguna vez han trabajado con
Un “milagro” ocurrió hace relativamente poco tiempo. Con el lanzamiento de la nueva versión. Gaiá R80 la oportunidad fue anunciada Uso de API, lo que abre amplias oportunidades para automatizar la configuración, la administración, el seguimiento, etc. Ahora usted puede:
- crear objetos;
- agregar o editar listas de acceso;
- habilitar/deshabilitar cuchillas;
- configurar interfaces de red;
- instalar políticas;
- И многое другое.
Para ser honesto, no entiendo cómo pasó esta noticia a Habr. En este artículo describiremos brevemente cómo utilizar la API y proporcionaremos varios ejemplos prácticos. Configuración de CheckPoint mediante scripts.
Me gustaría hacer una reserva de inmediato de que la API se usa solo para el servidor de administración. Aquellos. Todavía es imposible gestionar puertas de enlace sin un servidor de gestión.
¿Quién puede utilizar esta API en principio?
- Administradores de sistemas que desean simplificar o automatizar las tareas rutinarias de configuración de Check Point;
- Empresas que quieran integrar Check Point con otras soluciones (sistemas de virtualización, sistemas de tickets, sistemas de gestión de configuración, etc.);
- Integradores de sistemas que desean estandarizar configuraciones o crear productos adicionales relacionados con Check Point.
esquema típico
Entonces, imaginemos un esquema típico con Check Point:
Como siempre tenemos una puerta de enlace (SG), servidor de gestión (SMS) y la consola de administración (Consola inteligente). En este caso, el proceso habitual de configuración de la puerta de enlace tiene este aspecto:
Aquellos. Primero necesitas ejecutar en la computadora del administrador. Consola inteligente, con el que nos conectamos al servidor de Gestión (SMS). La configuración de seguridad se realiza en el SMS y solo después se aplica (instalar política) a la puerta de enlace (SG).
Cuando se utiliza el API de administración, básicamente podemos omitir el primer punto (iniciar SmartConsole) y usar Comandos API directamente al servidor de gestión (SMS).
Formas de utilizar la API
Hay cuatro formas principales de editar la configuración utilizando la API:
1) Usando la utilidad mgmt_cli
Ejemplo - # mgmt_cli agregar nombre de host host1 dirección IP 192.168.2.100
Este comando se ejecuta desde la línea de comandos del Servidor de administración (SMS). Creo que la sintaxis del comando es clara: host1 se crea con la dirección 192.168.2.100.
2) Ingrese comandos API a través de clish (en modo experto)
Básicamente, todo lo que necesitas hacer es iniciar sesión en la línea de comando (iniciar sesión en administración) en la cuenta que se utiliza al conectarse a través de SmartConsole (o cuenta raíz). Entonces puedes entrar Comandos API (en este caso no es necesario utilizar la utilidad antes de cada comando mgmt_cli). Puedes crear completo. scripts BASH. Un ejemplo de un script que crea el 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 estás interesado puedes ver el vídeo correspondiente:
3) A través de SmartConsole abriendo la ventana CLI
Todo lo que necesitas hacer es abrir la ventana. CLI directo desde Consola inteligente, como se muestra en la siguiente imagen.
En esta ventana, puede comenzar inmediatamente a ingresar comandos API.
4) Servicios web. Utilice la solicitud de publicación HTTPS (API REST)
En nuestra opinión, este es uno de los métodos más prometedores, porque le permite “construir” aplicaciones enteras basadas en gestión del servidor de gestión (perdón por la tautología). A continuación veremos este método con un poco más de detalle.
Para resumir:
- API + CLI más adecuado para personas acostumbradas a Cisco;
- API + shell para aplicar guiones y realizar tareas rutinarias;
- REST API para la automatización.
Habilitando la API
De forma predeterminada, la API está habilitada en servidores de administración con más de 4 GB de RAM y configuraciones independientes con más de 8 GB de RAM. Puede verificar el estado usando el comando: estado de la API
Si resulta que la API está deshabilitada, entonces es bastante fácil habilitarla a través de SmartConsole: Administrar y configuración > Blades > API de administración > Configuración avanzada
Luego publicar (Publicar) cambia y ejecuta el comando reinicio de API.
Solicitudes web + Python
Para ejecutar comandos API, puede utilizar solicitudes web utilizando Python y bibliotecas solicitudes , json. En general, la estructura de una solicitud web consta de tres partes:
1)Dirección
(https://<managemenet server>:<port>/web_api/<command>)
2) encabezados HTTP
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Solicitar carga útil
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' -> Ip address GAIA
A continuación se muestran algunas tareas típicas que encuentra con mayor frecuencia al administrar Check Point.
1) Ejemplo de funciones de autorización y cierre de sesión:
Guión
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) Encendido de los blades y configuración de la red:
Guión
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) Cambiar las reglas del firewall:
Guión
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) Agregar capa de aplicación:
Guión
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 y configurar la política, verificar la ejecución del comando (task-id):
Guión
publish_result = api_call('xxx.xxx.xxx.xxx', 443,"publish", {},sid)
print("publish result: " + 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 anfitrión:
Guión
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) Agregue un campo de Prevención de amenazas:
Guión
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 la lista de sesiones.
Guión
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) Crea un nuevo perfil:
Guión
add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "low","active-protections-severity" : "low or above","confidence-level-medium" : "prevent",
"confidence-level-high" : "prevent", "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" : "High or lower"},
"overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Prevent","track" : "Log"},
{"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Prevent","track" : "Log"} ]}
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 la acción para la firma IPS:
Guión
set_threat_protection={
"name" : "3Com Network Supervisor Directory Traversal",
"overrides" : [{ "profile" : "Apeiron","action" : "Detect","track" : "Log","capture-packets" : True},
{ "profile" : "Apeiron", "action" : "Detect", "track" : "Log", "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) Agrega tu servicio:
Guión
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) Agregue una categoría, sitio o grupo:
Guión
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" : "Games","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 la ayuda API web puede agregar y eliminar redes, hosts, roles de acceso, etc. Las cuchillas se pueden personalizar Antivirus, Antibot, IPS, VPN. Incluso es posible instalar licencias usando el comando ejecutar guión. Todos los comandos de la API de Check Point se pueden encontrar aquí
Check Point API + cartero
También es cómodo de usar API web de punto de control en conjunto con
Con esta utilidad, podremos generar solicitudes web a la API de Check Point. Para no recordar todos los comandos API, es posible importar las llamadas colecciones (plantillas), que ya contienen todos los comandos necesarios:
En mi opinión, esto es muy conveniente. Puede comenzar rápidamente a desarrollar aplicaciones utilizando la API de Check Point.
Punto de control + Ansible
También me gustaría señalar que hay Ansible
conclusión
Aquí es donde probablemente terminemos nuestra breve revisión de la API de Check Point. En mi opinión, esta característica era muy esperada y necesaria. La aparición de la API abre amplias oportunidades tanto para los administradores de sistemas como para los integradores de sistemas que trabajan con los productos Check Point. Orquestación, automatización, retroalimentación SIEM... todo es posible ahora.
PD Más artículos sobre
PSS Para preguntas técnicas relacionadas con la configuración de Check Point, puede
Solo los usuarios registrados pueden participar en la encuesta.
¿Estás planeando 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