Check Point R80.10 API. Gestione tramite CLI, script e molto altro

Check Point R80.10 API. Gestione tramite CLI, script e molto altro

Sono sicuro che chiunque abbia mai lavorato con Check Point, ha avuto lamentele riguardo alla impossibilità di modificare la configurazione dalla riga di comando. Questo è particolarmente strano per chi ha lavorato con Cisco ASA, dove tutto può essere configurato tramite CLI. Con Check Point è tutto l'opposto: tutte le impostazioni di sicurezza vengono effettuate esclusivamente tramite l'interfaccia grafica. Tuttavia, ci sono alcune cose che non sono affatto comode da fare tramite GUI (anche se è così comoda come quella di Check Point). Ad esempio, aggiungere 100 nuovi host o reti diventa una lunga e noiosa procedura. Per ciascun oggetto è necessario cliccare più volte con il mouse e digitare l'indirizzo IP. Lo stesso vale per la creazione di gruppi di siti o l'attivazione/disattivazione massiccia delle firme IPS. Inoltre, c'è un'alta probabilità di commettere un errore.

Recentemente è successa una "meraviglia". Con il rilascio della nuova versione Gaia R80 è stata annunciata la possibilità di utilizzare l'API, che apre ampie opportunità per automatizzare impostazioni, amministrazione, monitoraggio, ecc. Ora puoi:

  • creare oggetti;
  • aggiungere o modificare le liste di accesso;
  • attivare/disattivare blade;
  • configurare interfacce di rete;
  • installare 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 di configurazione di CheckPoint tramite script.

Vorrei subito precisare che l'API è utilizzata solo per il server di gestione. Vale a dire, non è ancora possibile gestire i gateway senza il server di gestione.

A chi potrebbe servire questa API in generale?

  1. Amministratori di sistema che desiderano semplificare o automatizzare compiti di routine nella configurazione di Check Point;
  2. Aziende che desiderano integrare Check Point con altre soluzioni (sistemi di virtualizzazione, sistemi di ticketing, sistemi di gestione delle configurazioni, ecc.);
  3. Integratori di sistemi che desiderano standardizzare le configurazioni o creare prodotti aggiuntivi correlati a Check Point.

Schema tipico

Quindi, immaginiamo uno schema tipico con Check Point:

Check Point R80.10 API. Gestione tramite CLI, script e molto altro

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

Check Point R80.10 API. Gestione tramite CLI, script e molto altro

Vale a dire, prima di tutto è necessario avviare sul computer dell'amministratore SmartConsole, con cui ci connettiamo al Management server (SMS). Su SMS vengono eseguite le impostazioni di sicurezza, e poi vengono applicate (install policy) al gateway (SG).

Quando utilizzi Management API, fondamentalmente possiamo saltare il primo punto (avviare SmartConsole) e applicare comandi API direttamente al Management server (SMS).

Modalità di utilizzo dell'API

Ci sono quattro modi principali per modificare la configurazione utilizzando l'API:

1) Utilizzando lo strumento mgmt_cli

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

2) Infilare comandi API tramite clish (in modalità esperto)

Fondamentalmente, tutto ciò che devi fare è accedere alla riga di comando (mgmt login) con un account utilizzato per la connessione tramite SmartConsole (o l'account root). Poi puoi inserire comandi API (in questo caso non è necessario utilizzare lo strumento mgmt_cli). È possibile creare script completi in BASH.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 vedere il video corrispondente:

Guarda il video

3) Tramite SmartConsole, aprendo la finestra CLI

Tutto quello che devi fare è avviare la finestra CLI direttamente da SmartConsole, come mostrato nell'immagine seguente.

Check Point R80.10 API. Gestione tramite CLI, script e molto altro

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

4) Servizi Web. Utilizzare HTTPS Post request (REST API)

A nostro avviso, questo è uno dei metodi più promettenti, poiché consente di "costruire" intere applicazioni per la gestione del server di controllo (mi scuso per la tautologia). Di seguito esploreremo questo metodo in modo più dettagliato.

Per riassumere:

  1. API + cli è più adatto per persone abituate a Cisco;
  2. API + shell per applicare script e svolgere attività di routine;
  3. REST API per l'automazione.

Attivazione dell'API

Per impostazione predefinita, l'API è attivata sui server di gestione con più di 4 GB di RAM e nelle configurazioni standalone con più di 8 GB di RAM. Puoi controllare lo stato utilizzando il comando: api status

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

Check Point R80.10 API. Gestione tramite CLI, script e molto altro

Dopo pubblicare (Pubblicazione del report) le modifiche ed eseguire il comando api restart.

Richieste Web + Python

Per eseguire comandi API, puoi utilizzare richieste Web applicando Python e librerie requests, json. In generale, la struttura di una richiesta web è composta da tre parti:

1) Indirizzo

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


2) HTTP Headers

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


3) Request payload

Testo in formato JSON contenente i diversi parametri

Esempio per chiamare vari 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 alcune attività tipiche che ci si trova più spesso ad affrontare nella gestione di Check Point.

1) Esempio di funzioni di login 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) Abilitazione 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 livello Application:

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("risultato pubblicazione: " + 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:

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) Aggiungi campo Threat Prevention:

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" : "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) Modifica l'azione per la firma IPS:

Script


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:

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, utilizzando Web API puoi aggiungere e rimuovere reti, host, ruoli di accesso, ecc. È possibile configurare le blades Antivirus, Antibot, IPS, VPN. È possibile persino installare licenze tramite il comando run-script. È possibile consultare tutte le API di Check Point qui.

Check Point API + Postman

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

Check Point R80.10 API. Gestione tramite CLI, script e molto altro

Con questo strumento saremo in grado di formare richieste Web all'API di Check Point. Per non dover memorizzare tutti i comandi API, è possibile importare quelle che vengono comunemente chiamate collection (modelli), che già contengono tutti i comandi necessari:

Check Point R80.10 API. Gestione tramite CLI, script e molto altro

Qui troverete collection per R80.10. Dopo l'importazione, ci saranno disponibili i modelli dei comandi API:

Check Point R80.10 API. Gestione tramite CLI, script e molto altro

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

Check Point + Ansible

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

Conclusione

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

P.S. Potete trovare più articoli su Check Point come sempre nel nostro blog Habr o nel blog su sito.

P.S.S. Domande tecniche riguardanti la configurazione di Check Point possono essere poste qui

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

Prevedete di utilizzare l'API?

  • 70,6%Sì12

  • 23,5%No4

  • 5,9%La utilizzo già1

Hanno votato 17 utenti. Si sono astenuti 3 utenti.

Fonte: habr.com

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