Check Point R80.10 API. Gestione tramite CLI, script e non solo

Check Point R80.10 API. Gestione tramite CLI, script e non solo

Sono sicuro che chiunque abbia mai lavorato con Check Point, abbia avuto delle lamentele riguardo l'impossibilità di modificare la configurazione da linea di comando. Questo è particolarmente frustrante per chi ha precedentemente lavorato con Cisco ASA, dove praticamente tutto può essere configurato tramite CLI. Al contrario, con Check Point, tutte le impostazioni di sicurezza erano eseguite esclusivamente tramite interfaccia grafica. Tuttavia, alcune operazioni risultano decisamente scomode da fare tramite GUI (anche una così comoda come quella di Check Point). Ad esempio, l'aggiunta di 100 nuovi host o reti diventa un processo lungo e noioso. Per ogni oggetto è necessario cliccare più volte con il mouse e inserire l'indirizzo IP. Lo stesso vale per la creazione di gruppi di siti o per l'attivazione/disattivazione massiva delle firme IPS. C'è anche una grande probabilità di commettere errori.

Recentemente è successo un “miracolo”. Con il rilascio della nuova versione Gaia R80 è stata annunciata la possibilità di utilizzare l'API, che apre ampie possibilità per l'automazione delle impostazioni, la gestione, il monitoraggio, ecc. Ora è possibile:

  • creare oggetti;
  • aggiungere o modificare le access-list;
  • attivare/disattivare i blade;
  • configurare le interfacce di rete;
  • installare le politiche;
  • e molto altro.

Onestamente, non capisco come questa notizia sia sfuggita a Habr. In questo articolo, descriveremo brevemente come utilizzare l'API e forniremo alcuni esempi pratici. configurazioni di CheckPoint tramite script.

Vorrei subito precisare che l'API viene utilizzata solo per il server di Management. Cioè, gestire i gateway senza il server di Management rimane impossibile.

A chi potrebbe essenzialmente servire questa API?

  1. Amministratori di sistema che desiderano semplificare o automatizzare le attività di configurazione di Check Point;
  2. Aziende che vogliono integrare Check Point con altre soluzioni (sistemi di virtualizzazione, sistemi di ticketing, sistemi di gestione della configurazione, ecc.);
  3. System integrator che desiderano standardizzare le configurazioni o creare prodotti aggiuntivi legati a Check Point.

Schema tipico

Quindi, immaginiamo uno schema tipico con Check Point:

Check Point R80.10 API. Gestione tramite CLI, script e non solo

Come al solito, abbiamo un gateway (SG), un server di gestione (SMS) e la console dell'amministratore (SmartConsole). Di conseguenza, il processo di configurazione del gateway appare come segue:

Check Point R80.10 API. Gestione tramite CLI, script e non solo

Cioè, prima di tutto, è necessario avviare sul computer dell'amministratore SmartConsole, tramite il quale ci connettiamo al server di gestione (SMS). Le impostazioni di sicurezza vengono eseguite su SMS e poi applicate (install policy) al gateway (SG).

Utilizzando il Management API, possiamo sostanzialmente saltare il primo punto (lancio di SmartConsole) e applicare comandi API direttamente al server di gestione (SMS).

Modi di utilizzare l'API

Ci sono quattro metodi principali per modificare la configurazione tramite l'API:

1) Utilizzando l'utilità mgmt_cli

Esempio — # mgmt_cli add host name host1 ip-address 192.168.2.100
Questo comando viene eseguito dalla riga di comando del server di gestione (SMS). Penso che la sintassi del comando sia chiara — viene creato host1 con l'indirizzo 192.168.2.100.

2) Digitando i comandi API tramite clish (in modalità esperto)

Fondamentalmente, tutto ciò che devi fare è accedere dalla riga di comando (mgmt login) con un'account utilizzato durante la connessione tramite SmartConsole (o account root). Dopodiché, puoi inserire comandi API (in questo caso non è necessario utilizzare l'utilità prima di ogni comando mgmt_cli). Puoi creare script completi in BASH.. Ecco un esempio di uno script che crea un 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 sei interessato, puoi guardare il video corrispondente:

Riproduci video

3) Tramite SmartConsole, aprendo la finestra CLI

Tutto ciò che devi fare è avviare la finestra CLI direttamente da SmartConsole, come mostrato nell'immagine qui sotto.

Check Point R80.10 API. Gestione tramite CLI, script e non solo

In questa finestra puoi iniziare subito a inserire i comandi API.

4) Web Services. Utilizzare richiesta HTTPS Post (REST API)

A nostro avviso, questo è uno dei metodi più promettenti, poiché consente di “costruire” intere applicazioni per la gestione del server (mi scuso per la tautologia). Qui sotto approfondiremo questo metodo.

Se dobbiamo riassumere:

  1. API + cli è più adatto per chi è abituato a Cisco;
  2. API + shell per l’applicazione di script e l'esecuzione di compiti di routine;
  3. REST API per l'automazione.

