
Sono sicuro che chiunque abbia mai lavorato con , 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?
- Amministratori di sistema che desiderano semplificare o automatizzare le attività di configurazione di Check Point;
- Aziende che vogliono integrare Check Point con altre soluzioni (sistemi di virtualizzazione, sistemi di ticketing, sistemi di gestione della configurazione, ecc.);
- 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:

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:

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:

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.

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:
- API + cli è più adatto per chi è abituato a Cisco;
- API + shell per l’applicazione di script e l'esecuzione di compiti di routine;
- 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

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 .
Check Point API + Postman
È anche comodo utilizzare Check Point Web API in combinazione con . 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:

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:

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

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 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 puoi sempre trovarli nel nostro blog o nel blog su .
P.S.S. Puoi porre domande tecniche relative alla configurazione di Check Point
Solo gli utenti registrati possono partecipare al sondaggio. , 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
