
Esmu pārliecināts, ka katram, kurš jebkad strādājis ar , ir bijusi sūdzība par iespēju rediģēt konfigurāciju no komandu uzvednes. Tas ir īpaši dīvaini tiem, kas iepriekš strādājuši ar Cisco ASA, kur absolūti visu var iestatīt CLI. Pie Check Point viss ir pretēji — visas drošības iestatīšanas tiek veiktas tikai caur grafisko saskarni. Tomēr daudzas lietas nav īpaši ērti darīt caur GUI (pat tik ērti kā pie Check Point). Piemēram, uzdevums pievienot 100 jaunus hostus vai tīklus kļūst par garlaicīgu procedūru. Katram objektam būs jāklikšķina ar peli vairākkārt un jāpievieno IP adrese. To pašu var teikt par vietņu grupu izveidi vai masveida IPS parakstu ieslēgšanu/izslēgšanu. Tajā pašā laikā ir liela iespēja pieļaut kļūdu.
Salīdzinoši nesen notika “brīnums”. Ar jaunās versijas izlaišanu Gaia R80 tika paziņota iespēja izmantojot API, kas atver plašas iespējas iestatījumu automatizācijai, administrēšanai, uzraudzībai utt. Tagad var:
- izveidot objektus;
- pievienot vai rediģēt access-listus;
- ieslēgt/izslēgt blokus;
- iestatīt tīkla saskarnes;
- instalēt politikas;
- un vēl daudz ko citu.
Ja godīgi, nesaprotu, kā šis jaunums izgāja garām Habr. Šajā rakstā mēs īsi aprakstīsim, kā izmantot API un sniegsim dažus praktiskus piemērus CheckPoint iestatīšanai ar skriptiem..
Uzreiz gribu teikt, ka API tiek izmantots tikai Management serverim. T.i., vadīt vārtejas bez Management servera joprojām nav iespējams.
Kādos gadījumos šis API var noderēt?
- Sistēmas administratori, kuri vēlas vienkāršot vai automatizēt rutīnas uzdevumus Check Point iestatīšanā;
- Uzņēmumi, kuri vēlas integrēt Check Point ar citām sistēmām (virtualizācijas sistēmām, biļešu sistēmām, konfigurācijas pārvaldības sistēmām utt.);
- Sistēmas integratori, kuri vēlas standartizēt iestatījumus vai izveidot papildu produktus, kas saistīti ar Check Point.
Tipiska shēma
Tātad, pieņemsim tipisku shēmu ar Check Point:

Kā parasti, mums ir vārteja (SG), pārvaldības serveris (SMS) un administratora konsole (SmartConsole). Tajā pašā laikā parastais vārtejas iestatīšanas process izskatās šādi:

T.i., vispirms ir jāielādē administrators datorā SmartConsole, ar kuru mēs pieslēdzamies vadības serverim (SMS). Uz SMS tiek veiktas drošības iestatīšanas, pēc tam tiek piemēroti (install policy) uz vārtiem (SG).
Izmantojot Management API, mēs varam principā izlaist pirmo punktu (SmartConsole palaišana) un piemērot API komandas tieši vadības serverim (SMS).
API izmantošanas metodes
Lai mainītu konfigurāciju, izmantojot API, ir četri galvenie veidi:
1) Ar mgmt_cli rīku
Piemērs — # mgmt_cli add host name host1 ip-address 192.168.2.100
Šo komandu palaiž komandrindā no vadības servera (SMS). Domāju, ka komandas sintakse ir skaidra — tiek izveidots host1 ar adresi 192.168.2.100.
2) Ievadīt API komandas caur clish (ekspertu režīmā)
Pamatā, viss, kas jums jādara, ir pieslēgties komandrindai (mgmt login) ar kontu, kas tiek izmantots pieslēgšanās laikā caur SmartConsole (vai root kontu). Pēc tam varat ievadīt API komandas (šajā gadījumā nav nepieciešams pirms katras komandas izmantot rīku mgmt_cli). Var izveidot pilnvērtīgus BASH skriptus. Skripta piemērs, kas izveido host:
Bash skripts
#!/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
Ja interesē, varat noskatīties atbilstošu video:

3) Caur SmartConsole, atverot CLI logu
Viss, kas jādara, ir palaist logu flags -k integrācijai ar tieši no SmartConsole, kā parādīts zemāk attēlā.