Attivazione dell'API

Di default, l'API è attivata sui server di gestione con più di 4 GB di RAM e configurazioni standalone con RAM superiore a 8 GB. Puoi controllare lo stato con il comando: api status

Se risulta che l'API è disattivata, è piuttosto semplice attivarla attraverso SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Check Point R80.10 API. Gestione tramite CLI, script e non solo

Poi pubblica (Pubblica) le modifiche e esegui il comando api restart.

Web requests + Python

Per eseguire i comandi API puoi utilizzare le web request con l'utilizzo di Python e librerie requests, json. In generale, la struttura di una web request consiste in tre parti:

1) Indirizzo

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


2) Intestazioni HTTP

content-Type: application/json
x-chkp-sid: <token ID sessione restituito dal comando di login>


3) Payload della richiesta

Testo in formato JSON contenente i diversi parametri

Esempio per chiamare diversi comandi:


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' -> Indirizzo IP GAIA

Esaminiamo alcuni compiti tipici che ci si trova più spesso ad affrontare durante l'amministrazione di Check Point.

1) Esempio di funzioni di accesso e logout:

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) Attivazione dei blade e configurazione della rete:

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) Modifica delle regole del firewall:

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) Aggiunta del layer Applicazione:

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) Pubblicazione e installazione della politica, verifica dell'esecuzione del comando (task-id):

Script


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) Aggiungere 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) Aggiungere campo Prevenzione delle minacce:

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) Visualizza l'elenco delle sessioni

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) Crea un nuovo profilo:

Script


add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "basso","active-protections-severity" : "basso o superiore","confidence-level-medium" : "prevenire",
  "confidence-level-high" : "prevenire", "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 inferiore"},
  "overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Prevenire","track" : "Log"},
                  {"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Prevenire","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 l'azione per la firma IPS:

Script


set_threat_protection={
  "name" : "3Com Network Supervisor Directory Traversal",
  "overrides" : [{ "profile" : "Apeiron","action" : "Rileva","track" : "Log","capture-packets" : True},
    { "profile" : "Apeiron", "action" : "Rileva", "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) Aggiungi il tuo servizio:

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) Aggiungi categoria, sito o gruppo:

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" : "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))

Inoltre, grazie a Web API puoi aggiungere e rimuovere reti, host, ruoli di accesso ecc. È possibile configurare i blade Antivirus, Antibot, IPS, VPN. È possibile anche installare licenze tramite il comando run-script. Puoi consultare tutte le API Check Point qui.

Check Point API + Postman

È anche comodo utilizzare Check Point Web API in combinazione con Postman. Postman ha versioni desktop per Windows, Linux e MacOS. Inoltre, c'è un plugin per Google Chrome. Lo utilizzeremo. Per iniziare, è necessario cercare Postman nel Google Chrome Store e installarlo:

Check Point R80.10 API. Gestione tramite CLI, script e non solo

Con questo strumento possiamo generare richieste Web per l'API Check Point. Per non dover memorizzare tutti i comandi API, è possibile importare quelle che vengono chiamate collection (modelli), che contengono già tutti i comandi necessari:

Check Point R80.10 API. Gestione tramite CLI, script e non solo

Qui troverete collection per R80.10. Dopo l'importazione, avremo accesso ai modelli dei comandi API:

Check Point R80.10 API. Gestione tramite CLI, script e non solo

A mio avviso, è molto comodo. È possibile iniziare rapidamente a sviluppare applicazioni utilizzando l'API di Check Point.

Check Point + Ansible

Vorrei anche sottolineare che esiste Ansible modulo per l'API di CheckPoint. Il modulo consente di gestire le configurazioni, ma non è così comodo per affrontare compiti più complessi. Scrivere script in qualsiasi linguaggio di programmazione offre soluzioni più flessibili e convenienti.

Risultato

Concludiamo qui la nostra breve panoramica su Check Point API. A mio avviso, questa funzione era molto attesa e necessaria. L'introduzione dell'API apre ampie possibilità sia per gli amministratori di sistema sia per gli integratori di sistemi che lavorano con i prodotti Check Point. Orchestrazione, automazione, feedback con SIEM... tutto questo è ora possibile.

P.S. Altri articoli su Check Point puoi sempre trovarli nel nostro blog Habr o nel blog su sito.

P.S.S. Puoi porre domande tecniche relative alla configurazione di Check Point qui

Solo gli utenti registrati possono partecipare al sondaggio. Accedi, per favore.

Hai intenzione di utilizzare l'API?

  • 70,6%Sì12

  • 23,5%No4

  • 5,9%Già in uso1

Hanno votato 17 utenti. 3 utenti hanno scelto di astenersi.

Fonte: habr.com

Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS 🔥 Acquista hosting affidabile per siti web con protezione DDoS, server VPS VDS | ProHoster