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

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

Sono sicuro che chiunque abbia mai lavorato con Check Point, c'è stata una denuncia in merito impossibilità di modificare la configurazione dalla riga di comando. Ciò è particolarmente strano per coloro che hanno già lavorato con Cisco ASA, dove assolutamente tutto può essere configurato nella CLI. Con Check Point è il contrario: tutte le impostazioni di sicurezza vengono eseguite esclusivamente dall'interfaccia grafica. Tuttavia, alcune cose sono completamente scomode da eseguire tramite la GUI (anche una comoda come quella di Check Point). Ad esempio, il compito di aggiungere 100 nuovi host o reti si trasforma in una procedura lunga e noiosa. Per ogni oggetto dovrai cliccare più volte con il mouse e inserire l'indirizzo IP. Lo stesso vale per la creazione di un gruppo di siti o per l'abilitazione/disabilitazione di massa delle firme IPS. In questo caso, c'è un'alta probabilità di commettere un errore.

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?

  1. Amministratori di sistema che desiderano semplificare o automatizzare le attività di configurazione di routine di Check Point;
  2. Aziende che vogliono integrare Check Point con altre soluzioni (sistemi di virtualizzazione, sistemi di ticket, sistemi di gestione della configurazione, ecc.);
  3. 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:

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

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:

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

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.

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

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:

  1. API+cli più adatto a persone abituate a Cisco;
  2. API + shell per applicare script ed eseguire attività di routine;
  3. 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

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

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 qui.

Check Point API + Postino

Comodo anche da usare API Web di Check Point insieme a Postino. Postman ha versioni desktop per Windows, Linux e MacOS. Inoltre c'è un plugin per Google Chrome. Questo è ciò che useremo. Per prima cosa devi trovare Postman nel Google Chrome Store e installare:

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

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:

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

Qui troverete collezione per R80.10. Dopo l'importazione, i modelli di comandi API saranno a nostra disposizione:

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

Secondo me questo è molto conveniente. Puoi iniziare rapidamente a sviluppare applicazioni utilizzando l'API Check Point.

Checkpoint + Ansible

Vorrei anche notare che c'è ansible modulo per l'API CheckPoint. Il modulo consente di gestire le configurazioni, ma non è così conveniente per risolvere problemi esotici. Scrivere script in qualsiasi linguaggio di programmazione offre soluzioni più flessibili e convenienti.

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 Check Point come sempre lo trovate sul nostro blog Habr o sul blog all'indirizzo sito web.

PSS Per domande tecniche relative alla configurazione di Check Point, puoi farlo qui

Solo gli utenti registrati possono partecipare al sondaggio. AccediPer favore.

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

Aggiungi un commento