Ik bin der wis fan dat elkenien dy't oait wurke mei
In "wûnder" barde relatyf koartlyn. Mei de frijlitting fan 'e nije ferzje Gaia R80 de kâns waard bekend makke API-gebrûk, dy't brede kânsen iepenet foar it automatisearjen fan ynstellings, administraasje, tafersjoch, ensfh. No kinsto:
- meitsje objekten;
- tagongslisten tafoegje of bewurkje;
- ynskeakelje / útskeakelje blades;
- ynstelle netwurk ynterfaces;
- ynstallearje belied;
- en folle mear.
Om earlik te wêzen, begryp ik net hoe't dit nijs troch Habr. Yn dit artikel sille wy koart beskriuwe hoe't jo de API brûke en ferskate praktyske foarbylden leverje. CheckPoint ynstellings mei help fan skripts.
Ik wol direkt in reservearje meitsje dat de API allinich brûkt wurdt foar de Managementserver. Dy. It is noch altyd ûnmooglik om gateways te behearjen sûnder in behearserver.
Wa kin dizze API yn prinsipe brûke?
- Systeembehearders dy't routine Check Point-konfiguraasjetaken ferienfâldigje of automatisearje wolle;
- Bedriuwen dy't Check Point wolle yntegrearje mei oare oplossingen (virtualisaasjesystemen, ticketsystemen, konfiguraasjebehearsystemen, ensfh.);
- Systeemintegrators dy't ynstellings standerdisearje wolle of ekstra Check Point-relatearre produkten meitsje wolle.
Typysk skema
Dat, lit ús in typysk skema foarstelle mei Check Point:
As gewoanlik hawwe wy in poarte (SG), behear tsjinner (SMS) en admin konsole (SmartConsole). Yn dit gefal sjocht it gewoane gateway-konfiguraasjeproses der sa út:
Dy. Earst moatte jo rinne op de kompjûter fan de behearder SmartConsole, wêrmei't wy ferbine mei de Behearserver (SMS). Feiligensynstellingen wurde makke op it SMS, en pas dan tapast (ynstallearje belied) nei poarte (SG).
By it brûken Management API, kinne wy yn prinsipe it earste punt oerslaan (starte SmartConsole) en brûke API kommando direkt nei de Management tsjinner (SMS).
Manieren om de API te brûken
D'r binne fjouwer wichtige manieren om de konfiguraasje te bewurkjen mei de API:
1) Mei help fan it hulpprogramma mgmt_cli
Foarbyld - # mgmt_cli hostnamme tafoegje host1 ip-adres 192.168.2.100
Dit kommando wurdt útfierd fanút de kommandorigel fan Management Server (SMS). Ik tink dat de syntaksis fan it kommando dúdlik is - host1 is makke mei it adres 192.168.2.100.
2) API-kommando's ynfiere fia clish (yn ekspertmodus)
Yn prinsipe, alles wat jo hoege te dwaan is oanmelde by de kommandorigel (mgmt oanmelde) ûnder it akkount dat wurdt brûkt by it ferbinen fia SmartConsole (of root-akkount). Dan kinne jo ynfiere API kommando (yn dit gefal is d'r net nedich om it hulpprogramma te brûken foar elk kommando mgmt_cli). Jo kinne meitsje folweardich BASH skripts. In foarbyld fan in skript dat de host makket:
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
As jo ynteressearre binne, kinne jo de oerienkommende fideo besjen:
3) Fia SmartConsole troch it CLI-finster te iepenjen
Alles wat jo hoege te dwaan is it finster iepenje CLI rjocht fan SmartConsole, lykas werjûn yn 'e ôfbylding hjirûnder.
Yn dit finster kinne jo fuortendaliks begjinne mei it ynfieren fan API-kommando's.
4) Web Tsjinsten. Brûk HTTPS Post-fersyk (REST API)
Yn ús miening, dit is ien fan de meast kânsrike metoaden, omdat kinne jo "bouwe" hiele applikaasjes basearre op behear tsjinner behear (sorry foar de tautology). Hjirûnder sille wy dizze metoade yn in bytsje mear detaillearje.
Gearfetsje:
- API + cli mear geskikt foar minsken dy't wend binne oan Cisco;
- API + shell foar it tapassen fan skripts en it útfieren fan routine taken;
- REST API foar automatisearring.
De API ynskeakelje
Standert is de API ynskeakele op behearservers mei mear dan 4GB RAM en standalone konfiguraasjes mei mear dan 8GB RAM. Jo kinne de status kontrolearje mei it kommando: api status
As it docht bliken dat de api is útskeakele, dan is it frij maklik om it yn te skeakeljen fia SmartConsole: Behear & Ynstellings> Blades> Management API> Avansearre ynstellings
Dan publisearje (Publisearje) feroaret en it kommando útfiere api opnij starte.
Web fersiken + Python
Om API-kommando's út te fieren, kinne jo weboanfragen brûke mei Python en biblioteken fersiken, json. Yn 't algemien bestiet de struktuer fan in webfersyk út trije dielen:
1) Adres
(https://<managemenet server>:<port>/web_api/<command>)
2) HTTP Headers
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Oanfraach lading
Tekst yn JSON-formaat mei de ferskate parameters
Foarbyld foar it oproppen fan ferskate kommando's:
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 address GAIA
Hjir binne in pear typyske taken dy't jo meast tsjinkomme by it administrearjen fan Check Point.
1) Foarbyld fan autorisaasje- en útlogfunksjes:
Skrift
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) De blêden oansette en it netwurk ynstelle:
Skrift
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) Feroarje firewall regels:
Skrift
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) Tapassingslaach taheakje:
Skrift
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) Publisearje en set it belied yn, kontrolearje de útfiering fan it kommando (taak-id):
Skrift
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) Foegje host ta:
Skrift
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) Foegje in fjild foar bedrigingsprevinsje ta:
Skrift
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) Besjoch de list mei sesjes
Skrift
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) Meitsje in nij profyl:
Skrift
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) Feroarje de aksje foar de IPS-hântekening:
Skrift
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) Foegje jo tsjinst ta:
Skrift
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) Foegje in kategory, side of groep ta:
Skrift
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))
Boppedat, mei help WebAPI jo kinne netwurken, hosts, tagongsrollen, ensfh. Blades kinne wurde oanpast Antivirus, Antibot, IPS, VPN. It is sels mooglik om lisinsjes te ynstallearjen mei it kommando run-skript. Alle Check Point API-kommando's binne hjir te finen
Check Point API + Postman
Ek handich om te brûken Check Point Web API yn gearhing mei
Mei dit helpmiddel kinne wy weboanfragen generearje nei de Check Point API. Om net alle API-kommando's te ûnthâlden, is it mooglik om saneamde kolleksjes (sjabloanen) te ymportearjen, dy't al alle nedige kommando's befetsje:
Neffens my is dit heul handich. Jo kinne fluch begjinne mei it ûntwikkeljen fan applikaasjes mei de Check Point API.
Kontrolearje Point + Ansible
Ik soe ek graach konstatearje dat der is Sible
konklúzje
Dit is wêr't wy wierskynlik ús koarte resinsje fan 'e Check Point API sille ôfmeitsje. Yn myn miening wie dizze funksje heul lang ferwachte en needsaaklik. It ûntstean fan 'e API iepenet heul brede kânsen foar sawol systeembehearders as systeemintegrators dy't wurkje mei Check Point-produkten. Orkestraasje, automatisearring, SIEM-feedback ... it is no allegear mooglik.
PS Mear artikels oer
PSS Foar technyske fragen yn ferbân mei it ynstellen fan Check Point, kinne jo
Allinnich registrearre brûkers kinne meidwaan oan 'e enkête.
Binne jo fan plan om de API te brûken?
-
70,6%Ja12
-
23,5%nr4
-
5,9%Al brûkt 1
17 brûkers stimden. 3 brûkers ûntholden har.
Boarne: www.habr.com