
Siguran sam da je svatko tko je ikada radio s , imao pritužbu o nemogućnosti izmjene konfiguracije iz komandne linije. To je posebno iritantno za one koji su ranije radili s Cisco ASA, gdje se sve može konfigurirati u CLI-u. U Check Point-u je sve obrnuto - sva podešavanja sigurnosti radila su se isključivo iz grafičkog sučelja. Ipak, neke stvari je potpuno nelagodno raditi putem GUI-a (čak i onog tako korisnog kao što je Check Point). Na primjer, dodavanje 100 novih hostova ili mreža postaje dugo i naporno. Za svaki objekt treba nekoliko puta kliknuti i unijeti IP adresu. Isto vrijedi i za kreiranje grupa stranica ili masovno uključivanje/isključivanje IPS signatura. Postoji velika vjerojatnost da će se napraviti greška.
Relativno nedavno se dogodilo “čudo”. S izlaskom nove verzije Gaia R80 najavljena je mogućnost korištenja API-a, što otvara široke mogućnosti za automatizaciju postavki, administraciju, monitoring itd. Sada možete:
- kreirati objekte;
- dodavati ili uređivati access liste;
- uključivati/isključivati blade-ove;
- podešavati mrežne sučelje;
- instalirati politike;
- in še mnogo več.
Iskreno, ne razumijem kako je ova vijest prošla pored Habr-a. U ovom članku ćemo ukratko opisati kako koristiti API i dati nekoliko praktičnih primjera postavki CheckPoint pomoću skripti.
Odmah bih želio napomenuti, API se koristi samo za Management server. Odnosno, upravljanje prolazima bez Management servera i dalje nije moguće.
Kome može biti koristan ovaj API?
- Sistemskim administratorima koji žele pojednostaviti ili automatizirati rutinske zadatke podešavanja Check Point-a;
- Tvrtkama koje žele integrirati Check Point s drugim rješenjima (sustavi virtualizacije, ticket sustavi, sustavi upravljanja konfiguracijom itd.);
- Sistemskim integratorima koji žele standardizirati postavke ili stvoriti dodatne proizvode povezane s Check Point-om.
Tipična shema
Dakle, zamislite tipičnu shemu s Check Point-om:

Kao i obično, imamo prolaz (SG), server za upravljanje (SMS) i konzolu administratora (SmartConsole). U međuvremenu, uobičajeni proces podešavanja prolaza izgleda ovako:

T.j. najprej je potrebno na računalniku administratorja zagnati SmartConsole, s katero se povezujemo z Management strežnikom (SMS). Na SMS se izvedejo nastavitve varnosti, nato pa se uporabijo (install policy) na prehodu (SG).
Pri uporabi Management API, lahko v bistvu preskočimo prvi korak (zagon SmartConsole) in uporabimo API ukaze direktno na Management strežniku (SMS).
Načini uporabe API
Za urejanje konfiguracije s pomočjo API obstajajo štirje glavne metode:
1) S pomočjo orodja mgmt_cli
Primer — # mgmt_cli add host name host1 ip-address 192.168.2.100
Ta ukaz se zažene iz ukazne vrstice Management strežnika (SMS). Mislim, da je sintaksa ukaza jasna — ustvarja se host1 z naslovom 192.168.2.100.
2) Vnašanje API ukazov preko clish (v expert načinu)
V bistvu, vse kar potrebujete, je, da se prijavite v ukazno vrstico (mgmt login) z uporabniškim računom, ki se uporablja pri povezovanju preko SmartConsole (ali root račun). Nato lahko vnašate API ukaze (v tem primeru ni potrebno uporabljati orodja mgmt_cli). Lahko ustvarite polne BASH skripte. Primer skripte, ki ustvari gostitelja:
Bash skripta
#!/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
Če vas zanima, lahko pogledate ustrezen video:

3) Preko SmartConsole, odpiranje okna CLI
Vse, kar morate storiti, je, da zaženete okno CLI takoj iz SmartConsole, kot je prikazano na sliki spodaj.

