Check Point R80.10 API. Beheer via CLI, scripts en meer.

Check Point R80.10 API. Beheer via CLI, scripts en meer.

Ik ben ervan overtuigd dat iedereen die ooit heeft gewerkt met Check Point, klachten heeft gehad over de onmogelijkheid om de configuratie vanuit de opdrachtregel te bewerken. Dit is vooral verbijsterend voor degenen die eerder met Cisco ASA hebben gewerkt, waar alles via de CLI kan worden ingesteld. Bij Check Point is het precies het tegenovergestelde — alle beveiligingsinstellingen werden uitsluitend via de grafische interface uitgevoerd. Echter, sommige zaken zijn helemaal niet handig om via de GUI te doen (zelfs een zo gebruiksvriendelijke als die van Check Point). Bijvoorbeeld, de taak om 100 nieuwe hosts of netwerken toe te voegen, verandert in een lange en moeizame procedure. Voor elk object moet je meerdere keren klikken en het IP-adres invoeren. Hetzelfde geldt voor het maken van een groep sites of het massaal in- of uitschakelen van IPS-signaturen. Daarbij is de kans groot dat je een fout maakt.

Onlangs vond er een ā€œwonderā€ plaats. Met de uitgave van de nieuwe versie Gaia R80 werd de mogelijkheid aangekondigd om gebruik te maken van de API, wat brede mogelijkheden opent voor automatisering van instellingen, beheer, monitoring, enz. Nu kun je:

  • objecten aanmaken;
  • access-lijsten toevoegen of bewerken;
  • blades in- of uitschakelen;
  • netwerkinterfaces configureren;
  • beleid installeren;
  • en nog veel meer.

Om eerlijk te zijn, begrijp ik niet hoe dit nieuws aan Habr is voorbijgegaan. In dit artikel beschrijven we kort hoe je de API kunt gebruiken en geven we enkele praktische voorbeelden van de configuratie van CheckPoint met behulp van scripts.

Ik wil meteen vermelden dat de API alleen voor de Management server wordt gebruikt. Dat betekent dat het nog steeds onmogelijk is om gateways te beheren zonder een Management server.

Voor wie kan deze API nuttig zijn?

  1. Systeembeheerders die routinetaken voor het configureren van Check Point willen vereenvoudigen of automatiseren;
  2. Bedrijven die Check Point met andere oplossingen willen integreren (virtualisatiesystemen, ticketsystemen, configuratiebeheersystemen, enz.);
  3. Systeemintegrators die de configuraties willen standaardiseren of aanvullende producten willen creƫren die verband houden met Check Point.

Typisch schema

Laten we een typisch schema met Check Point voorstellen:

Check Point R80.10 API. Beheer via CLI, scripts en meer.

Zoals gewoonlijk hebben we een gateway (SG), een beheerserver (SMS) en de beheerconsole (SmartConsole). Het gebruikelijke proces van het configureren van de gateway ziet er als volgt uit:

Check Point R80.10 API. Beheer via CLI, scripts en meer.

Dat wil zeggen, eerst moet de beheerder de computer opstarten SmartConsole, waarmee we verbinding maken met de Management-server (SMS). Op de SMS worden beveiligingsinstellingen toegepast, en pas daarna worden (install policy) op de gateway (SG).

Bij het gebruik van Management API, we kunnen in principe het eerste punt (opstarten van SmartConsole) overslaan en API-commando's direct naar de Management-server (SMS) toepassen.

Hoe de API te gebruiken

Er zijn vier hoofdmethoden om de configuratie met behulp van de API aan te passen:

1) Met behulp van de utility mgmt_cli

Voorbeeld — # mgmt_cli add host name host1 ip-address 192.168.2.100
Dit commando wordt vanuit de opdrachtregel van de Management-server (SMS) uitgevoerd. Ik denk dat de syntaxis van het commando duidelijk is — host1 wordt gemaakt met het adres 192.168.2.100.

2) API-commando's invoeren via clish (in expert modus)

In wezen is alles wat je nodig hebt, inloggen op de opdrachtregel (mgmt login) met een account dat wordt gebruikt bij de verbinding via SmartConsole (of een root-account). Dan kun je API-commando's (in dit geval is het niet nodig om de utility mgmt_cli) voor elk commando te gebruiken. Je kunt volledige BASH-scriptsmaken. Voorbeeld van een script dat een host aanmaakt:

Bash-script

#!/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

Als je geĆÆnteresseerd bent, kun je de bijbehorende video bekijken:

Video afspelen

3) Via SmartConsole, open een CLI-venster

Alles wat je hoeft te doen, is het venster opstarten CLI rechtstreeks vanuit SmartConsole, zoals hieronder weergegeven.

Check Point R80.10 API. Beheer via CLI, scripts en meer.

In dit venster kun je meteen beginnen met het invoeren van API-commando's.

4) Webservices. Gebruik een HTTPS POST-verzoek (REST API)

Naar onze mening is dit een van de meest veelbelovende manieren, omdat het mogelijk maakt om complete applicaties te "bouwen" voor serverbeheer (excuses voor de tautologie). Hieronder bekijken we deze methode iets gedetailleerder.

Om samen te vatten:

  1. API + cli meer geschikt voor mensen die gewend zijn aan Cisco;
  2. API + shell voor het uitvoeren van scripts en routinetaken;
  3. REST API voor automatisering.

API inschakelen

Standaard is de API ingeschakeld op managementservers met meer dan 4 GB RAM en standalone-configuraties met meer dan 8 GB RAM. De status kan worden gecontroleerd met het commando: api status

