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

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

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

  1. Systemadministratoren, die repetitive Aufgaben bei der Konfiguration von Check Point vereinfachen oder automatisieren möchten;
  2. Unternehmen, die Check Point mit anderen Lösungen integrieren möchten (Virtualisierungssysteme, Ticket-Systeme, Konfigurationsmanagementsysteme usw.);
  3. 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:

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

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:

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

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:

Video abspielen

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.

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

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:

  1. API + cli eignet sich besser für Personen, die an Cisco gewöhnt sind;
  2. API + shell für die Anwendung von Skripten und die Ausführung routinemäßiger Aufgaben;
  3. 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

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

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

Check Point API + Postman

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

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

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:

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

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

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

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

60GB SSD 8Gb DDR4