
Jsem si jistý, že každý, kdo někdy pracoval s , se setkal s problémem ohledně nepřípustnosti úpravy konfigurace z příkazového řádku. To je obzvlášť šílené pro ty, kteří předtím pracovali s Cisco ASA, kde lze všechno nastavit v CLI. U Check Pointu je to naopak – veškerá nastavení zabezpečení se prováděla výhradně z grafického rozhraní. Přesto některé úkoly jsou z GUI (i tak příjemného, jako je u Check Pointu) opravdu nepohodlné. Například úkol přidání 100 nových hostitelů nebo sítí se stává dlouhou a nudnou procedurou. U každého objektu je třeba několikrát klikat myší a zadávat IP adresu. Totéž platí pro vytváření skupin webů nebo hromadné zapínání/vypínání IPS podpisů. Tím se zvyšuje pravděpodobnost chyby.
Relativně nedávno došlo k "zázraku". S vydáním nové verze Gaia R80 byla ohlášena možnost využití API, což otvírá široké možnosti pro automatizaci nastavení, administraci, monitorování atd. Nyní je možné:
- vytvářet objekty;
- přidávat nebo upravovat access-listy;
- zapínat/vypínat blade;
- nastavovat síťové rozhraní;
- instalovat politiky;
- a mnoho dalšího.
Upřímně řečeno, nechápu, jak tato zpráva prošla kolem Habra. V tomto článku stručně popíšeme, jak používat API a uvedeme několik praktických příkladů nastavení CheckPoint pomocí skriptů.
Okamžitě bych rád podotkl, že API se používá pouze pro Management server. Tedy spravovat brány bez Management serveru je stále nemožné.
Komu může tento API vlastně přijít vhod?
- Systémovým administrátorům, kteří chtějí zjednodušit nebo automatizovat rutinní úkoly při nastavování Check Point;
- Firmám, které chtějí integrovat Check Point s jinými řešeními (virtualizační systémy, ticketovací systémy, systémy správy konfigurací atd.);
- Systémovým integrátorům, kteří chtějí standardizovat nastavení nebo vytvořit další produkty související s Check Point.
Typový diagram
A tak, představme si typový diagram s Check Pointem:

Jak bývá obvyklé, máme zde bránu (SG), server řízení (SMS) a konzoli administrátora (SmartConsole). Přičemž běžný proces nastavení brány vypadá následovně:

Tedy nejprve je nutné na počítači administrátora spustit SmartConsole, pomocí které se připojujeme k Management serveru (SMS). Na SMS se provádějí bezpečnostní nastavení, a až poté se aplikují (instalační politika) na bránu (SG).
Při používání Management API, prakticky můžeme přeskočit první bod (spuštění SmartConsole) a aplikovat API příkazy přímo na Management server (SMS).
Způsoby využití API
Pro úpravu konfigurace pomocí API existují čtyři základní způsoby:
1) Pomocí nástroje mgmt_cli
Příklad — # mgmt_cli add host name host1 ip-address 192.168.2.100
Tento příkaz je spuštěn z příkazového řádku Management serveru (SMS). Myslím, že syntaxe příkazu je jasná — vytváří se host1 s adresou 192.168.2.100.
2) Zadávání API příkazů přes clish (v expertním režimu)
V podstatě je vše, co potřebujete, přihlásit se do příkazového řádku (mgmt login) pod účtem, který se používá při připojení přes SmartConsole (nebo root účet). Poté můžete zadávat API příkazy (v tomto případě není třeba používat před každým příkazem nástroj mgmt_cli). Můžete vytvářet plnohodnotné BASH skripty. Příklad skriptu, který vytváří host:
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
Pokud vás to zajímá, můžete se podívat na příslušné video:

3) Přes SmartConsole, otevřením okna CLI
Vše, co musíte udělat, je spustit okno CLI přímo z SmartConsole, jak je uvedeno na obrázku níže.