Als blijkt dat de API is uitgeschakeld, kan deze heel eenvoudig worden ingeschakeld via SmartConsole: Beheren & Instellingen > Blades > Management API > Geavanceerde instellingen

Check Point R80.10 API. Beheer via CLI, scripts en meer.

Vervolgens de wijzigingen publiceren (Publish) en het commando uitvoeren api restart.

Webverzoeken + Python

Voor het uitvoeren van API-commando's kunnen Web-verzoeken worden gebruikt met behulp van Python en bibliotheken requests, json. In algemene zin bestaat de structuur van een webverzoek uit drie delen:

1) Adres

(https://<management server>:<port>/web_api/<command>) 


2) HTTP-headers

content-Type: application/json
x-chkp-sid: <session ID token zoals geretourneerd door het inlogcommando>


3) Request payload

Tekst in JSON-indeling met verschillende parameters

Voorbeeld voor het aanroepen van verschillende commando's:


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-adres GAIA

Laten we enkele typische taken bekijken die vaak voorkomen bij het beheren van Check Point.

1) Voorbeeld van functies voor aanmelding en afmelding:

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) Het inschakelen van blades en het configureren van netwerken:

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) Wijziging van firewallregels:

Script


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) Toegang tot de applicatielaag toevoegen:

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) Publiceren en installeren van beleid, controleren van de uitvoering van de opdracht (task-id):

Script


publish_result = api_call('xxx.xxx.xxx.xxx', 443,"publish", {},sid)
print("publicatie resultaat: " + 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 toevoegen:

Script


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) Voeg het veld Threat Prevention toe:

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) Bekijk de lijst met sessies.

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) Een nieuw profiel aanmaken:

Script


add_threat_profile={'name':'Apeiron', "active-protections-performance-impact" : "laag","active-protections-severity" : "laag of hoger","confidence-level-medium" : "voorkomen",
  "confidence-level-high" : "voorkomen", "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" : "Hoog of lager"},
  "overrides" : [ {"protection" : "3Com Network Supervisor Directory Traversal","capture-packets" : True,"action" : "Voorkomen","track" : "Log"},
                  {"protection" : "7-Zip ARJ Archive Handling Buffer Overflow", "capture-packets" : True,"action" : "Voorkomen","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) De actie voor IPS-signatuur wijzigen:

Script


set_threat_protection={
  "name" : "3Com Network Supervisor Directory Traversal",
  "overrides" : [{ "profile" : "Apeiron","action" : "Detecteren","track" : "Log","capture-packets" : True},
    { "profile" : "Apeiron", "action" : "Detecteren", "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) Voeg uw eigen service toe:

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) Een categorie, site of groep toevoegen:

Script


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))

Bovendien kunt u met behulp van Web API netwerken, hosts, toegangsrollen enzovoort toevoegen en verwijderen. Er is een mogelijkheid om blades in te stellen Antivirus, Antibot, IPS, VPN. Licenties kunnen zelfs worden geĆÆnstalleerd met behulp van de opdracht run-script. U kunt alle API-opdrachten van Check Point bekijken hier.

Check Point API + Postman

Het is ook handig om te gebruiken Check Point Web API in combinatie met Postman. Postman heeft desktopversies voor Windows, Linux en MacOS. Daarnaast is er een plugin voor Google Chrome. Deze zullen we gebruiken. Zoek eerst naar Postman in de Google Chrome Store en installeer:

Check Point R80.10 API. Beheer via CLI, scripts en meer.

Met deze tool kunnen we Web-aanvragen naar de Check Point API genereren. Om niet alle API-commando's te hoeven onthouden, is er de mogelijkheid om zogenaamde verzamelingen (templates) te importeren die al alle benodigde commando's bevatten:

Check Point R80.10 API. Beheer via CLI, scripts en meer.

Hier u zult vinden verzameling voor R80.10. Na de import zijn de API-commando templates beschikbaar voor ons:

Check Point R80.10 API. Beheer via CLI, scripts en meer.

Ik denk dat dit erg handig is. Je kunt vrij snel beginnen met het ontwikkelen van toepassingen met behulp van de Check Point API.

Check Point + Ansible

Er moet ook worden opgemerkt dat er Ansible module voor de CheckPoint API. Deze module maakt het mogelijk om configuraties te beheren, maar is niet zo handig voor het oplossen van exotische taken. Het schrijven van scripts in elke programmeertaal biedt flexibelere en handiger oplossingen.

Uitslag

Hiermee sluiten we onze korte blik op de Check Point API af. Ik vind deze functie zeer langverwacht en noodzakelijk. De komst van de API opent zeer brede mogelijkheden voor zowel systeembeheerders als systeemintegrators die met Check Point-producten werken. Orkestratie, automatisering, feedback met SIEM... dit alles is nu mogelijk.

P.S. Meer artikelen over Check Point kunt u zoals altijd vinden op onze blog Habr of op de blog van website.

P.S.S. Technische vragen over het instellen van Check Point kunnen worden gesteld hier

Alleen geregistreerde gebruikers kunnen deelnemen aan de enquĆŖte. Log in, alstublieft.

Plant u om de API te gebruiken?

  • 70,6%Ja12

  • 23,5%Nee4

  • 5,9%Ik gebruik het al1

17 gebruikers hebben gestemd. 3 gebruikers hebben zich onthouden.

Bron: habr.com

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers šŸ”„ Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster