Esmu pÄrliecinÄts, ka visi, kas kÄdreiz ir strÄdÄjuÅ”i ar
"BrÄ«nums" notika salÄ«dzinoÅ”i nesen. LÄ«dz ar jaunÄs versijas izlaiÅ”anu Gaia R80 iespÄja tika paziÅota API lietojums, kas paver plaÅ”as iespÄjas automatizÄt iestatÄ«jumus, administrÄÅ”anu, uzraudzÄ«bu utt. Tagad Tu vari:
- izveidot objektus;
- pievienot vai rediÄ£Ät piekļuves sarakstus;
- iespÄjot/atspÄjot asmeÅus;
- konfigurÄt tÄ«kla saskarnes;
- instalÄt politikas;
- Šø Š¼Š½Š¾Š³Š¾Šµ Š“ŃŃŠ³Š¾Šµ.
GodÄ«gi sakot, es nesaprotu, kÄ Å”Ä«s ziÅas tika nodotas Habram. Å ajÄ rakstÄ mÄs Ä«si aprakstÄ«sim, kÄ lietot API, un sniegsim vairÄkus praktiskus piemÄrus. CheckPoint iestatÄ«jumi, izmantojot skriptus.
Es vÄlos nekavÄjoties rezervÄt, ka API tiek izmantota tikai pÄrvaldÄ«bas serverim. Tie. JoprojÄm nav iespÄjams pÄrvaldÄ«t vÄrtejas bez pÄrvaldÄ«bas servera.
KurÅ” principÄ var izmantot Å”o API?
- SistÄmas administratori, kuri vÄlas vienkÄrÅ”ot vai automatizÄt ikdienas Check Point konfigurÄcijas uzdevumus;
- UzÅÄmumi, kas vÄlas integrÄt Check Point ar citiem risinÄjumiem (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 ar Check Point saistÄ«tus produktus.
Tipiska shÄma
TÄtad, iedomÄsimies tipisku shÄmu ar Check Point:
KÄ parasti mums ir vÄrteja (SG), pÄrvaldÄ«bas serveris (SMS) un administratora konsole (SmartConsole). Å ajÄ gadÄ«jumÄ parastais vÄrtejas konfigurÄcijas process izskatÄs Å”Ädi:
Tie. Vispirms jums ir jÄpalaiž administratora datorÄ SmartConsole, ar kuru mÄs izveidojam savienojumu ar pÄrvaldÄ«bas serveri (SMS). DroŔības iestatÄ«jumi tiek veikti Ä«sziÅÄ un tikai pÄc tam tiek piemÄroti (instalÄÅ”anas politika) uz vÄrteju (SG).
Lietojot PÄrvaldÄ«bas API, mÄs bÅ«tÄ«bÄ varam izlaist pirmo punktu (palaist SmartConsole) un izmantot API komandas tieÅ”i uz pÄrvaldÄ«bas serveri (SMS).
API izmantoŔanas veidi
Ir Äetri galvenie veidi, kÄ rediÄ£Ät konfigurÄciju, izmantojot API:
1) Izmantojot utilītu mgmt_cli
PiemÄrs - # mgmt_cli pievienot resursdatora nosaukumu host1 ip-adrese 192.168.2.100
Å Ä« komanda tiek palaista no Management Server (SMS) komandrindas. Es domÄju, ka komandas sintakse ir skaidra - host1 tiek izveidots ar adresi 192.168.2.100.
2) Ievadiet API komandas, izmantojot clish (eksperta režīmÄ)
BÅ«tÄ«bÄ viss, kas jums jÄdara, ir jÄpiesakÄs komandrindÄ (mgmt pieteikÅ”anÄs) zem konta, kas tiek izmantots, veidojot savienojumu, izmantojot SmartConsole (vai saknes kontu). Tad jÅ«s varat iekļūt API komandas (Å”ajÄ gadÄ«jumÄ pirms katras komandas nav jÄizmanto utilÄ«ta mgmt_cli). JÅ«s varat izveidot pilnvÄrtÄ«gu BASH skripti. Skripta piemÄrs, ko izveido saimniekdators:
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 jÅ«s interesÄ, varat noskatÄ«ties atbilstoÅ”o video:
3) Izmantojot SmartConsole, atverot CLI logu
Viss, kas jums jÄdara, ir atvÄrt logu CLI tieÅ”i no SmartConsole, kÄ parÄdÄ«ts zemÄk esoÅ”ajÄ attÄlÄ.
Å ajÄ logÄ varat nekavÄjoties sÄkt ievadÄ«t API komandas.
4) tīmekļa pakalpojumi. Izmantojiet HTTPS pasta pieprasījumu (REST API)
MÅ«suprÄt, Ŕī ir viena no daudzsoloÅ”ÄkajÄm metodÄm, jo ļauj āveidotā visas lietojumprogrammas, pamatojoties uz pÄrvaldÄ«bas servera vadÄ«ba (atvainojos par tautoloÄ£iju). TÄlÄk mÄs aplÅ«kosim Å”o metodi nedaudz sÄ«kÄk.
Apkopot:
- API + klip vairÄk piemÄrots cilvÄkiem, kuri ir pieraduÅ”i pie Cisco;
- API + apvalks skriptu pielietoŔanai un rutīnas uzdevumu veikŔanai;
- REST API automatizÄcijai.
API iespÄjoÅ”ana
PÄc noklusÄjuma API ir iespÄjota pÄrvaldÄ«bas serveros ar vairÄk nekÄ 4 GB RAM un savrupÄm konfigurÄcijÄm ar vairÄk nekÄ 8 GB RAM. Statusu var pÄrbaudÄ«t, izmantojot komandu: api statuss
Ja izrÄdÄs, ka api ir atspÄjota, to ir diezgan viegli iespÄjot, izmantojot SmartConsole: PÄrvaldÄ«t un iestatÄ«jumi > AsmeÅi > PÄrvaldÄ«bas API > Papildu iestatÄ«jumi
PÄc tam publicÄjiet (PublicÄt) izmaiÅas un palaidiet komandu api restart.
Tīmekļa pieprasījumi + Python
Lai izpildÄ«tu API komandas, varat izmantot tÄ«mekļa pieprasÄ«jumus, izmantojot Pitons un bibliotÄkas pieprasÄ«jumi, Džons. KopumÄ tÄ«mekļa pieprasÄ«juma struktÅ«ra sastÄv no trim daļÄm:
1) Adrese
(https://<managemenet server>:<port>/web_api/<command>)
2) HTTP galvenes
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Pieprasīt lietderīgo slodzi
Teksts JSON formÄtÄ, 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 address GAIA
Å eit ir daži tipiski uzdevumi, ar kuriem jÅ«s visbiežÄk saskaraties, administrÄjot Check Point.
1) AutorizÄcijas un atteikÅ”anÄs funkciju piemÄrs:
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) AsmeÅu ieslÄgÅ”ana un tÄ«kla iestatÄ«Å”ana:
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 maiÅa:
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) Lietojumprogrammas slÄÅa pievienoÅ”ana:
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) PublicÄjiet un iestatiet politiku, pÄrbaudiet komandas izpildi (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) Pievienojiet saimniekdatoru:
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) Pievienojiet draudu novÄrÅ”anas 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) Skatiet 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) Izveidojiet 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) Mainiet 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) Pievienojiet 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) Pievienojiet 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))
TurklÄt ar palÄ«dzÄ«bu TÄ«mekļa API varat pievienot un noÅemt tÄ«klus, saimniekdatorus, piekļuves lomas utt. AsmeÅus var pielÄgot AntivÄ«russ, Antibots, IPS, VPN. Ir pat iespÄjams instalÄt licences, izmantojot komandu palaist-skriptu. Visas Check Point API komandas var atrast Å”eit
Check Point API + pastnieks
ArÄ« Ärti lietojams Check Point Web API saistÄ«bÄ ar
Izmantojot Å”o utilÄ«tu, mÄs varÄsim Ä£enerÄt tÄ«mekļa pieprasÄ«jumus Check Point API. Lai neatcerÄtos visas API komandas, ir iespÄjams importÄt tÄ sauktÄs kolekcijas (veidnes), kurÄs jau ir visas nepiecieÅ”amÄs komandas:
ManuprÄt, tas ir ļoti Ärti. Varat Ätri sÄkt izstrÄdÄt lietojumprogrammas, izmantojot Check Point API.
Check Point + Ansible
Es arÄ« vÄlos atzÄ«mÄt, ka ir IespÄjams
secinÄjums
Å eit mÄs, iespÄjams, pabeigsim savu Ä«so Check Point API pÄrskatu. ManuprÄt, Ŕī funkcija bija ļoti ilgi gaidÄ«ta un nepiecieÅ”ama. API parÄdÄ«Å”anÄs paver ļoti plaÅ”as iespÄjas gan sistÄmu administratoriem, gan sistÄmu integratoriem, kas strÄdÄ ar Check Point produktiem. OrÄ·estrÄcija, automatizÄcija, SIEM atsauksmes... tas viss tagad ir iespÄjams.
P.S. VairÄk rakstu par
P.S.S. Ja jums ir tehniski jautÄjumi, kas saistÄ«ti ar Check Point iestatÄ«Å”anu, varat
AptaujÄ var piedalÄ«ties tikai reÄ£istrÄti lietotÄji.
Vai plÄnojat izmantot API?
-
70,6%JÄ 12
-
23,5%Nr.4
-
5,9%Jau izmanto 1
Nobalsoja 17 lietotÄji. 3 lietotÄji atturÄjÄs.
Avots: www.habr.com