
Ich bin sicher, dass jeder, der jemals mit , schon einmal die Herausforderung erlebt hat, die Konfiguration nicht über die Kommandozeile anpassen zu können. Dies ist besonders frustrierend für diejenigen, die zuvor mit Cisco ASA gearbeitet haben, wo alles über die CLI konfiguriert werden kann. Bei Check Point ist es genau umgekehrt – alle Sicherheitskonfigurationen erfolgen ausschließlich über die grafische Benutzeroberfläche. Dennoch gibt es einige Dinge, die über das GUI (selbst ein so benutzerfreundliches wie das von Check Point) einfach unpraktisch sind. Zum Beispiel wird eine Aufgabe wie das Hinzufügen von 100 neuen Hosts oder Netzwerken zu einem langwierigen und mühsamen Prozess. Für jedes Objekt muss man mehrere Male klicken und die IP-Adresse eingeben. Das Gleiche gilt für die Erstellung von Gruppen oder das massenhafte Aktivieren/Deaktivieren von IPS-Signaturen. Dabei besteht eine hohe Wahrscheinlichkeit für Fehler.
Relativ kürzlich gab es ein „Wunder“. Mit der Veröffentlichung der neuen Version Gaia R80 wurde die Möglichkeit angekündigt, APIszu nutzen, was viele Möglichkeiten für die Automatisierung von Einstellungen, Administration, Monitoring usw. eröffnet. Jetzt kann man:
- Objekte erstellen;
- Access-Listen hinzufügen oder ändern;
- Blades aktivieren/deaktivieren;
- Netzwerkschnittstellen konfigurieren;
- Richtlinien installieren;
- und vieles mehr.
Ehrlich gesagt, verstehe ich nicht, wie diese Nachricht an Habr vorbeigegangen ist. In diesem Artikel beschreiben wir kurz, wie man die API verwendet und geben einige praktische Beispiele. CheckPoint-Konfigurationen mit Hilfe von Skripten.
Ich möchte gleich klarstellen, dass die API nur für den Management-Server verwendet wird. D.h., es ist nach wie vor unmöglich, Gateways ohne Management-Server zu verwalten.
Wer könnte von dieser API profitieren?
- Systemadministratoren, die routinemäßige Aufgaben bei der Konfiguration von Check Point vereinfachen oder automatisieren möchten;
- Unternehmen, die Check Point in andere Lösungen integrieren wollen (Virtualisierungssysteme, Ticket-Systeme, Konfigurationsmanagement-Systeme usw.);
- Systemintegratoren, die die Konfigurationen standardisieren oder zusätzliche Produkte in Verbindung mit Check Point erstellen möchten.
Typisches Diagramm
Stellen wir uns also ein typisches Diagramm mit Check Point vor:

Wie gewohnt haben wir ein Gateway (SG), einen Management-Server (SMS) und die Administrationskonsole (SmartConsole). In der Regel sieht der Prozess zur Konfiguration des Gateways folgendermaßen aus:

Das heißt, zunächst muss der Administrator-Computer gestartet werden. SmartConsole, mit dem wir uns mit dem Management-Server verbinden (SMS). Auf dem SMS werden Sicherheitseinstellungen vorgenommen, und dann werden (Installationsrichtlinien) auf das Gateway angewendet (SG).
Bei Verwendung eines Management-API, im Prinzip können wir den ersten Punkt (Start von SmartConsole) überspringen und API-Befehle direkt an den Management-Server (SMS) anwenden.
Verwendungsmöglichkeiten der API
Für die Bearbeitung der Konfiguration über die API gibt es vier Hauptmethoden:
1) Mit dem Tool mgmt_cli
Beispiel — # mgmt_cli add host name host1 ip-address 192.168.2.100
Dieser Befehl wird über die Befehlszeile des Management-Servers (SMS) ausgeführt. Ich denke, die Syntax des Befehls ist klar — host1 wird mit der Adresse 192.168.2.100 erstellt.
2) API-Befehle über clish (im Expertenmodus) eingeben
Im Grunde genommen müssen Sie sich nur in der Befehlszeile (mgmt login) mit dem Konto anmelden, das zur Verbindung über SmartConsole verwendet wird (oder mit dem Root-Konto). Dann können Sie API-Befehle (in diesem Fall ist es nicht erforderlich, vor jedem Befehl das Tool mgmt_cli) zu verwenden. Sie können vollständige BASH-Skripteerstellen. Beispiel eines Skripts, das einen Host erstellt:
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
Falls es interessant ist, können Sie das entsprechende Video ansehen:

3) Über die SmartConsole, indem Sie das CLI-Fenster öffnen
Alles, was Sie tun müssen, ist das Fenster CLI direkt aus SmartConsole, wie im Bild unten dargestellt.

In diesem Fenster können Sie sofort mit der Eingabe von API-Befehlen beginnen.
4) Webdienste. Verwenden Sie eine HTTPS-POST-Anfrage (REST API).
Unserer Meinung nach ist dies eine der vielversprechendsten Methoden, da sie es ermöglicht, ganze Anwendungen zur Verwaltung von Verwaltungservern zu „bauen“ (Entschuldigung für die Tautologie). Im Folgenden betrachten wir diese Methode etwas detaillierter.
Zusammengefasst:
- API + cli eignet sich besser für Personen, die mit Cisco vertraut sind;
- API + shell für das Ausführen von Skripten und das Durchführen routinemäßiger Aufgaben;
- REST API für die Automatisierung.
Aktivierung der API
Standardmäßig ist die API auf Managementservern mit mehr als 4 GB RAM und eigenständigen Konfigurationen mit mehr als 8 GB RAM aktiviert. Den Status können Sie mit dem Befehl überprüfen: api status
Wenn sich herausstellt, dass die API deaktiviert ist, kann sie über die SmartConsole recht einfach aktiviert werden: Verwalten & Einstellungen > Blades > Management API > Erweiterte Einstellungen

