
Som si istý, že každý, kto kedy pracoval s , 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ý?
- Systémoví administrátori, ktorí chcú zjednodušiť alebo automatizovať rutinné úlohy pri nastavení Check Point;
- 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ď.);
- 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:

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:

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:

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.

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:
- API + cli je viac vhodné pre ľudí, ktorí sú zvyknutí na Cisco;
- API + shell na používanie skriptov a vykonávanie rutinných úloh;
- 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

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ť .
Check Point API + Postman
Rovnako je vhodné použiť Check Point Web API v kombinácii s . 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ť:

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:

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

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 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 ako vždy nájdete v našom blogu alebo v blogu na .
P.S.S. Technické otázky týkajúce sa nastavenia Check Point môžete položiť
Len registrovaní používatelia sa môžu zúčastniť prieskumu. , 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
