Sono sicuro che chiunque abbia mai lavorato con
Un “miracolo” è avvenuto relativamente di recente. Con il rilascio della nuova versione Gaia R80 l'opportunità è stata annunciata Utilizzo dell'API, che apre ampie opportunità per automatizzare le impostazioni, l'amministrazione, il monitoraggio, ecc. Ora puoi:
- creare oggetti;
- aggiungere o modificare elenchi di accesso;
- abilitare/disabilitare le lame;
- configurare le interfacce di rete;
- installare le politiche;
- e molto altro.
Ad essere sincero, non capisco come questa notizia sia passata da Habr. In questo articolo descriveremo brevemente come utilizzare l'API e forniremo diversi esempi pratici. Impostazioni di CheckPoint utilizzando gli script.
Vorrei prenotare subito che l'API venga utilizzata solo per il server di gestione. Quelli. È ancora impossibile gestire i gateway senza un server di gestione.
Chi può utilizzare questa API in linea di principio?
- Amministratori di sistema che desiderano semplificare o automatizzare le attività di configurazione di routine di Check Point;
- Aziende che vogliono integrare Check Point con altre soluzioni (sistemi di virtualizzazione, sistemi di ticket, sistemi di gestione della configurazione, ecc.);
- Integratori di sistema che desiderano standardizzare le impostazioni o creare ulteriori prodotti correlati a Check Point.
Schema tipico
Immaginiamo quindi uno schema tipico con Check Point:
Come al solito abbiamo un gateway (SG), server di gestione (sms) e la console di amministrazione (Console intelligente). In questo caso, il consueto processo di configurazione del gateway è simile al seguente:
Quelli. Per prima cosa devi eseguire sul computer dell'amministratore Console intelligente, con il quale ci colleghiamo al server di gestione (sms). Le impostazioni di sicurezza vengono effettuate sull'SMS e solo successivamente applicate (installare la politica) al gateway (SG).
Quando si utilizza la API di gestione, possiamo praticamente saltare il primo punto (avviare SmartConsole) e utilizzare Comandi API direttamente al server di gestione (SMS).
Modi per utilizzare l'API
Esistono quattro modi principali per modificare la configurazione utilizzando l'API:
1) Utilizzando l'utilità mgmt_cli
Esempio - # mgmt_cli aggiungi nome host host1 indirizzo IP 192.168.2.100
Questo comando viene eseguito dalla riga di comando del Management Server (SMS). Penso che la sintassi del comando sia chiara: host1 viene creato con l'indirizzo 192.168.2.100.
2) Inserisci i comandi API tramite clish (in modalità esperto)
Fondamentalmente, tutto ciò che devi fare è accedere alla riga di comando (accesso gestione) con l'account utilizzato durante la connessione tramite SmartConsole (o account root). Allora puoi entrare Comandi API (in questo caso non è necessario utilizzare l'utility prima di ogni comando mgmt_cli). Puoi creare a tutti gli effetti Script BASH. Un esempio di script creato dall'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 quello che devi fare è aprire la finestra CLI direttamente dal Console intelligente, come mostrato nella foto qui sotto.
In questa finestra puoi iniziare immediatamente a inserire i comandi API.
4) Servizi Web. Utilizza richiesta post HTTPS (API REST)
A nostro avviso, questo è uno dei metodi più promettenti, perché ti permette di “costruire” intere applicazioni basate su gestione del server di gestione (scusate la tautologia). Di seguito esamineremo questo metodo un po’ più in dettaglio.
Riassumere:
- API+cli più adatto a persone abituate a Cisco;
- API + shell per applicare script ed eseguire attività di routine;
- API REST per l'automazione.
Abilitazione dell'API
Per impostazione predefinita, l'API è abilitata sui server di gestione con più di 4 GB di RAM e sulle configurazioni autonome con più di 8 GB di RAM. Puoi controllare lo stato usando il comando: stato dell'API
Se risulta che l'API è disabilitata, è abbastanza semplice abilitarla tramite SmartConsole: Gestisci e impostazioni > Blade > API di gestione > Impostazioni avanzate
Quindi pubblica (Pubblica) cambia ed esegui il comando riavvio dell'API.
Richieste Web + Python
Per eseguire comandi API, è possibile utilizzare le richieste Web utilizzando Python e biblioteche richieste, json. In generale, la struttura di una richiesta web è composta da tre parti:
1)Indirizzo
(https://<managemenet server>:<port>/web_api/<command>)
2) Intestazioni HTTP
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Richiedi il carico utile
Testo in formato JSON contenente i diversi parametri
Esempio per richiamare 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' -> Ip address GAIA
Di seguito sono riportate alcune attività tipiche che si incontrano più spesso durante l'amministrazione di Check Point.
1) Esempio di funzioni di autorizzazione e logout:
Copione
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) Accensione dei blade e configurazione della rete:
Copione
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:
Copione
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 livello di applicazione:
Copione
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) Pubblica e imposta la policy, verifica l'esecuzione del comando (task-id):
Copione
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) Aggiungi host:
Copione
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) Aggiungi un campo Prevenzione delle minacce:
Copione
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
Copione
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:
Copione
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) Modificare l'azione per la firma IPS:
Copione
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) Aggiungi il tuo servizio:
Copione
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 una categoria, sito o gruppo:
Copione
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, con l'aiuto API Web puoi aggiungere e rimuovere reti, host, ruoli di accesso, ecc. Le lame possono essere personalizzate Antivirus, Antibot, IPS, VPN. È anche possibile installare le licenze utilizzando il comando esegui script. Tutti i comandi API Check Point possono essere trovati qui
Check Point API + Postino
Comodo anche da usare API Web di Check Point insieme a
Utilizzando questa utility, saremo in grado di generare richieste Web all'API Check Point. Per non ricordare tutti i comandi API, è possibile importare le cosiddette collection (template), che contengono già tutti i comandi necessari:
Secondo me questo è molto conveniente. Puoi iniziare rapidamente a sviluppare applicazioni utilizzando l'API Check Point.
Checkpoint + Ansible
Vorrei anche notare che c'è ansible
conclusione
Probabilmente finiremo qui la nostra breve recensione dell'API Check Point. Secondo me, questa funzionalità era molto attesa e necessaria. L'emergere dell'API apre opportunità molto ampie sia per gli amministratori di sistema che per gli integratori di sistema che lavorano con i prodotti Check Point. Orchestrazione, automazione, feedback SIEM... ora tutto è possibile.
PS Altri articoli su
PSS Per domande tecniche relative alla configurazione di Check Point, puoi farlo
Solo gli utenti registrati possono partecipare al sondaggio.
Hai intenzione di utilizzare l'API?
-
70,6%Sì12
-
23,5%No4
-
5,9%Già utilizzando1
17 utenti hanno votato. 3 utenti si sono astenuti.
Fonte: habr.com