V tomto okně můžete ihned začít zadávat API příkazy.
4) Webové služby. Použít HTTPS Post request (REST API)
Podle našeho názoru je to jeden z nejperspektivnějších způsobů, protože umožňuje "stavět" celé aplikace pro ovládání správy serveru (omlouvám se za tautologii). Níže se podíváme na tuto metodu podrobněji.
Pokud shrneme:
- API + cli je více vhodné pro lidi, kteří jsou zvyklí na Cisco;
- API + shell pro použití skriptů a provádění rutinních úkolů;
- REST API pro automatizaci.
Aktivace API
Ve výchozím nastavení je API aktivováno na manažerských serverech s RAM větší než 4 GB a standalone konfiguracích s RAM větší než 8 GB. Stav lze zkontrolovat pomocí příkazu: api status
Pokud se ukáže, že je api vypnuto, je poměrně snadné jej aktivovat přes SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Poté publikovat (Publish) změny a vykonat příkaz api restart.
Webové dotazy + Python
Pro vykonání API příkazů lze použít webové dotazy s využitím CouchDB a knihoven requests, json. V obecném rámci struktura webového dotazu se skládá ze tří částí:
1) Adresa
(https://<manage server>:<port>/web_api/<příkaz>)
2) HTTP záhlaví
content-Type: application/json
x-chkp-sid: <ID relace token vrácené příkazem pro přihlášení>
3) Payload požadavku
Text ve formátu JSON obsahující různé parametry
Příklad pro volání různých příkazů:
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
Představíme několik typických úkolů, se kterými se nejčastěji setkáváme při administraci Check Point.
1) Příklad funkcí autorizace a odhlášení:
Skript
payload = {'user': 'váš_uživatel', 'password': 'vaše_heslo'}
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) Aktivace blade a nastavení sítě:
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) Změna pravidel 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) Přidání aplikační 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) Publikování a instalace politiky, kontrola provedení příkazu (task-id):
Skript
publish_result = api_call('xxx.xxx.xxx.xxx', 443, 'publish', {}, sid)
print("výsledek publikace: " + 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) Přidání hostitele:
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) Přidání pole prevence hrozeb:
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) Zobrazit seznam relací
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) Vytvořit nový profil:
Skript
add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "nízký","active-protections-severity" : "nízký nebo výše","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" : "Vysoký nebo nižší"},
"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) Změnit akci pro IPS signaturu:
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) Přidat svou 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) Přidat kategorii, web nebo 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" : "Hry","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))
Kromě toho, s pomocí Web API můžete přidávat a odstraňovat sítě, hostitele, role přístupu atd. Je zde možnost nastavení bladeů Antivirus, Antibot, IPS, VPN. Lze dokonce instalovat licence pomocí příkazu run-script. Se všemi API příkazy Check Point se můžete seznámit .
Check Point API + Postman
Také je užitečné používat Check Point Web API ve spojení s . Postman má desktopové verze pro Windows, Linux a MacOS. Kromě toho existuje plugin pro Google Chrome. Ten použijeme. Nejdříve je třeba najít Postman v Google Chrome Store a nainstalovat:

Pomocí tohoto nástroje můžeme vytvářet webové požadavky na API Check Point. Abychom si nemuseli pamatovat všechny API příkazy, je možné importovat tzv. collection (šablony), které již obsahují všechny potřebné příkazy:

najdete collection pro R80.10. Po importu se nám zpřístupní šablony API příkazů:

Podle mého názoru je to velmi pohodlné. Lze velmi rychle začít vyvíjet aplikace s využitím API Check Point.
Check Point + Ansible
Také bych chtěl poznamenat, že existuje Ansible pro CheckPoint API. Modul umožňuje spravovat konfigurace, ale není tak pohodlný pro řešení exotických úkolů. Psání skriptů v jakémkoli programovacím jazyce nabízí flexibilnější a pohodlnější řešení.
Výstup
Tímto bychom asi zakončili naši malou recenzi API Check Point. Podle mě byla tato funkce velmi očekávaná a potřebná. Vznik API otevírá velmi široké možnosti jak pro systémové administrátory, tak pro systémové integrátory, kteří pracují s produkty Check Point. Orchestrace, automatizace, zpětná vazba se SIEM... to vše je nyní možné.
P.S. Více článků o najdete jako obvykle v našem blogu nebo na blogu na .
P.S.S. Technické dotazy týkající se nastavení Check Point můžete položit
Pouze registrovaní uživatelé se mohou účastnit ankety. , prosím.
Plánujete používat API?
70,6%Ano12
23,5%Ne4
5,9%Už používám1
Hlasovalo 17 uživatelů. Zdrželo se 3 uživatelů.
Zdroj: habr.com
