
Ik ben ervan overtuigd dat iedereen die ooit heeft gewerkt met , klachten heeft gehad over de onmogelijkheid om de configuratie vanuit de opdrachtregel te bewerken. Dit is vooral verbijsterend voor degenen die eerder met Cisco ASA hebben gewerkt, waar alles via de CLI kan worden ingesteld. Bij Check Point is het precies het tegenovergestelde ā alle beveiligingsinstellingen werden uitsluitend via de grafische interface uitgevoerd. Echter, sommige zaken zijn helemaal niet handig om via de GUI te doen (zelfs een zo gebruiksvriendelijke als die van Check Point). Bijvoorbeeld, de taak om 100 nieuwe hosts of netwerken toe te voegen, verandert in een lange en moeizame procedure. Voor elk object moet je meerdere keren klikken en het IP-adres invoeren. Hetzelfde geldt voor het maken van een groep sites of het massaal in- of uitschakelen van IPS-signaturen. Daarbij is de kans groot dat je een fout maakt.
Onlangs vond er een āwonderā plaats. Met de uitgave van de nieuwe versie Gaia R80 werd de mogelijkheid aangekondigd om gebruik te maken van de API, wat brede mogelijkheden opent voor automatisering van instellingen, beheer, monitoring, enz. Nu kun je:
- objecten aanmaken;
- access-lijsten toevoegen of bewerken;
- blades in- of uitschakelen;
- netwerkinterfaces configureren;
- beleid installeren;
- en nog veel meer.
Om eerlijk te zijn, begrijp ik niet hoe dit nieuws aan Habr is voorbijgegaan. In dit artikel beschrijven we kort hoe je de API kunt gebruiken en geven we enkele praktische voorbeelden van de configuratie van CheckPoint met behulp van scripts.
Ik wil meteen vermelden dat de API alleen voor de Management server wordt gebruikt. Dat betekent dat het nog steeds onmogelijk is om gateways te beheren zonder een Management server.
Voor wie kan deze API nuttig zijn?
- Systeembeheerders die routinetaken voor het configureren van Check Point willen vereenvoudigen of automatiseren;
- Bedrijven die Check Point met andere oplossingen willen integreren (virtualisatiesystemen, ticketsystemen, configuratiebeheersystemen, enz.);
- Systeemintegrators die de configuraties willen standaardiseren of aanvullende producten willen creƫren die verband houden met Check Point.
Typisch schema
Laten we een typisch schema met Check Point voorstellen:

Zoals gewoonlijk hebben we een gateway (SG), een beheerserver (SMS) en de beheerconsole (SmartConsole). Het gebruikelijke proces van het configureren van de gateway ziet er als volgt uit:

Dat wil zeggen, eerst moet de beheerder de computer opstarten SmartConsole, waarmee we verbinding maken met de Management-server (SMS). Op de SMS worden beveiligingsinstellingen toegepast, en pas daarna worden (install policy) op de gateway (SG).
Bij het gebruik van Management API, we kunnen in principe het eerste punt (opstarten van SmartConsole) overslaan en API-commando's direct naar de Management-server (SMS) toepassen.
Hoe de API te gebruiken
Er zijn vier hoofdmethoden om de configuratie met behulp van de API aan te passen:
1) Met behulp van de utility mgmt_cli
Voorbeeld ā # mgmt_cli add host name host1 ip-address 192.168.2.100
Dit commando wordt vanuit de opdrachtregel van de Management-server (SMS) uitgevoerd. Ik denk dat de syntaxis van het commando duidelijk is ā host1 wordt gemaakt met het adres 192.168.2.100.
2) API-commando's invoeren via clish (in expert modus)
In wezen is alles wat je nodig hebt, inloggen op de opdrachtregel (mgmt login) met een account dat wordt gebruikt bij de verbinding via SmartConsole (of een root-account). Dan kun je API-commando's (in dit geval is het niet nodig om de utility mgmt_cli) voor elk commando te gebruiken. Je kunt volledige BASH-scriptsmaken. Voorbeeld van een script dat een host aanmaakt:
Bash-script
#!/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
Als je geĆÆnteresseerd bent, kun je de bijbehorende video bekijken:

3) Via SmartConsole, open een CLI-venster
Alles wat je hoeft te doen, is het venster opstarten CLI rechtstreeks vanuit SmartConsole, zoals hieronder weergegeven.

In dit venster kun je meteen beginnen met het invoeren van API-commando's.
4) Webservices. Gebruik een HTTPS POST-verzoek (REST API)
Naar onze mening is dit een van de meest veelbelovende manieren, omdat het mogelijk maakt om complete applicaties te "bouwen" voor serverbeheer (excuses voor de tautologie). Hieronder bekijken we deze methode iets gedetailleerder.
Om samen te vatten:
- API + cli meer geschikt voor mensen die gewend zijn aan Cisco;
- API + shell voor het uitvoeren van scripts en routinetaken;
- REST API voor automatisering.
API inschakelen
Standaard is de API ingeschakeld op managementservers met meer dan 4 GB RAM en standalone-configuraties met meer dan 8 GB RAM. De status kan worden gecontroleerd met het commando: api status
Als blijkt dat de API is uitgeschakeld, kan deze heel eenvoudig worden ingeschakeld via SmartConsole: Beheren & Instellingen > Blades > Management API > Geavanceerde instellingen

