
Ich bin mir sicher, dass jeder, der jemals mit , eine Beschwerde über die Unmöglichkeit der Konfiguration über die Befehlszeile hatte.Das ist besonders verrückt für diejenigen, die zuvor mit Cisco ASA gearbeitet haben, wo man alles im CLI einstellen kann. Bei Check Point ist alles umgekehrt – alle Sicherheitseinstellungen wurden ausschließlich über die grafische Benutzeroberfläche vorgenommen. Allerdings gibt es einige Dinge, die über die GUI (auch wenn sie so benutzerfreundlich wie die von Check Point ist) absolut unpraktisch zu erledigen sind. Zum Beispiel wird die Aufgabe, 100 neue Hosts oder Netzwerke hinzuzufügen, in ein langwieriges und mühsames Verfahren verwandelt. Man muss für jedes Objekt mehrmals klicken und die IP-Adresse eingeben. Das Gleiche gilt für das Erstellen von Website-Gruppen oder das massenhafte Aktivieren/Deaktivieren von IPS-Signaturen. Dabei ist die Wahrscheinlichkeit groß, einen Fehler zu machen.
Relativ kürzlich geschah ein "Wunder". Mit der Veröffentlichung der neuen Version Gaia R80 wurde die Möglichkeit der Nutzung von API, was umfangreiche Möglichkeiten zur Automatisierung von Einstellungen, Administration, Monitoring usw. eröffnet. Jetzt kann man:
- Objekte erstellen;
- Access-Listen hinzufügen oder bearbeiten;
- Blades aktivieren/deaktivieren;
- Netzwerkschnittstellen konfigurieren;
- Richtlinien installieren;
- und vieles mehr.
Um ehrlich zu sein, verstehe ich nicht, wie diese Nachricht an Habr vorbeigegangen ist. In diesem Artikel werden wir kurz erläutern, wie man die API benutzt und einige praktische Beispiele für die Konfiguration von CheckPoint 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 nicht möglich, Gateways ohne den Management-Server zu verwalten.
Wer könnte diese API grundsätzlich nützlich finden?
- Systemadministratoren, die repetitive Aufgaben bei der Konfiguration von Check Point vereinfachen oder automatisieren möchten;
- Unternehmen, die Check Point mit anderen Lösungen integrieren möchten (Virtualisierungssysteme, Ticket-Systeme, Konfigurationsmanagementsysteme usw.);
- Systemintegratoren, die die Einstellungen standardisieren oder zusätzliche Produkte im Zusammenhang mit Check Point erstellen möchten.
Typisches Schema
Und so stellen wir ein typisches Schema mit Check Point vor:

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

Das heißt, zuerst muss auf dem Computer des Administrators gestartet werden. SmartConsole, mit dem wir uns mit dem Management-Server verbinden (SMS). Die Sicherheitskonfiguration wird auf dem SMS durchgeführt, und anschließend werden (Installationsrichtlinie) auf das Gateway angewendet (SG).
Bei der Nutzung eines Management API, wir können grundsätzlich den ersten Punkt (Start von SmartConsole) überspringen und API-Befehle direkt an den Management-Server (SMS) anwenden.
Nutzung von API
Es gibt vier Hauptmethoden zur Bearbeitung der Konfiguration über die API:
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) Eingeben von API-Befehlen über clish (im Expertenmodus)
Im Grunde müssen Sie sich nur in der Befehlszeile einloggen (mgmt login) mit dem Konto, das beim Verbinden ü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. Man kann vollständige BASH-Skripteerstellen. Ein Beispiel für ein Skript, 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
Wenn Sie interessiert sind, können Sie das zugehörige Video ansehen:

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

In diesem Fenster können Sie sofort beginnen, API-Befehle einzugeben.
4) Web Services. Verwendung von HTTPS Post-Anfragen (REST API)
Meiner Meinung nach ist dies eine der vielversprechendsten Methoden, da sie es ermöglicht, ganze Anwendungen zur Verwaltung des Management-Servers zu „bauen“ (entschuldigen Sie die Wortwiederholung). Nachfolgend betrachten wir diese Methode etwas genauer.
Zusammenfassend:
- API + cli eignet sich besser für Personen, die an Cisco gewöhnt sind;
- API + shell für die Anwendung von Skripten und die Ausführung routinemäßiger Aufgaben;
- REST API zur Automatisierung.
Aktivierung der API
Standardmäßig ist die API auf Management-Servern mit mehr als 4 GB RAM und Standalone-Konfigurationen mit mehr als 8 GB RAM aktiviert. Den Status kann man mit dem Befehl überprüfen: api status
Wenn sich herausstellt, dass die API deaktiviert ist, kann sie relativ einfach über SmartConsole aktiviert werden: Verwalten & Einstellungen > Blades > Management API > Erweiterte Einstellungen

