
Jag Ă€r sĂ€ker pĂ„ att alla som nĂ„gonsin har arbetat med , har haft en klagan angĂ„ende impossibiliteten att redigera konfigurationen frĂ„n kommandoraden. Detta Ă€r sĂ€rskilt galet för dem som tidigare har arbetat med Cisco ASA, dĂ€r allt kan konfigureras i CLI. Med Check Point Ă€r det motsatt â alla sĂ€kerhetsinstĂ€llningar görs enbart via det grafiska grĂ€nssnittet. Men vissa saker Ă€r verkligen obekvĂ€ma att göra via GUI (Ă€ven ett sĂ„ anvĂ€ndarvĂ€nligt som Check Points). Till exempel, att lĂ€gga till 100 nya vĂ€rdar eller nĂ€tverk blir en lĂ„ng och trĂ„kig procedur. För varje objekt mĂ„ste man klicka flera gĂ„nger och skriva in IP-adressen. Samma sak gĂ€ller för att skapa en webbplatsgrupp eller massaktivera/ inaktivera IPS-signaturer. Det finns en stor risk att göra ett misstag.
Nyligen hÀnde det ett "mirakel". Med utgivningen av den nya versionen Gaia R80 annonserades möjligheten att anvÀnda API, vilket öppnar upp för omfattande möjligheter för automatisering av instÀllningar, administration, övervakning etc. Nu kan man:
- skapa objekt;
- lÀgga till eller redigera access-listor;
- aktivera/deaktivera blades;
- konfigurera nÀtverksgrÀnssnitt;
- installera policies;
- och mycket mer.
Ărligt talat, jag förstĂ„r inte hur denna nyhet kan ha gĂ„tt förbi Habr. I denna artikel kommer vi kort att beskriva hur man anvĂ€nder API och ge nĂ„gra praktiska exempel pĂ„ CheckPoint-konfiguration med hjĂ€lp av skript..
Jag vill direkt pÄpeka att API anvÀnds endast för Management-servern. Det vill sÀga, det Àr fortfarande omöjligt att hantera gateways utan Management-server.
Vem kan i princip ha nytta av detta API?
- Systemadministratörer som vill förenkla eller automatisera rutinuppgifter med Check Point;
- Företag som vill integrera Check Point med andra lösningar (virtualiseringssystem, tickethanteringssystem, konfigurationshanteringssystem etc.);
- Systemintegratörer som vill standardisera instÀllningar eller skapa ytterligare produkter relaterade till Check Point.
Typisk schema
SÄ, lÄt oss förestÀlla oss ett typiskt schema med Check Point:

Som vanligt har vi en gateway (SG), en managementserver (SMS) och administratörskonsolen (SmartConsole). Normalt ser processen för att konfigurera gatewayen ut sÄ hÀr:

Det vill sÀga, först mÄste du starta SmartConsole, genom vilken vi ansluter till Management-servern (SMS). PÄ SMS utförs sÀkerhetsinstÀllningar, och sedan tillÀmpas (install policy) pÄ gateway (SG).
NÀr du anvÀnder Management API, vi kan i princip hoppa över första steget (starta SmartConsole) och tillÀmpa API-kommandon direkt till Management-servern (SMS).
SÀtt att anvÀnda API
För att Àndra konfigurationen via API finns det fyra huvudsakliga metoder:
1) Genom anvÀndning av verktyget mgmt_cli
Exempel â # mgmt_cli add host name host1 ip-address 192.168.2.100
Detta kommando körs frĂ„n kommandoraden pĂ„ Management-servern (SMS). Syntaxen för kommandot Ă€r tydlig â host1 skapas med adressen 192.168.2.100.
2) Ange API-kommandon genom clish (i expertlÀge)
I princip Àr allt du behöver att logga in i kommandoraden (mgmt login) med det konto som anvÀnds vid anslutning via SmartConsole (eller root-konto). DÀrefter kan du ange API-kommandon (i det hÀr fallet Àr det inte nödvÀndigt att anvÀnda verktyget mgmt_cli). Du kan skapa fullt fungerande BASH-skript. Exempel pÄ ett skript som skapar en vÀrd:
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
Om du Àr intresserad kan du se motsvarande video:

3) Via SmartConsole, öppna CLI-fönstret
Allt du behöver göra Àr att starta fönstret CLI direkt frÄn SmartConsole, som visas pÄ bilden nedan.

