Check Point R80.10 API. Xestión mediante CLI, scripts e moito máis

Check Point R80.10 API. Xestión mediante CLI, scripts e moito máis

Estou seguro de que todos os que xa traballaron Punto de verificación, houbo unha queixa imposibilidade de editar a configuración desde a liña de comandos. Isto é especialmente estraño para aqueles que xa traballaron con Cisco ASA, onde se pode configurar absolutamente todo na CLI. Con Check Point é ao revés: todas as configuracións de seguridade realizáronse exclusivamente desde a interface gráfica. Non obstante, algunhas cousas son completamente inconvenientes de facer a través da GUI (mesmo unha tan conveniente como a de Check Point). Por exemplo, a tarefa de engadir 100 novos hosts ou redes convértese nun procedemento longo e tedioso. Para cada obxecto terás que premer varias veces co rato e introducir o enderezo IP. O mesmo vale para crear un grupo de sitios ou activar/desactivar sinaturas IPS masivas. Neste caso, hai unha alta probabilidade de cometer un erro.

Un "milagre" ocorreu recentemente. Co lanzamento da nova versión Gaia R80 anunciouse a oportunidade Uso da API, que abre amplas oportunidades para automatizar a configuración, a administración, o seguimento, etc. Agora podes:

  • crear obxectos;
  • engadir ou editar listas de acceso;
  • activar/desactivar as láminas;
  • configurar interfaces de rede;
  • instalar políticas;
  • e moito máis.

Para ser sincero, non entendo como pasou esta noticia por Habr. Neste artigo describiremos brevemente como usar a API e proporcionaremos varios exemplos prácticos. Configuración de CheckPoint mediante scripts.

Gustaríame facer unha reserva de inmediato para que a API se use só para o servidor de xestión. Eses. Aínda é imposible xestionar pasarelas sen un servidor de xestión.

Quen pode usar esta API en principio?

  1. Administradores do sistema que queiran simplificar ou automatizar as tarefas rutineiras de configuración de Check Point;
  2. Empresas que queiran integrar Check Point con outras solucións (sistemas de virtualización, sistemas de tickets, sistemas de xestión de configuración, etc.);
  3. Integradores de sistemas que queiran estandarizar a configuración ou crear produtos adicionais relacionados con Check Point.

Esquema típico

Entón, imaxinemos un esquema típico con Check Point:

Check Point R80.10 API. Xestión mediante CLI, scripts e moito máis

Como de costume temos unha pasarela (SG), servidor de xestión (SMS) e consola de administración (SmartConsole). Neste caso, o proceso de configuración de pasarela habitual ten o seguinte aspecto:

Check Point R80.10 API. Xestión mediante CLI, scripts e moito máis

Eses. Primeiro cómpre executar no ordenador do administrador SmartConsole, co que nos conectamos ao servidor de Xestión (SMS). A configuración de seguranza realízase na SMS e só despois aplícase (política de instalación) para pasarela (SG).

Ao usar API de xestión, basicamente podemos saltar o primeiro punto (iniciar SmartConsole) e usar Comandos da API directamente ao servidor de xestión (SMS).

Formas de usar a API

Hai catro formas principais de editar a configuración usando a API:

1) Usando a utilidade mgmt_cli

Exemplo - # mgmt_cli engadir o nome do host host1 enderezo ip 192.168.2.100
Este comando execútase desde a liña de comandos do servidor de xestión (SMS). Creo que a sintaxe do comando é clara: o host1 créase co enderezo 192.168.2.100.

2) Introduza os comandos da API mediante clic (en modo experto)

Basicamente, todo o que tes que facer é iniciar sesión na liña de comandos (inicio de sesión de administración) baixo a conta que se utiliza ao conectarse mediante SmartConsole (ou conta root). Entón podes entrar Comandos da API (neste caso non é necesario usar a utilidade antes de cada comando mgmt_cli). Podes crear completo Scripts BASH. Un exemplo de script que crea o host:

Script 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

Se estás interesado podes ver o vídeo correspondente:

3) A través de SmartConsole abrindo a xanela da CLI

Todo o que tes que facer é abrir a fiestra CLI directamente desde SmartConsole, como se mostra na imaxe de abaixo.

Check Point R80.10 API. Xestión mediante CLI, scripts e moito máis

Nesta xanela, pode comezar inmediatamente a introducir comandos da API.

4) Servizos web. Usar a solicitude de publicación HTTPS (API REST)

