Ich bin mir sicher, dass jeder, der jemals damit gearbeitet hat
Ein „Wunder“ geschah vor relativ kurzer Zeit. Mit der Veröffentlichung der neuen Version Gaia R80 Die Gelegenheit wurde angekündigt API-Nutzung, was vielfältige Möglichkeiten zur Automatisierung von Einstellungen, Verwaltung, Überwachung usw. eröffnet. Jetzt kannst du:
- Objekte erstellen;
- Zugriffslisten hinzufügen oder bearbeiten;
- Blades aktivieren/deaktivieren;
- Netzwerkschnittstellen konfigurieren;
- Richtlinien installieren;
- und vieles mehr.
Ehrlich gesagt verstehe ich nicht, wie diese Nachricht an Habr weitergegeben wurde. In diesem Artikel beschreiben wir kurz die Verwendung der API und stellen einige praktische Beispiele bereit. CheckPoint-Einstellungen mithilfe von Skripten.
Ich möchte gleich reservieren, dass die API nur für den Management-Server verwendet wird. Diese. Es ist immer noch unmöglich, Gateways ohne einen Management-Server zu verwalten.
Wer kann diese API grundsätzlich nutzen?
- Systemadministratoren, die routinemäßige Check Point-Konfigurationsaufgaben vereinfachen oder automatisieren möchten;
- Unternehmen, die Check Point mit anderen Lösungen (Virtualisierungssysteme, Ticketsysteme, Konfigurationsmanagementsysteme usw.) integrieren möchten;
- Systemintegratoren, die Einstellungen standardisieren oder zusätzliche Produkte rund um Check Point erstellen möchten.
Typisches Schema
Stellen wir uns also ein typisches Schema mit Check Point vor:
Wie üblich haben wir ein Gateway (SG), Verwaltungsserver (SMS) und Admin-Konsole (SmartConsole). In diesem Fall sieht der übliche Gateway-Konfigurationsprozess wie folgt aus:
Diese. Zuerst müssen Sie es auf dem Computer des Administrators ausführen SmartConsole, mit dem wir uns mit dem Management-Server verbinden (SMS). Sicherheitseinstellungen werden auf der SMS vorgenommen und erst dann angewendet (Installationsrichtlinie) zum Gateway (SG).
Wenn Sie Verwaltungs-API, können wir grundsätzlich den ersten Punkt (SmartConsole starten) überspringen und verwenden API-Befehle direkt an den Management-Server (SMS).
Möglichkeiten zur Verwendung der API
Es gibt im Wesentlichen vier Möglichkeiten, die Konfiguration mithilfe der API zu bearbeiten:
1) Verwendung des Dienstprogramms mgmt_cli
Beispiel - # mgmt_cli Hostnamen Host1 IP-Adresse 192.168.2.100 hinzufügen
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 eingeben (im Expertenmodus)
Im Grunde müssen Sie sich lediglich an der Befehlszeile anmelden (mgmt-Login) unter dem Konto, das bei der Verbindung über SmartConsole (oder Root-Konto) verwendet wird. Dann können Sie eintreten API-Befehle (In diesem Fall ist es nicht erforderlich, das Dienstprogramm vor jedem Befehl zu verwenden mgmt_cli). Sie können vollwertige erstellen BASH-Skripte. Ein Beispiel für ein Skript, das der 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
Bei Interesse können Sie sich das entsprechende Video ansehen:
3) Über SmartConsole durch Öffnen des CLI-Fensters
Sie müssen lediglich das Fenster öffnen CLI direkt von SmartConsole, wie im Bild unten gezeigt.
In diesem Fenster können Sie sofort mit der Eingabe von API-Befehlen beginnen.
4) Webdienste. HTTPS-Post-Anfrage verwenden (REST API)
Unserer Meinung nach ist dies eine der vielversprechendsten Methoden, denn ermöglicht es Ihnen, komplette Anwendungen darauf zu „erstellen“. Management-Server-Management (Entschuldigung für die Tautologie). Im Folgenden werden wir uns diese Methode etwas genauer ansehen.
Zusammenfassen:
- API + CLI besser geeignet für Leute, die an Cisco gewöhnt sind;
- API + Shell zum Anwenden von Skripten und Durchführen von Routineaufgaben;
- REST API für Automatisierung.
Aktivieren der API
Standardmäßig ist die API auf Verwaltungsservern mit mehr als 4 GB RAM und eigenständigen Konfigurationen mit mehr als 8 GB RAM aktiviert. Sie können den Status mit dem folgenden Befehl überprüfen: API-Status
Wenn sich herausstellt, dass die API deaktiviert ist, können Sie sie ganz einfach über SmartConsole aktivieren: Verwalten und Einstellungen > Blades > Verwaltungs-API > Erweiterte Einstellungen
Dann veröffentlichen (Veröffentlichen) Änderungen und führen Sie den Befehl aus API-Neustart.
Webanfragen + Python
Um API-Befehle auszuführen, können Sie Web-Anfragen verwenden Python und Bibliotheken Zugriffe, JSON. Im Allgemeinen besteht der Aufbau einer Webanfrage aus drei Teilen:
1)Adresse
(https://<managemenet server>:<port>/web_api/<command>)
2) HTTP-Header
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Nutzlast anfordern
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 address GAIA
Hier sind einige typische Aufgaben, die Ihnen bei der Verwaltung von Check Point am häufigsten begegnen.
1) Beispiel für Autorisierungs- und Abmeldefunktionen:
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 der Blades und Einrichten des Netzwerks:
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) Firewall-Regeln ändern:
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öffentlichen und legen Sie die Richtlinie fest, überprüfen Sie die Ausführung des Befehls (Aufgaben-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) 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) Fügen Sie ein Feld „Bedrohungsprävention“ hinzu:
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) Sehen Sie sich die Liste der Sitzungen an
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" : "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) Ändern Sie die Aktion für die 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) Fügen Sie Ihren Service 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, Site oder Gruppe hinzu:
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))
Darüber hinaus mit der Hilfe Web API Sie können Netzwerke, Hosts, Zugriffsrollen usw. hinzufügen und entfernen. Klingen können individuell angepasst werden Antivirus, Antibot, IPS, VPN. Es ist sogar möglich, Lizenzen mit dem Befehl zu installieren Skript ausführen. Alle Check Point API-Befehle finden Sie hier
Check Point API + Postbote
Auch bequem in der Anwendung Check Point-Web-API in Verbindung mit
Mit diesem Dienstprogramm können wir Webanfragen an die Check Point API generieren. Um sich nicht alle API-Befehle zu merken, besteht die Möglichkeit, sogenannte Collections (Vorlagen) zu importieren, die bereits alle notwendigen Befehle enthalten:
Meiner Meinung nach ist das sehr praktisch. Mit der Check Point API können Sie schnell mit der Entwicklung von Anwendungen beginnen.
Check Point + Ansible
Ich möchte auch darauf hinweisen, dass dies der Fall ist Ansible
Abschluss
Hier werden wir wahrscheinlich unsere kurze Überprüfung der Check Point API beenden. Meiner Meinung nach wurde dieses Feature sehr lange erwartet und war notwendig. Das Aufkommen der API eröffnet sehr weitreichende Möglichkeiten sowohl für Systemadministratoren als auch für Systemintegratoren, die mit Check Point-Produkten arbeiten. Orchestrierung, Automatisierung, SIEM-Feedback ... jetzt ist alles möglich.
PS Weitere Artikel zum Thema
PSS Bei technischen Fragen zur Einrichtung von Check Point können Sie sich gerne an uns wenden
An der Umfrage können nur registrierte Benutzer teilnehmen.
Planen Sie die Verwendung der API?
-
70,6%Ja12
-
23,5%Nr. 4
-
5,9%Benutze bereits1
17 Benutzer haben abgestimmt. 3 Benutzer enthielten sich der Stimme.
Source: habr.com