Anschließend die Änderungen veröffentlichen (Veröffentlichen) und den Befehl ausführen api restart.
Webanfragen + Python
Um API-Befehle auszuführen, können Sie Webanfragen mit Hilfe von Python und Bibliotheken requests, json. Im Allgemeinen besteht die Struktur der Webanfrage aus drei Teilen:
1) Adresse
(https://:/web_api/)
2) HTTP-Header
content-Type: application/json
x-chkp-sid:
3) Anforderungspayload
Text im JSON-Format, der die verschiedenen Parameter enthält
Beispiel für den Aufruf verschiedener Befehle:
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-Adresse GAIA
Hier sind einige typische Aufgaben, die häufig bei der Administration von Check Point auftreten.
1) Beispiel für Authentifizierungs- und Logout-Funktionen:
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) Aktivierung von Blades und Netzwerkkonfiguration:
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) Änderung der Firewall-Regeln:
Script
new_access_data={'name':'Aufräumregel','layer':'Netzwerk','action':'Akzeptieren'}
new_access_result = api_call('xxx.xxx.xxx.xxx', 443,'set-access-rule', new_access_data ,sid)
print(json.dumps(new_access_result))
4) Hinzufügen der Anwendungsschicht:
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) Veröffentlichung und Installation der Richtlinie, Überprüfung der Ausführung des Befehls (task-id):
Script
publish_result = api_call('xxx.xxx.xxx.xxx', 443,"publish", {},sid)
print("Veröffentlichungsergebnis: " + 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 hinzufügen:
Script
new_host_data = {'name':'JohnDoePc', 'ip-address': '192.168.0.10'}
ew_host_result = api_call('xxx.xxx.xxx.xxx', 443,'add-host', new_host_data ,sid)
print(json.dumps(new_host_result))
7) Hinzufügen des Bereichs Bedrohungsschutz:
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) Sitzungsliste ansehen
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) Neues Profil erstellen:
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) Aktion für IPS-Signatur ändern:
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) Fügen Sie Ihren Dienst hinzu:
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) Fügen Sie eine Kategorie, Website oder Gruppe hinzu:
Script
add_application_site_category={ "name" : "Valve","description" : "Valve Spiele"}
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.de" ], "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" : "Spiele","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))
Darüber hinaus können Sie mithilfe von Web API Netzwerke, Hosts, Zugriffsrollen usw. hinzufügen und entfernen. Es besteht die Möglichkeit, Blades zu konfigurieren: Antivirus, Antibot, IPS, VPN. Es ist sogar möglich, Lizenzen mit dem Befehl run-script. Eine vollständige Übersicht aller API-Befehle von Check Point finden Sie unter .
Check Point API + Postman
Es ist auch praktisch, Check Point Web API in Kombination mit . Postman bietet Desktop-Versionen für Windows, Linux und MacOS an. Zudem gibt es ein Plugin für Google Chrome. Dieses werden wir verwenden. Zuerst müssen Sie Postman im Google Chrome Store finden und installieren:

Mit diesem Tool können wir Webanfragen an die Check Point API stellen. Um nicht alle API-Befehle memorieren zu müssen, gibt es die Möglichkeit, sogenannte Collections (Vorlagen) zu importieren, die bereits alle notwendigen Befehle enthalten:

Sie finden Collection für R80.10. Nach dem Import stehen uns die Vorlagen für die API-Befehle zur Verfügung:

Meiner Meinung nach ist das sehr praktisch. So kann man schnell mit der Entwicklung von Anwendungen unter Verwendung der Check Point API beginnen.
Check Point + Ansible
Außerdem möchte ich hervorheben, dass es ein Ansible für die Checkpoint API gibt. Das Modul ermöglicht die Verwaltung von Konfigurationen, ist jedoch nicht so bequem, wenn es um exotische Aufgaben geht. Das Schreiben von Skripten in jeder Programmiersprache bietet flexiblere und praktischere Lösungen.
Fazit
Damit schließen wir unser kleines Review über die Check Point API. Meiner Meinung nach war diese Funktion sehr lange überfällig und notwendig. Das Erscheinen der API eröffnet sowohl für Systemadministratoren als auch für Systemintegratoren, die mit Check Point Produkten arbeiten, äußerst umfangreiche Möglichkeiten. Orchestrierung, Automatisierung, Rückmeldungen an SIEM… all das ist jetzt möglich.
P.S. Weitere Artikel über finden Sie wie gewohnt in unserem Blog oder im Blog auf der .
P.S.S. Technische Fragen zur Konfiguration von Check Point können gestellt werden
Nur registrierte Benutzer können an der Umfrage teilnehmen. Sind Sie an Contour interessiert?
Planen Sie die Nutzung der API?
70,6%Ja12
23,5%Nein4
5,9%Nutze ich bereits1
17 Nutzer haben abgestimmt. 3 Nutzer haben sich enthalten.
Quelle: habr.com