Na nosa opinión, este é un dos métodos máis prometedores, porque permítelle "construír" aplicacións enteiras baseadas en xestión do servidor de xestión (perdón pola tautoloxía). A continuación veremos este método con máis detalle.

Para resumir:

  1. API + cli máis axeitado para persoas afeitas a Cisco;
  2. API + shell para aplicar guións e realizar tarefas rutineiras;
  3. API REST para automatización.

Activando a API

Por defecto, a API está habilitada en servidores de xestión con máis de 4 GB de RAM e configuracións autónomas con máis de 8 GB de RAM. Podes comprobar o estado usando o comando: estado da API

Se resulta que a API está desactivada, é bastante sinxelo activala a través de SmartConsole: Xestionar e configuración > Blades > API de xestión > Configuración avanzada

Check Point R80.10 API. Xestión mediante CLI, scripts e moito máis

Despois publica (Publicar) cambia e executa o comando reinicio da api.

Solicitudes web + Python

Para executar comandos da API, pode usar solicitudes web usando Pitão e bibliotecas solicitudes, JSON. En xeral, a estrutura dunha solicitude web consta de tres partes:

1) Enderezo

(https://<managemenet server>:<port>/web_api/<command>) 


2) Cabeceiras 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 contén os diferentes parámetros

Exemplo para chamar 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

Aquí tes algunhas tarefas típicas que atopas con máis frecuencia ao administrar Check Point.

1) Exemplo de funcións de autorización e saída:

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) Acender as láminas e configurar a rede:

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) Modificación das regras do 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) Engadindo 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) Publique e configure a política, comprobe a execución do comando (ID de tarefa):

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) Engadir host:

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) Engade un campo de prevención de ameazas:

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 a lista de sesións

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 novo 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) Cambia a acción para a sinatura 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) Engade o teu servizo:

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) Engade unha categoría, sitio ou 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))

Ademais, coa axuda API web pode engadir e eliminar redes, hosts, roles de acceso, etc. As láminas pódense personalizar Antivirus, Antibot, IPS, VPN. Incluso é posible instalar licenzas usando o comando run-script. Todos os comandos da API de Check Point pódense atopar aquí aquí.

Check Point API + Postman

Tamén cómodo de usar Check Point Web API en conxunto con Carteiro. Postman ten versións de escritorio para Windows, Linux e MacOS. Ademais, hai un complemento para Google Chrome. Isto é o que usaremos. Primeiro cómpre atopar Postman en Google Chrome Store e instalar:

Check Point R80.10 API. Xestión mediante CLI, scripts e moito máis

Usando esta utilidade, poderemos xerar solicitudes web á API de Check Point. Para non lembrar todos os comandos da API, é posible importar as chamadas coleccións (modelos), que xa conteñen todos os comandos necesarios:

Check Point R80.10 API. Xestión mediante CLI, scripts e moito máis

Aquí atoparás colección para R80.10. Despois da importación, os modelos de comandos da API estarán dispoñibles para nós:

Check Point R80.10 API. Xestión mediante CLI, scripts e moito máis

Na miña opinión, isto é moi cómodo. Podes comezar rapidamente a desenvolver aplicacións usando a API de Check Point.

Check Point + Ansible

Tamén me gustaría sinalar que hai Ansible módulo para CheckPoint API. O módulo permite xestionar configuracións, pero non é tan cómodo para resolver problemas exóticos. Escribir scripts en calquera linguaxe de programación proporciona solucións máis flexibles e cómodas.

Saída

Aquí é onde probablemente remataremos a nosa breve revisión da API de Check Point. Na miña opinión, esta función era moi esperada e necesaria. A aparición da API abre oportunidades moi amplas tanto para os administradores de sistemas como para os integradores de sistemas que traballan cos produtos Check Point. Orquestración, automatización, feedback SIEM... todo é posible agora.

PD Máis artigos sobre Punto de verificación coma sempre podes atopalo no noso blog Habr ou no blog en On-line.

PSS Para preguntas técnicas relacionadas coa configuración de Check Point, pode aquí

Só os usuarios rexistrados poden participar na enquisa. Rexístrate, por favor.

Estás a planear usar a API?

  • 70,6%Si 12

  • 23,5%No 4

  • 5,9%Xa está usando 1

Votaron 17 usuarios. 3 usuarios abstivéronse.

Fonte: www.habr.com

Engadir un comentario