Vervolgens de wijzigingen publiceren (Publish) en het commando uitvoeren api restart.
Webverzoeken + Python
Voor het uitvoeren van API-commando's kunnen Web-verzoeken worden gebruikt met behulp van Python en bibliotheken requests, json. In algemene zin bestaat de structuur van een webverzoek uit drie delen:
1) Adres
(https://<management server>:<port>/web_api/<command>)
2) HTTP-headers
content-Type: application/json
x-chkp-sid: <session ID token zoals geretourneerd door het inlogcommando>
3) Request payload
Tekst in JSON-indeling met verschillende parameters
Voorbeeld voor het aanroepen van verschillende commando'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-adres GAIA
Laten we enkele typische taken bekijken die vaak voorkomen bij het beheren van Check Point.
1) Voorbeeld van functies voor aanmelding en afmelding:
Script
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) Het inschakelen van blades en het configureren van netwerken:
Script
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) Wijziging van firewallregels:
Script
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) Toegang tot de applicatielaag toevoegen:
Script
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) Publiceren en installeren van beleid, controleren van de uitvoering van de opdracht (task-id):
Script
publish_result = api_call('xxx.xxx.xxx.xxx', 443,"publish", {},sid)
print("publicatie resultaat: " + 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) Host toevoegen:
Script
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) Voeg het veld Threat Prevention toe:
Script
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) Bekijk de lijst met sessies.
Script
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) Een nieuw profiel aanmaken:
Script
add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "laag","active-protections-severity" : "laag of hoger","confidence-level-medium" : "voorkomen",
"confidence-level-high" : "voorkomen", "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" : "Hoog of lager"},
"overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Voorkomen","track" : "Log"},
{"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Voorkomen","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) De actie voor IPS-signatuur wijzigen:
Script
set_threat_protection={
"name" : "3Com Network Supervisor Directory Traversal",
"overrides" : [{ "profile" : "Apeiron","action" : "Detecteren","track" : "Log","capture-packets" : True},
{ "profile" : "Apeiron", "action" : "Detecteren", "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) Voeg uw eigen service toe:
Script
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) Een categorie, site of groep toevoegen:
Script
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))
Bovendien kunt u met behulp van Web API netwerken, hosts, toegangsrollen enzovoort toevoegen en verwijderen. Er is een mogelijkheid om blades in te stellen Antivirus, Antibot, IPS, VPN. Licenties kunnen zelfs worden geĆÆnstalleerd met behulp van de opdracht run-script. U kunt alle API-opdrachten van Check Point bekijken .
Check Point API + Postman
Het is ook handig om te gebruiken Check Point Web API in combinatie met . Postman heeft desktopversies voor Windows, Linux en MacOS. Daarnaast is er een plugin voor Google Chrome. Deze zullen we gebruiken. Zoek eerst naar Postman in de Google Chrome Store en installeer:

Met deze tool kunnen we Web-aanvragen naar de Check Point API genereren. Om niet alle API-commando's te hoeven onthouden, is er de mogelijkheid om zogenaamde verzamelingen (templates) te importeren die al alle benodigde commando's bevatten:

u zult vinden verzameling voor R80.10. Na de import zijn de API-commando templates beschikbaar voor ons:

Ik denk dat dit erg handig is. Je kunt vrij snel beginnen met het ontwikkelen van toepassingen met behulp van de Check Point API.
Check Point + Ansible
Er moet ook worden opgemerkt dat er Ansible voor de CheckPoint API. Deze module maakt het mogelijk om configuraties te beheren, maar is niet zo handig voor het oplossen van exotische taken. Het schrijven van scripts in elke programmeertaal biedt flexibelere en handiger oplossingen.
Uitslag
Hiermee sluiten we onze korte blik op de Check Point API af. Ik vind deze functie zeer langverwacht en noodzakelijk. De komst van de API opent zeer brede mogelijkheden voor zowel systeembeheerders als systeemintegrators die met Check Point-producten werken. Orkestratie, automatisering, feedback met SIEM... dit alles is nu mogelijk.
P.S. Meer artikelen over kunt u zoals altijd vinden op onze blog of op de blog van .
P.S.S. Technische vragen over het instellen van Check Point kunnen worden gesteld
Alleen geregistreerde gebruikers kunnen deelnemen aan de enquĆŖte. , alstublieft.
Plant u om de API te gebruiken?
70,6%Ja12
23,5%Nee4
5,9%Ik gebruik het al1
17 gebruikers hebben gestemd. 3 gebruikers hebben zich onthouden.
Bron: habr.com