Šajā logā var tūlīt sākt ievadīt API komandas.
4) Web pakalpojumi. Izmantojiet HTTPS Post pieprasījumu (REST API)
Mūsuprāt, tas ir viens no visperspektīvākajiem veidiem, jo tas ļauj “veidot” veselas lietojumprogrammas par vadības servera pārvaldību (atvainojos par tautoloģiju). Zemāk mēs nedaudz sīkāk aplūkosim šo metodi.
Ja rezumējam:
- API + cli vairāk piemērots cilvēkiem, kas pieraduši pie Cisco;
- API + shell lai izmantotu skriptus un veiktu rutīnas uzdevumus;
- REST API automātizēšanai.
API ieslēgšana
Noklusējuma iestatījumos API ir ieslēgts vadības serveros ar RAM vairāk par 4GB un atsevišķās konfigurācijās ar RAM vairāk par 8GB. Statūs var pārbaudīt ar komandu: api status
Ja izrādīsies, ka API ir izslēgts, to ir diezgan viegli ieslēgt caur SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

Pēc tam publicējiet (pakalpojumā) izmaiņas un izpildiet komandu api restart.
Web pieprasījumi + Python
Lai izpildītu API komandas, varat izmantot Web pieprasījumus, izmantojot Python un bibliotēkas requests, json. Vispārīgā veidā web pieprasījuma struktūra sastāv no trim daļām:
1) Adrese
(https://<vadības serveris>:<ports>/web_api/<komanda>)
2) HTTP galvenes
content-Type: application/json
x-chkp-sid: <sesijas ID atslēga, ko atgriež pieslēgšanās komanda>
3) Pieprasījuma slodze
JSON formātā esošais teksts, kas satur dažādus parametrus
Piemērs dažādu komandu izsaukšanai:
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 adrese GAIA
Apskatīsim dažas tipiskas uzdevumus, ar kuriem visbiežāk sastopamies Check Point administrēšanā.
1) Piemērs autorizācijas un izrakstīšanās funkcijām:
Skripts
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) Blade ieslēgšana un tīkla konfigurācija:
Skripts
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) Ugunsmūra noteikumu izmaiņas:
Skripts
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) Pielikt Application layer:
Skripts
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) Publikācija un politikas uzstādīšana, komandas izpildes pārbaude (task-id):
Skripts
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) Pievienot hostu:
Skripts
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) Pievienot Threat Prevention lauku:
Skripts
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) Apskatīt sesiju sarakstu
Skripts
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) Izveidot jaunu profilu:
Skripts
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) Mainīt darbību IPS parakstam:
Skripts
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) Pievienot savu pakalpojumu:
Skripts
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) Pievienot kategoriju, vietni vai grupu:
Skripts
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))
Papildus tam, izmantojot Web API jūs varat pievienot un dzēst tīklus, hostus, piekļuves lomas utt. Ir iespēja konfigurēt bleyd Antivirus, Antibot, IPS, VPN. Ir iespējama arī licenci uzstādīšana ar komandu run-script. Ar visām Check Point API komandām var iepazīties .
Check Point API + Postman
Arī ērti izmantot Check Point Web API kombinācijā ar . Postman ir darbvirsmas versijas Windows, Linux un MacOS. Turklāt ir Google Chrome spraudnis. To mēs arī izmantosim. Sākumā jāatrod Postman Google Chrome veikalā un jāinstalē:

Ar šo rīku mēs varēsim veidot Web pieprasījumus uz Check Point API. Lai neaizmirstu visas API komandas, ir iespēja importēt tā sauktos collection (šablonus), kuri jau satur visas nepieciešamās komandas:

jūs atradīsiet collection lai R80.10. Pēc importēšanas mums būs pieejami API komandu šabloni:

Manuprāt, tas ir ļoti ērti. Var diezgan ātri uzsākt aplikāciju izstrādi, izmantojot Check Point API.
Check Point + Ansible
Tāpat gribētu atzīmēt, ka pastāv Ansible CheckPoint API. Modulis ļauj pārvaldīt konfigurācijas, taču tas nav tik ērts eksotisku uzdevumu risināšanai. Skriptu rakstīšana jebkurā programmēšanas valodā sniedz elastīgākus un ērtākus risinājumus.
Izvade
Uz šo, iespējams, mēs noslēgsim mūsu nelielo pārskatu par Check Point API. Manuprāt, šī funkcija bija ļoti gaidīta un nepieciešama. API parādīšanās atver ļoti plašas iespējas gan sistēmu administratoriem, gan sistēmu integratoriem, kuri strādā ar Check Point produktiem. Orķestrācija, automatizācija, atgriezeniskā saite ar SIEM... viss tas tagad ir iespējams.
P.S. Vairāk rakstu par jūs kā vienmēr varat atrast mūsu blogā vai blogā pie .
P.S.S. Tehniskos jautājumus, kas saistīti ar Check Point iestatīšanu, varat uzdot
Tikai reģistrētie lietotāji var piedalīties aptaujā. , lūdzu.
Vai plānojat izmantot API?
70,6%Jā12
23,5%Nē4
5,9%Jau izmantoju1
Balsojuši 17 lietotāju. Atturējušies 3 lietotāji.
Avots: habr.com
