Check Point R80.10 API. Gestione via CLI, scripts è più

Check Point R80.10 API. Gestione via CLI, scripts è più

Sò sicuru chì tutti quelli chì anu travagliatu Check Point, ci era una lagnanza impossibilità di edità a cunfigurazione da a linea di cummanda. Questu hè soprattuttu stranu per quelli chì anu travagliatu prima cù Cisco ASA, induve assolutamente tuttu pò esse cunfiguratu in u CLI. Cù Check Point hè l'inversu - tutti i paràmetri di sicurità sò stati realizati solu da l'interfaccia grafica. Tuttavia, certe cose sò cumplettamente inconvenienti da fà attraversu a GUI (ancu una cunvene cum'è Check Point). Per esempiu, u compitu di aghjunghje 100 novi ospiti o rete si trasforma in una prucedura longa è tediosa. Per ogni ughjettu vi tuccherà à cliccà u mouse parechje volte è entre in l'indirizzu IP. U stessu passa per creà un gruppu di siti o massiu attivazione / disattivazione di signature IPS. In questu casu, ci hè una alta probabilità di fà un sbagliu.

Un "miraculu" hè accadutu pocu pocu tempu. Cù a liberazione di a nova versione Gaia R80 l'oppurtunità hè stata annunziata L'usu di l'API, chì apre una larga opportunità per l'automatizazione di paràmetri, amministrazione, monitoraghju, etc. Avà pudete:

  • creà ogetti;
  • aghjunghje o edità liste d'accessu;
  • attivà / disattivà e lame;
  • cunfigurà l'interfaccia di rete;
  • stallà pulitiche;
  • è assai più.

Per esse onestu, ùn capiscu micca cumu sta nutizia passava da Habr. In questu articulu, descriveremu brevemente cumu utilizà l'API è furnisce parechji esempi pratichi. I paràmetri di CheckPoint usendu scripts.

Vogliu fà una riservazione subitu chì l'API hè aduprata solu per u servitore di Gestione. Quelli. Hè sempre impussibile di gestisce i gateway senza un servitore di Gestione.

Quale pò aduprà sta API in principiu?

  1. Amministratori di sistema chì volenu simplificà o automatizà i travaglii di cunfigurazione di u Check Point di rutina;
  2. L'imprese chì volenu integrà u Check Point cù altre soluzioni (sistemi di virtualizazione, sistemi di bigliettu, sistemi di gestione di cunfigurazione, etc.);
  3. Integratori di sistema chì volenu standardizà e paràmetri o creanu prudutti supplementarii di Check Point.

Schema tipicu

Allora, imaginemu un schema tipicu cù Check Point:

Check Point R80.10 API. Gestione via CLI, scripts è più

Comu di solitu avemu un gateway (SG), servitore di gestione (SMS) è cunsola di amministrazione (SmartConsole). In questu casu, u prucessu di cunfigurazione di u gateway abituale hè cusì:

Check Point R80.10 API. Gestione via CLI, scripts è più

Quelli. Prima avete bisognu di eseguisce nantu à l'urdinatore di l'amministratore SmartConsole, cù quale cunnettamu à u servitore di Gestione (SMS). I paràmetri di sicurezza sò fatti nantu à l'SMS, è solu dopu appiicati (installazione pulitica) à gateway (SG).

Quandu si usa API di gestione, Pudemu basu saltà u primu puntu (lanciare SmartConsole) è aduprà cumandamenti API direttamente à u servitore di gestione (SMS).

Modi per aduprà l'API

Ci hè quattru modi principali per edità a cunfigurazione cù l'API:

1) Utilizendu l'utilità mgmt_cli

Esempiu - # mgmt_cli aghjunghje u nome di l'ospite host1 indirizzu ip 192.168.2.100
Stu cumandamentu hè eseguitu da a linea di cummanda di u Servitore di Gestione (SMS). Pensu chì a sintassi di u cumandamentu hè chjaru - host1 hè creatu cù l'indirizzu 192.168.2.100.

2) Inserite i cumandamenti API via clich (in modu espertu)

In fondu, tuttu ciò chì duvete fà hè login à a linea di cummanda (login mgmt) sottu u contu chì hè utilizatu quandu a cunnessione via SmartConsole (o contu root). Allora pudete entre cumandamenti API (in questu casu ùn ci hè bisognu di utilizà l'utilità prima di ogni cumandamentu mgmt_cli). Pudete creà full-fledged scripts BASH. Un esempiu di un script chì l'ospite crea:

Bash script

#!/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

Sè site interessatu, pudete vede u video currispundente:

3) Via SmartConsole aprendu a finestra CLI

Tuttu ciò chì deve fà hè apre a finestra CLI drittu da SmartConsole, cum'è mostra in a stampa sottu.

Check Point R80.10 API. Gestione via CLI, scripts è più

In questa finestra, pudete immediatamente principià à inserisce cumandamenti API.

4) Servizi Web. Utilizà a dumanda HTTPS Post (API REST)