Dann veröffentlichen Sie (Veröffentlichen) die Änderungen und führen Sie den Befehl aus api restart.
Web-Anfragen + Python
Um API-Befehle auszuführen, können Web-Anfragen mit Hilfe von Python und Bibliotheken verwendet werden. requests, json. Im Allgemeinen besteht die Struktur einer Web-Anfrage aus drei Teilen:
1) Adresse
(https://:/web_api/)
2) HTTP-Header
Content-Type: application/json
x-chkp-sid:
3) Anforderung Payload
Text im JSON-Format mit den verschiedenen Parametern
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
Lassen Sie uns einige typische Aufgaben anführen, mit denen Administratoren von Check Point häufig konfrontiert sind.
1) Beispiel für Authentifizierungs- und Logout-Funktionen:
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) Einschalten von Blades und Netzwerkeinrichtung:
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) Änderung von Firewall-Regeln:
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) Hinzufügen einer Anwendungsschicht:
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) Veröffentlichung und Installation von Richtlinien, Überprüfung der Ausführung des Befehls (task-id):
Skript
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:
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) Hinzufügen eines Bedrohungsschutzfeldes:
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) Liste der Sitzungen anzeigen
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) Erstellen Sie ein neues Profil:
Skript
add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "niedrig","active-protections-severity" : "niedrig oder höher","confidence-level-medium" : "verhindern",
"confidence-level-high" : "verhindern", "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" : "Hoch oder niedriger"},
"overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Verhindern","track" : "Protokoll"},
{"protection" : "7-Zip ARJ Archiv Verwaltung Pufferüberlauf", "capture-packets" : True,"action" : "Verhindern","track" : "Protokoll"} ]}
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) Ändern Sie die Aktion für die IPS-Signatur:
Skript
set_threat_protection={
"name" : "3Com Network Supervisor Directory Traversal",
"overrides" : [{ "profile" : "Apeiron","action" : "Erkennen","track" : "Protokoll","capture-packets" : True},
{ "profile" : "Apeiron", "action" : "Erkennen", "track" : "Protokoll", "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:
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) Fügen Sie eine Kategorie, eine Website oder eine Gruppe hinzu:
Skript
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.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" : "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))
Außerdem könnt ihr mit Web-API Sie können Netzwerke, Hosts, Zugriffsrollen usw. hinzufügen und löschen. Es besteht die Möglichkeit, Blades zu konfigurieren. Antivirus, Antibot, IPS, VPN. Sogar die Installation von Lizenzen kann mit dem Befehl run-script. Mit allen API-Befehlen von Check Point können Sie sich vertraut machen. .
Check Point API + Postman
Es ist auch praktisch, Check Point Web API in Verbindung mit . Postman hat Desktop-Versionen für Windows, Linux und MacOS. Außerdem gibt esein 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 formulieren. Um nicht alle API-Befehle im Gedächtnis behalten zu müssen, gibt es die Möglichkeit, sogenannte Collections (Vorlagen) zu importieren, die bereits alle notwendigen Befehle enthalten:

Sie finden Sammlung 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. Man kann recht zügig mit der Entwicklung von Anwendungen unter Verwendung der Check Point API beginnen.
Check Point + Ansible
Ich möchte auch darauf hinweisen, dass es ein Ansible für CheckPoint API gibt. Das Modul ermöglicht die Verwaltung von Konfigurationen, ist für exotische Aufgaben jedoch nicht so gut geeignet. Das Schreiben von Skripten in jeder Programmiersprache bietet flexiblere und komfortablere Lösungen.
Ausgabe
Damit beenden wir unseren kleinen Überblick über die Check Point API. Meiner Meinung nach war dieses Feature sehr lange erwartet und notwendig. Das Erscheinen der API eröffnet sowohl Systemadministratoren als auch Systemintegratoren, die mit Check Point-Produkten arbeiten, sehr zahlreiche Möglichkeiten. Orchestrierung, Automatisierung, Rückmeldungen an SIEM... all dies ist jetzt möglich.
P.S. Mehr Artikel über finden Sie wie gewohnt in unserem Blog oder im Blog auf .
P.S.S. Technische Fragen zur Konfiguration von Check Point können gestellt werden
Nur registrierte Benutzer können an der Umfrage teilnehmen. .
Planen Sie die Verwendung 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