I detta fönster kan du omedelbart börja ange API-kommandon.
4) Web Services. AnvÀnd HTTPS Post begÀran (REST API)
Enligt vÄr Äsikt Àr detta en av de mest lovande metoderna, eftersom den möjliggör att 'bygga' hela applikationer för hantering av huvudservern (ursÀkta upprepningen). Nedan kommer vi att titta nÀrmare pÄ denna metod.
Om vi sammanfattar:
- API + cli passar bÀttre för personer som Àr vana vid Cisco;
- API + shell för att anvÀnda skript och utföra rutinuppgifter;
- REST API för automatisering.
Aktivering av API
Som standard Àr API aktiverat pÄ managementservrar med mer Àn 4 GB RAM och standalone-konfigurationer med mer Àn 8 GB RAM. Du kan kontrollera statusen med kommandot: api status
Om det visar sig att API Àr avstÀngt kan det enkelt aktiveras via SmartConsole: Manage & Settings > Blades > Management API > Advanced Settings

DÀrefter publicera (Publish) Àndringar och utföra kommandot api restart.
WebbförfrÄgningar + Python
För att utföra API-kommandon kan du anvÀnda webbförfrÄgningar tillsammans med Python och bibliotek requests, json. I allmÀnhet bestÄr strukturen för webbförfrÄgningar av tre delar:
1) Adress
(https://<management 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) BegÀrningspayload
Text i JSON-format som innehÄller olika parametrar
Exempel pÄ anrop av olika kommandon:
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-adress GAIA
LÄt oss ge nÄgra typiska uppgifter som man ofta stöter pÄ vid administration av Check Point.
1) Exempel pÄ inloggnings- och utloggningsfunktioner:
Skript
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) Aktivering av blade och nÀtverksinstÀllningar:
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) Ăndring av brandvĂ€ggsregler:
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) TillÀgg av applikationslager:
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) Publicera och installera policy, kontrollera utförandet av kommandot (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) LÀgg till vÀrd:
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) LÀgg till fÀlt för hotförebyggande:
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) Visa lista över sessioner
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) Skapa en ny 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) Byt ÄtgÀrd för IPS-signatur:
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) LÀgg till din tjÀnst:
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) LĂ€gg till kategori, webbplats eller grupp:
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))
Dessutom, med hjÀlp av Web API du kan lÀgga till och ta bort nÀtverk, vÀrdar, Ätkomstroller osv. Det finns möjlighet att konfigurera bladhÄl. Antivirus, Antibot, IPS, VPN. Det Àr Àven möjligt att installera licenser med hjÀlp av kommandot run-script. Alla API-kommandon frÄn Check Point kan ses .
Check Point API + Postman
Det Àr ocksÄ bekvÀmt att anvÀnda Check Point Web API i samarbete med . Postman har desktopversioner för Windows, Linux och MacOS. Dessutom finns det ett tillÀgg för Google Chrome. Det Àr det vi kommer att anvÀnda. Först mÄste du hitta Postman i Google Chrome Store och installera:

Med det hÀr verktyget kan vi formulera webbförfrÄgningar till Check Point API. För att slippa memorera alla API-kommandon finns det möjlighet att importera sÄ kallade collections (mallar) som redan innehÄller alla nödvÀndiga kommandon:

du hittar collection för R80.10. Efter importen blir mallarna för API-kommandon tillgÀngliga för oss:

Enligt min mening Àr det mycket bekvÀmt. Man kan snabbt börja utveckla applikationer med Check Point API.
Check Point + Ansible
Jag vill ocksÄ pÄpeka att det finns Ansible för CheckPoint API. Modulen möjliggör hantering av konfigurationer, men den Àr inte sÄ anvÀndbar för att lösa exotiska uppgifter. Att skriva skript pÄ vilket programmeringssprÄk som helst ger mer flexibla och bekvÀmare lösningar.
Utdata
HÀrmed avslutar vi vÄr lilla översikt av Check Point API. Enligt min mening var denna funktion mycket efterlÀngtad och nödvÀndig. FramtrÀdandet av API öppnar mycket stora möjligheter bÄde för systemadministratörer och systemintegratörer som arbetar med produkter frÄn Check Point. Orkestrering, automatisering, feedback med SIEM⊠allt detta Àr nu möjligt.
P.S. Fler artiklar om kan du alltid hitta i vÄr blogg eller i bloggen pÄ .
P.S.S. Tekniska frÄgor om konfigureringen av Check Point kan stÀllas
Endast registrerade anvÀndare kan delta i omröstningen. , tack.
Planerar du att anvÀnda API?
70,6%Ja12
23,5%Nej4
5,9%AnvÀnder redan1
17 anvÀndare har röstat. 3 anvÀndare avstod.
KĂ€lla: habr.com