In u nostru parè, questu hè unu di i metudi più promettenti, perchè permette à voi di "custruì" appricazzioni intera basatu nantu gestione di u servitore di gestione (scusate per a tautologia). Quì sottu, avemu da guardà stu metudu in un pocu più di dettu.

Per riassume:

  1. API + cli più adattatu per i persone chì sò abituati à Cisco;
  2. API + shell per applicà script è eseguisce attività di rutina;
  3. REST API per l'automatizazione.

Attivazione di l'API

Per automaticamente, l'API hè attivata nantu à i servitori di gestione cù più di 4 GB di RAM è cunfigurazioni standalone cù più di 8 GB di RAM. Pudete verificà u statutu cù u cumandimu: statutu api

Se risulta chì l'api hè disattivata, allora hè abbastanza faciule per attivà via SmartConsole: Manage & Settings> Blades> Management API> Advanced Settings

Check Point R80.10 API. Gestione via CLI, scripts è più

Allora pubblicà (Publicate) cambia è eseguite u cumandamentu riavvia l'api.

Richieste Web + Python

Per eseguisce cumandamenti API, pudete aduprà richieste Web usendu pitone e biblioteche dumande, json. In generale, a struttura di una dumanda web hè custituita da trè parti:

1) Indirizzu

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


2) Headers HTTP

content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>


3) Richiede u payload

Testu in formatu JSON chì cuntene i diversi parametri

Esempiu per chjamà diversi cumandamenti:


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

Eccu uni pochi di attività tipiche chì avete più spessu scontru quandu amministrà u Check Point.

1) Esempiu di funzioni d'autorizazione è di logout:

Scrittura


    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) Accende e lame è stabilisce a reta:

Scrittura


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) Cambia e regule di u firewall:

Scrittura


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) Aghjunghjendu u stratu di l'applicazione:

Scrittura


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) Publicate è stabilisce a pulitica, verificate l'esekzione di u cumandimu (task-id):

Scrittura


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:

Scrittura


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) Aghjunghjite un campu di Prevenzione di Minaccia:

Scrittura


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) Vede a lista di sessioni

Scrittura


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 novu prufilu:

Scrittura


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 l'azzione per a firma IPS:

Scrittura


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) Aghjunghjite u vostru serviziu:

Scrittura


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) Aghjunghjite una categuria, situ o gruppu:

Scrittura


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, cù l'aiutu API Web pudete aghjunghje è caccià e rete, ospiti, roli di accessu, etc. I lame ponu esse persunalizati Antivirus, Antibot, IPS, VPN. Hè ancu pussibule installà licenze cù u cumandimu run-script. Tutti i cumandamenti di l'API di Check Point ponu esse truvati quì ccà.

Check Point API + Postman

Ancu cunvenutu à aduprà Check Point Web API in cunjunzione cù Postariu. Postman hà versioni desktop per Windows, Linux è MacOS. Inoltre, ci hè un plugin per Google Chrome. Questu hè ciò chì avemu aduprà. Prima avete bisognu di truvà Postman in Google Chrome Store è installate:

Check Point R80.10 API. Gestione via CLI, scripts è più

Utilizendu sta utilità, pudemu generà richieste Web à l'API Check Point. Per ùn ricurdà micca tutti i cumandamenti API, hè pussibule impurtà e cullezzione chjamate (modelli), chì cuntenenu digià tutti i cumandamenti necessarii:

Check Point R80.10 API. Gestione via CLI, scripts è più

truverete cullezzione di R80.10. Dopu l'importazione, i mudelli di cumandamenti API diventeranu dispunibili per noi:

Check Point R80.10 API. Gestione via CLI, scripts è più

In my opinion, questu hè assai cunvene. Pudete cumincià rapidamente à sviluppà applicazioni cù l'API Check Point.

Puntu di cuntrollu + Ansible

Vogliu ancu nutà chì ci hè Ansible modulu per l'API CheckPoint. U modulu permette di gestisce e cunfigurazioni, ma ùn hè micca cusì convenientu per risolve i prublemi esotici. Scrittura di script in ogni lingua di prugrammazione furnisce soluzioni più flessibili è convenienti.

cunchiusioni

Hè quì chì prubabilmente finiremu a nostra breve revisione di l'API Check Point. In my opinion, sta funzione era assai aspittata è necessaria. L'emergenza di l'API apre opportunità assai larghe per l'amministratori di u sistema è l'integratori di sistema chì travaglianu cù i prudutti Check Point. Orchestrazione, automatizazione, feedback SIEM... tuttu hè pussibule avà.

P.S. Più articuli nantu à Check Point cum'è sempre pudete truvà nantu à u nostru blog Habr o nant'à u blog à situ.

P.S.S. Per e dumande tecniche relative à a stallazione di Check Point, pudete ccà

Solu l'utilizatori registrati ponu participà à l'indagine. Firmà lu, per piacè.

Avete pensatu à aduprà l'API?

  • 70,6%Iè 12

  • 23,5%No 4

  • 5,9%Dighjà aduprà 1

17 utilizatori anu vutatu. 3 utilizatori si sò astenuti.

Source: www.habr.com

Add a comment