V tem oknu lahko takoj začnete vnašati API ukaze.
4) Web Services. Uporaba HTTPS Post request (REST API)
Po našem mnenju je to eden najbolj obetavnih načinov, saj omogoča “gradnjo” celotnih aplikacij za upravljanje upravljalnega strežnika (oprosti za pleonazem). Spodaj bomo ta način podrobneje obravnavali.
Če povzamemo:
- API + cli bolje ustreza ljudem, ki so navajeni na Cisco;
- API + shell za izvajanje skript in opravljanje rutinskih nalog;
- REST API za avtomatizacijo.
Vklop API
Privzeto je API vklopljen na upravljalskih strežnikih z več kot 4GB RAM-a in samostojnih konfiguracijah z več kot 8GB RAM-a. Status lahko preverite s pomočjo ukaza: api status
Če se izkaže, da je api izklopljen, ga je precej enostavno vklopiti preko SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Nato objavite (Publish) spremembe in izvedite ukaz api restart.
Web zahteve + Python
Za izvajanje API ukazov lahko uporabite spletne zahteve ob pomoči Python in knjižnic requests, json. V splošni obliki struktura web zahteve obsega tri dele:
1) Naslov
(https://:/web_api/)
2) HTTP заголовки
content-Type: application/json
x-chkp-sid:
3) Полезная нагрузка запроса
Текст в формате JSON, содержащий различные параметры
Пример вызова различных команд:
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 адрес GAIA
Приведем несколько типовых задач, с которыми чаще всего приходится сталкиваться при администрировании Check Point.
1) Пример функций авторизации и выхода:
Skript
payload = {'user': 'ваш_пользователь', '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) Включение блэйдов и настройка сети:
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) Изменение правил межсетевого экрана:
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) Добавление слоя Application:
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) Публикация и установка политики, проверка выполнения команды (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) Добавить хост:
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) Добавить поле Threat Prevention:
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) Ogledajte popis sesija
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) Kreirajte novi 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) Promijenite radnju za IPS potpis:
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) Dodajte svoju uslugu:
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) Dodajte kategoriju, stranicu ili grupu:
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))
Osim toga, putem Web API možete dodavati i uklanjati mreže, hostove, pristupne uloge itd. Postoji mogućnost konfiguracije nožica Antivirus, Antibot, IPS, VPN. Moguće je čak i instalirati licence putem komande run-script. Sa svim API komandama Check Point možete se upoznati .
Check Point API + Postman
Također je zgodno koristiti Check Point Web API u kombinaciji s Postman ima desktop verzije za Windows, Linux i MacOS. Također, postoji dodatak za Google Chrome. Njega ćemo koristiti. Prvo, potrebno je pronaći Postman u Google Chrome Store-u i instalirati ga:

Uz ovu alatku možemo formirati Web zahtjeve za API Check Point. Da ne bismo pamtile sve API komande, postoji mogućnost uvoza takozvanih kolekcija (predložaka) koje već sadrže sve potrebne komande:

naći ćete kolekciju za R80.10. Nakon uvoza, bit će nam dostupni predlošci API komandi:

Po mom mišljenju, ovo je vrlo praktično. Moguće je vrlo brzo započeti razvoj aplikacija koristeći Check Point API.
Check Point + Ansible
Također bih htio napomenuti da postoji Ansible za CheckPoint API. Modul omogućava upravljanje konfiguracijama, ali nije toliko praktičan za rješavanje egzotičnih zadataka. Pisanje skripti na bilo kojem programskom jeziku pruža fleksibilnija i prikladnija rješenja.
Izlaz
Tako završavamo naš mali pregled Check Point API. Po mom mišljenju, ova funkcionalnost je bila veoma očekivana i potrebna. Pojava API-ja otvara široke mogućnosti za sistemske administratore i sistemske integratore koji rade s proizvodima Check Point. Orkestracija, automatizacija, povratne informacije s SIEM-om... sve to sada je moguće.
P.S. Više članaka o kao i uvijek možete pronaći u našoj blogu ili u blogu na .
P.S.S. Tehnička pitanja vezana uz postavljanje Check Point-a možete postaviti
Samo registrovani korisnici mogu učestvovati u anketi. , molim vas.
Planirate li koristiti API?
70,6%Da12
23,5%Ne4
5,9%Već koristim1
Glasale su 17 korisnika. 3 korisnika su se suzdržala.
Izvor: habr.com
