Check Point R80.10 API. Správa cez CLI, skripty a nielen

Check Point R80.10 API. Správa cez CLI, skripty a nielen

Som si istý, že každý, kto kedy pracoval s Check Point, mal požiadavku týkajúcu sa nemožnosti úpravy konfigurácie z príkazového riadku. Toto je obzvlášť frustrujúce pre tých, ktorí predtým pracovali s Cisco ASA, kde je možné nastaviť úplne všetko v CLI. Pri Check Pointe je všetko naopak — všetky bezpečnostné nastavenia sa vykonávali výlučne z grafického rozhrania. Avšak niektoré úkony sú úplne nepraktické vykonávať cez GUI (aj také pohodlné ako má Check Point). Napríklad úloha pridať 100 nových hostiteľov alebo sietí sa stáva dlhým a únavným procesom. Pre každý objekt budete musieť niekoľkokrát kliknúť myšou a zadať IP adresu. To isté platí pre vytváranie skupiny stránok alebo hromadné zapínanie/vypínanie IPS signatúr. Pri tom je veľká pravdepodobnosť, že urobíte chybu.

Relatívne nedávno sa stalo „zázrak“. S vydaním novej verzie Gaia R80 bola oznámená možnosť používať API, čo otvára široké možnosti automatizácie nastavení, správy, monitorovania atď. Teraz je možné:

  • vytvárať objekty;
  • pridať alebo upraviť access-listy;
  • zapnúť/vypnúť blades;
  • nastaviť sieťové rozhrania;
  • inštalovať politiky;
  • a mnohého iného.

Ak mám byť úprimný, nechápem, ako táto správa prešla mimo Habra. V tomto článku v skratke opíšeme, ako používať API a uvedieme niekoľko praktických príkladov nastavenia CheckPoint pomocou skriptov.

Ihneď by som chcel dodať, že API sa používa iba pre server správy. To znamená, že spravovať brány bez servera správy je stále nemožné.

Komu by tento API mohol byť užitočný?

  1. Systémoví administrátori, ktorí chcú zjednodušiť alebo automatizovať rutinné úlohy pri nastavení Check Point;
  2. Spoločnosti, ktoré chcú integrovať Check Point s inými riešeniami (virtualizačné systémy, ticketové systémy, systémy správy konfigurácie atď.);
  3. Systémoví integrátori, ktorí chcú štandardizovať nastavenia alebo vytvoriť ďalšie produkty súvisiace s Check Point.

Typová schéma

A tak, predstavíme si typovú schému s Check Point:

Check Point R80.10 API. Správa cez CLI, skripty a nielen

Ako obvykle, máme bránu (SG), server správy (SMS) a konzolu administrátora (SmartConsole). Pri tom bežný proces nastavenia brány vyzerá nasledovne:

Check Point R80.10 API. Správa cez CLI, skripty a nielen

To znamená, že najprv je potrebné na počítači administrátora spustiť SmartConsole, pomocou ktorej sa pripájame k Management serveru (SMS). Na SMS sa uskutočňujú bezpečnostné nastavenia a potom sa aplikujú (inštalačná politika) na bránu (SG).

Pri používaní Management API, v podstate môžeme preskočiť prvý krok (spustenie SmartConsole) a aplikovať API príkazy priamo na Management server (SMS).

Spôsoby použitia API

Na úpravu konfigurácie pomocou API existujú štyri základné spôsoby:

1) Pomocou nástroja mgmt_cli

Príklad — # mgmt_cli add host name host1 ip-address 192.168.2.100
Tento príkaz sa spúšťa z príkazového riadku Management servera (SMS). Myslím, že syntax príkazu je jasná — vytvára sa host1 s adresou 192.168.2.100.

2) Vstupovanie API príkazov cez clish (v expertnom režime)

V podstate, všetko čo potrebujete, je prihlásiť sa v príkazovom riadku (mgmt login) pod účtom, ktorý sa používa pri pripojení cez SmartConsole (alebo root účet). Potom môžete zadávať API príkazy (v tomto prípade nie je potrebné pred každým príkazom používať nástroj mgmt_cli). Môžete vytvárať plnohodnotné BASH skripty. Príklad skriptu, ktorý vytvára hosta:

Bash skript

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

Ak vás to zaujíma, môžete si pozrieť súvisiace video:

Prehrajte video

3) Cez SmartConsole, otvorením okna CLI

Všetko, čo musíte urobiť, je spustiť okno CLI priamo z SmartConsole, ako je znázornené na obrázku nižšie.

Check Point R80.10 API. Správa cez CLI, skripty a nielen

V tomto okne môžete okamžite začať zadávať API príkazy.

4) Web Services. Použiť HTTPS Post request (REST API)

Podľa nášho názoru je to jeden z najperspektívnejších spôsobov, pretože umožňuje ‘stavať’ celé aplikácie pre správu servera (ospravedlňujem sa za tautológiu). Nižšie preskúmame túto metódu podrobnejšie.

