Check Point R80.10 API. Verwaltung über CLI, Skripte und mehr

Check Point R80.10 API. Verwaltung über CLI, Skripte und mehr

Ich bin sicher, dass jeder, der jemals mit Check Point, 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?

  1. Systemadministratoren, die routinemäßige Aufgaben bei der Konfiguration von Check Point vereinfachen oder automatisieren möchten;
  2. Unternehmen, die Check Point in andere Lösungen integrieren wollen (Virtualisierungssysteme, Ticket-Systeme, Konfigurationsmanagement-Systeme usw.);
  3. 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:

Check Point R80.10 API. Verwaltung über CLI, Skripte und mehr

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:

Check Point R80.10 API. Verwaltung über CLI, Skripte und mehr

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:

Video abspielen

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.

Check Point R80.10 API. Verwaltung über CLI, Skripte und mehr

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:

  1. API + cli eignet sich besser für Personen, die mit Cisco vertraut sind;
  2. API + shell für das Ausführen von Skripten und das Durchführen routinemäßiger Aufgaben;
  3. 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

Check Point R80.10 API. Verwaltung über CLI, Skripte und mehr

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 hier.

Check Point API + Postman

Es ist auch praktisch, Check Point Web API in Kombination mit Postman. 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:

Check Point R80.10 API. Verwaltung über CLI, Skripte und mehr

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:

Check Point R80.10 API. Verwaltung über CLI, Skripte und mehr

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

Check Point R80.10 API. Verwaltung über CLI, Skripte und mehr

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 Modul 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 Check Point finden Sie wie gewohnt in unserem Blog Habr oder im Blog auf der Webseite.

P.S.S. Technische Fragen zur Konfiguration von Check Point können gestellt werden hier

Nur registrierte Benutzer können an der Umfrage teilnehmen. Bitte melden Sie sich an.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

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster