Compruebe la API R80.10 del punto. Gestión vía CLI, scripts y más

Compruebe la API R80.10 del punto. Gestión vía CLI, scripts y más

Estoy seguro de que todos los que alguna vez han trabajado con Check Point, hubo una queja sobre imposibilidad de editar la configuración desde la línea de comando. Esto es especialmente extraño para quienes han trabajado anteriormente con Cisco ASA, donde absolutamente todo se puede configurar en la CLI. Con Check Point ocurre lo contrario: todas las configuraciones de seguridad se realizaron exclusivamente desde la interfaz gráfica. Sin embargo, algunas cosas 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 tendrás que hacer clic con el ratón varias veces e introducir la dirección IP. Lo mismo ocurre con la creación de un grupo de sitios o la habilitación/deshabilitación masiva de firmas IPS. En este caso, existe una alta probabilidad de cometer un error.

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?

  1. Administradores de sistemas que desean simplificar o automatizar las tareas rutinarias de configuración de Check Point;
  2. Empresas que quieran integrar Check Point con otras soluciones (sistemas de virtualización, sistemas de tickets, sistemas de gestión de configuración, etc.);
  3. 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:

Compruebe la API R80.10 del punto. Gestión vía CLI, scripts y más

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:

Compruebe la API R80.10 del punto. Gestión vía CLI, scripts y más

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.

Compruebe la API R80.10 del punto. Gestión vía CLI, scripts y más

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:

  1. API + CLI más adecuado para personas acostumbradas a Cisco;
  2. API + shell para aplicar guiones y realizar tareas rutinarias;
  3. 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

Compruebe la API R80.10 del punto. Gestión vía CLI, scripts y más

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í aquí.

Check Point API + cartero

También es cómodo de usar API web de punto de control en conjunto con Cartero. Postman tiene versiones de escritorio para Windows, Linux y MacOS. Además, existe un complemento para Google Chrome. Esto es lo que usaremos. Primero necesitas encontrar Postman en Google Chrome Store e instalar:

Compruebe la API R80.10 del punto. Gestión vía CLI, scripts y más

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:

Compruebe la API R80.10 del punto. Gestión vía CLI, scripts y más

es encontrará -- para R80.10. Después de la importación, las plantillas de comandos API estarán disponibles para nosotros:

Compruebe la API R80.10 del punto. Gestión vía CLI, scripts y más

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 módulo para la API de CheckPoint. El módulo le permite gestionar configuraciones, pero no es tan conveniente para resolver problemas exóticos. Escribir scripts en cualquier lenguaje de programación proporciona soluciones más flexibles y convenientes.

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 Check Point como siempre lo puedes encontrar en nuestro blog Habr o en el blog de sitio web.

PSS Para preguntas técnicas relacionadas con la configuración de Check Point, puede aquí

Solo los usuarios registrados pueden participar en la encuesta. Registrarsepor favor

¿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

Añadir un comentario