Aby sme to zhrnuli:

  1. API + cli je viac vhodné pre ľudí, ktorí sú zvyknutí na Cisco;
  2. API + shell na používanie skriptov a vykonávanie rutinných úloh;
  3. REST API na automatizáciu.

Povolenie API

Predvolene je API povolené na manažérskych serveroch s objemom RAM nad 4GB a standalone konfiguráciách s RAM nad 8GB. Stav môžete skontrolovať pomocou príkazu: api status

Ak sa ukáže, že API je vypnuté, je pomerne jednoduché ho povoliť cez SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Check Point R80.10 API. Správa cez CLI, skripty a nielen

Potom publikujte (Publish) zmeny a spustite príkaz api restart.

Web requests + Python

Na vykonávanie API príkazov je možné použiť webové požiadavky s použitím Python a knižníc requests, json. Vo všeobecnej štruktúre webovej požiadavky sú tri časti:

1) Adresa

(https://<manažérsky server>:<port>/web_api/<príkaz>) 


2) HTTP hlavičky

content-Type: application/json
x-chkp-sid: <session ID token ako je vrátený príkazom na prihlásenie>


3) Žiadosť o payload

Text vo formáte JSON obsahujúci rôzne parametre

Príklad na vyvolanie rôznych príkazov:


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 adresa GAIA

Predstavíme niekoľko typických úloh, s ktorými sa najčastejšie stretávame pri správe Check Point.

1) Príklad funkcií autorizácie a odhlásenia:

Skript


    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) Aktivácia blade-ov a nastavenie siete:

Skript


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) Zmena pravidiel firewallu:

Skript


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) Pridanie aplikačnej vrstvy:

Skript


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) Publikovanie a nainštalovanie politiky, kontrola vykonania príkazu (task-id):

Skript


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) Pridať hostiteľa:

Skript


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) Pridať pole prevencie hrozieb:

Skript


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) Zobraziť zoznam relácií

Skript


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) Vytvoriť nový profil:

Skript


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) Zmeniť akciu pre IPS signatúru:

Skript


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) Pridať svoju službu:

Skript


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) Pridať kategóriu, web alebo skupinu:

Skript


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))

Okrem toho je možné pomocou Web API pridať a odstraňovať siete, hostiteľov, prístupové role atď. Existuje možnosť nastavenia blade-ov Antivirus, Antibot, IPS, VPN. Možno dokonca nainštalovať licencie pomocou príkazu run-script. So všetkými API príkazmi Check Point sa môžete oboznámiť tu.

Check Point API + Postman

Rovnako je vhodné použiť Check Point Web API v kombinácii s Postman. Postman má desktopové verzie pre Windows, Linux a MacOS. Navyše, existuje plugin pre Google Chrome. Ten sa nám hodí. Najprv musíme nájsť Postman v Google Chrome Store a nainštalovať:

Check Point R80.10 API. Správa cez CLI, skripty a nielen

S touto utilitou môžeme vytvárať webové požiadavky na API Check Point. Aby sme si nemuseli pamätať všetky API príkazy, existuje možnosť importovať tzv. kolekcie (šablóny), ktoré už obsahujú všetky potrebné príkazy:

Check Point R80.10 API. Správa cez CLI, skripty a nielen

Tu nájdete kolekciu pre R80.10. Po importe nám budú dostupné šablóny API príkazov:

Check Point R80.10 API. Správa cez CLI, skripty a nielen

Podľa môjho názoru je to veľmi praktické. Môžeme sa veľmi rýchlo pustiť do vývoja aplikácií s použitím Check Point API.

Check Point + Ansible

Rád by som tiež poznamenal, že existuje Ansible modul pre CheckPoint API. Modul umožňuje spravovať konfigurácie, ale nie je taký pohodlný na riešenie exotických úloh. Písanie skriptov v akomkoľvek programovacom jazyku prináša flexibilnejšie a pohodlnejšie riešenia.

Záver

Na tomto asi ukončíme našu malú prehľad Check Point API. Podľa môjho názoru bola táto funkcia veľmi očakávaná a potrebná. Príchod API otvára veľmi široké možnosti pre systémových administrátorov, ako aj pre systémových integrátorov, ktorí pracujú s produktmi Check Point. Orchestrácia, automatizácia, spätná väzba so SIEM… to všetko je teraz možné.

P.S. Viac článkov o Check Point ako vždy nájdete v našom blogu Habr alebo v blogu na webe.

P.S.S. Technické otázky týkajúce sa nastavenia Check Point môžete položiť tu

Len registrovaní používatelia sa môžu zúčastniť prieskumu. Prihláste sa, prosím.

Plánujete použiť API?

  • 70,6%Áno12

  • 23,5%Nie4

  • 5,9%Už používam1

Hlasovalo 17 používateľov. Zdržali sa 3 používatelia.

Zdroj: habr.com

Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery 🔥 Kúpte si spoľahlivý hosting pre webové stránky s ochranou proti DDoS, VPS VDS servery | ProHoster