Ik weet zeker dat iedereen die er ooit mee heeft gewerkt
Relatief recent gebeurde er een ‘wonder’. Met de release van de nieuwe versie Gaia R80 de kans werd aangekondigd API-gebruik, wat ruime mogelijkheden biedt voor het automatiseren van instellingen, beheer, monitoring, enz. Nu kan je:
- objecten maken;
- toegangslijsten toevoegen of bewerken;
- blades in-/uitschakelen;
- netwerkinterfaces configureren;
- beleid installeren;
- en vele andere dingen.
Eerlijk gezegd 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 praktijkvoorbeelden. CheckPoint-instellingen met behulp van scripts.
Ik wil meteen reserveren dat de API alleen voor de Management server wordt gebruikt. Die. Het is nog steeds onmogelijk om gateways te beheren zonder een Management-server.
Wie kan deze API in principe gebruiken?
- Systeembeheerders die routinematige Check Point-configuratietaken willen vereenvoudigen of automatiseren;
- Bedrijven die Check Point willen integreren met andere oplossingen (virtualisatiesystemen, ticketsystemen, configuratiebeheersystemen, etc.);
- Systeemintegratoren die instellingen willen standaardiseren of extra Check Point-gerelateerde producten willen creëren.
Typisch schema
Laten we ons een typisch schema met Check Point voorstellen:
Zoals gewoonlijk hebben we een gateway (SG), beheerserver (SMS) en beheerdersconsole (SmartConsole). In dit geval ziet het gebruikelijke gatewayconfiguratieproces er als volgt uit:
Die. Eerst moet u op de computer van de beheerder draaien SmartConsole, waarmee we verbinding maken met de beheerserver (SMS). Beveiligingsinstellingen worden op de sms gemaakt en pas daarna toegepast (beleid installeren) naar toegangspoort (SG).
Bij gebruik van de Beheer API, kunnen we in principe het eerste punt (SmartConsole starten) overslaan en gebruiken API-opdrachten rechtstreeks naar de beheerserver (SMS).
Manieren om de API te gebruiken
Er zijn vier manieren om de configuratie te bewerken met behulp van de API:
1) Met behulp van het mgmt_cli-hulpprogramma
Voorbeeld - # mgmt_cli hostnaam host1 ip-adres 192.168.2.100 toevoegen
Deze opdracht wordt uitgevoerd vanaf de opdrachtregel van Management Server (SMS). Ik denk dat de syntaxis van het commando duidelijk is: host1 is gemaakt met het adres 192.168.2.100.
2) Voer API-opdrachten in via clish (in expertmodus)
Kortom, het enige wat u hoeft te doen is inloggen op de opdrachtregel (mgmt inloggen) onder het account dat wordt gebruikt bij het verbinden via SmartConsole (of root-account). Dan kun je naar binnen API-opdrachten (in dit geval is het niet nodig om het hulpprogramma vóór elke opdracht te gebruiken mgmt_cli). Je kunt volwaardig creëren BASH-scripts. Een voorbeeld van een script dat de host maakt:
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 door het CLI-venster te openen
Het enige wat u hoeft te doen is het raam openen CLI rechtstreeks uit SmartConsole, zoals weergegeven in de onderstaande afbeelding.
In dit venster kunt u onmiddellijk beginnen met het invoeren van API-opdrachten.
4) Webservices. Gebruik HTTPS Post-verzoek (REST API)
Naar onze mening is dit een van de meest veelbelovende methoden, omdat Hiermee kunt u hele applicaties "bouwen" op basis van beheer serverbeheer (sorry voor de tautologie). Hieronder zullen we deze methode wat gedetailleerder bekijken.
Samenvatten:
- API + cli meer geschikt voor mensen die Cisco gewend zijn;
- API + shell voor het toepassen van scripts en het uitvoeren van routinetaken;
- REST API voor automatisering.
De API inschakelen
Standaard is de API ingeschakeld op beheerservers met meer dan 4 GB RAM en op zelfstandige configuraties met meer dan 8 GB RAM. U kunt de status controleren met behulp van het commando: API-status
Mocht blijken dat de api uitgeschakeld is, dan is het vrij eenvoudig om deze via SmartConsole in te schakelen: Beheer en instellingen > Blades > Beheer-API > Geavanceerde instellingen
Publiceer vervolgens (Publiceer) wijzigingen en voer de opdracht uit api opnieuw opstarten.
Webverzoeken + Python
Om API-opdrachten uit te voeren, kunt u webverzoeken gebruiken met Python en bibliotheken verzoeken, json. Over het algemeen bestaat de structuur van een webverzoek uit drie delen:
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) Vraag lading aan
Tekst in JSON-formaat met de 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 address GAIA
Hier volgen enkele typische taken die u het vaakst tegenkomt bij het beheren van Check Point.
1) Voorbeeld van autorisatie- en uitlogfuncties:
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) De blades inschakelen en het netwerk instellen:
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) Firewallregels wijzigen:
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) 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) Publiceer en stel het beleid in, controleer de uitvoering van de opdracht (taak-id):
Script
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) 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 een veld Bedreigingspreventie 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) Maak een nieuw profiel aan:
Script
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) Wijzig de actie voor de IPS-handtekening:
Script
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) Voeg uw dienst 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) Voeg een categorie, site of groep toe:
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 met de hulp Web-API u kunt netwerken, hosts, toegangsrollen, enz. toevoegen en verwijderen. Messen kunnen worden aangepast Antivirus, Antibot, IPS, VPN. Het is zelfs mogelijk om licenties te installeren met behulp van de opdracht run-script. Alle Check Point API-opdrachten zijn hier te vinden
Check Point API + Postbode
Ook handig in gebruik Check Point Web-API in combinatie met
Met behulp van dit hulpprogramma kunnen we webverzoeken genereren voor de Check Point API. Om niet alle API-opdrachten te onthouden, is het mogelijk zogenaamde collecties (sjablonen) te importeren, die al alle benodigde opdrachten bevatten:
Volgens mij is dit erg handig. Met de Check Point API kunt u snel beginnen met het ontwikkelen van applicaties.
Controlepunt + Ansible
Ik wil ook opmerken dat dat zo is Ansible
Uitgang
Dit is waar we waarschijnlijk onze korte recensie van de Check Point API zullen afronden. Naar mijn mening was deze functie erg langverwacht en noodzakelijk. De opkomst van de API opent zeer brede mogelijkheden voor zowel systeembeheerders als systeemintegrators die met Check Point-producten werken. Orkestratie, automatisering, SIEM-feedback... het is nu allemaal mogelijk.
PS Meer artikelen over
PSS Voor technische vragen met betrekking tot het instellen van Check Point kunt u terecht
Alleen geregistreerde gebruikers kunnen deelnemen aan het onderzoek.
Ben je van plan de API te gebruiken?
-
70,6%Ja12
-
23,5%Geen4
-
5,9%Gebruikt al 1
17 gebruikers hebben gestemd. 3 gebruikers onthielden zich van stemming.
Bron: www.habr.com