Controleer punt R80.10 API. Beheer via CLI, scripts en meer

Controleer punt R80.10 API. Beheer via CLI, scripts en meer

Ik weet zeker dat iedereen die er ooit mee heeft gewerkt Check Point, er was een klacht over onmogelijkheid om de configuratie vanaf de opdrachtregel te bewerken. Dit is vooral vreemd voor degenen die eerder met Cisco ASA hebben gewerkt, waar werkelijk alles in de CLI kan worden geconfigureerd. Bij Check Point is het andersom: alle beveiligingsinstellingen werden uitsluitend vanuit de grafische interface uitgevoerd. Sommige dingen zijn echter volkomen onhandig om via de GUI te doen (zelfs één die zo handig is als die van Check Point). De taak om 100 nieuwe hosts of netwerken toe te voegen, verandert bijvoorbeeld in een lange en vervelende procedure. Voor elk object moet u meerdere keren met de muis klikken en het IP-adres invoeren. Hetzelfde geldt voor het maken van een groep sites of het massaal in-/uitschakelen van IPS-handtekeningen. In dit geval is de kans groot dat u een fout maakt.

Relatief recent gebeurde er een ‘wonder’. Met de release van de nieuwe versie Gaia R80 de kans werd aangekondigd API-gebruik, wat ruime mogelijkheden biedt voor het automatiseren van instellingen, beheer, monitoring, enz. Nu kan je:

  • objecten maken;
  • toegangslijsten toevoegen of bewerken;
  • blades in-/uitschakelen;
  • netwerkinterfaces configureren;
  • beleid installeren;
  • en vele andere dingen.

Eerlijk gezegd 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 praktijkvoorbeelden. CheckPoint-instellingen met behulp van scripts.

Ik wil meteen reserveren dat de API alleen voor de Management server wordt gebruikt. Die. Het is nog steeds onmogelijk om gateways te beheren zonder een Management-server.

Wie kan deze API in principe gebruiken?

  1. Systeembeheerders die routinematige Check Point-configuratietaken willen vereenvoudigen of automatiseren;
  2. Bedrijven die Check Point willen integreren met andere oplossingen (virtualisatiesystemen, ticketsystemen, configuratiebeheersystemen, etc.);
  3. Systeemintegratoren die instellingen willen standaardiseren of extra Check Point-gerelateerde producten willen creëren.

Typisch schema

Laten we ons een typisch schema met Check Point voorstellen:

Controleer punt R80.10 API. Beheer via CLI, scripts en meer

Zoals gewoonlijk hebben we een gateway (SG), beheerserver (SMS) en beheerdersconsole (SmartConsole). In dit geval ziet het gebruikelijke gatewayconfiguratieproces er als volgt uit:

Controleer punt R80.10 API. Beheer via CLI, scripts en meer

Die. Eerst moet u op de computer van de beheerder draaien SmartConsole, waarmee we verbinding maken met de beheerserver (SMS). Beveiligingsinstellingen worden op de sms gemaakt en pas daarna toegepast (beleid installeren) naar toegangspoort (SG).

Bij gebruik van de Beheer API, kunnen we in principe het eerste punt (SmartConsole starten) overslaan en gebruiken API-opdrachten rechtstreeks naar de beheerserver (SMS).

Manieren om de API te gebruiken

Er zijn vier manieren om de configuratie te bewerken met behulp van de API:

1) Met behulp van het mgmt_cli-hulpprogramma

Voorbeeld - # mgmt_cli hostnaam host1 ip-adres 192.168.2.100 toevoegen
Deze opdracht wordt uitgevoerd vanaf de opdrachtregel van Management Server (SMS). Ik denk dat de syntaxis van het commando duidelijk is: host1 is gemaakt met het adres 192.168.2.100.

2) Voer API-opdrachten in via clish (in expertmodus)

Kortom, het enige wat u hoeft te doen is inloggen op de opdrachtregel (mgmt inloggen) onder het account dat wordt gebruikt bij het verbinden via SmartConsole (of root-account). Dan kun je naar binnen API-opdrachten (in dit geval is het niet nodig om het hulpprogramma vóór elke opdracht te gebruiken mgmt_cli). Je kunt volwaardig creëren BASH-scripts. Een voorbeeld van een script dat de host maakt:

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:

3) Via SmartConsole door het CLI-venster te openen

Het enige wat u hoeft te doen is het raam openen CLI rechtstreeks uit SmartConsole, zoals weergegeven in de onderstaande afbeelding.

Controleer punt R80.10 API. Beheer via CLI, scripts en meer

In dit venster kunt u onmiddellijk beginnen met het invoeren van API-opdrachten.

4) Webservices. Gebruik HTTPS Post-verzoek (REST API)

Naar onze mening is dit een van de meest veelbelovende methoden, omdat Hiermee kunt u hele applicaties "bouwen" op basis van beheer serverbeheer (sorry voor de tautologie). Hieronder zullen we deze methode wat gedetailleerder bekijken.

Samenvatten:

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

De API inschakelen

Standaard is de API ingeschakeld op beheerservers met meer dan 4 GB RAM en op zelfstandige configuraties met meer dan 8 GB RAM. U kunt de status controleren met behulp van het commando: API-status

Mocht blijken dat de api uitgeschakeld is, dan is het vrij eenvoudig om deze via SmartConsole in te schakelen: Beheer en instellingen > Blades > Beheer-API > Geavanceerde instellingen

Controleer punt R80.10 API. Beheer via CLI, scripts en meer

Publiceer vervolgens (Publiceer) wijzigingen en voer de opdracht uit api opnieuw opstarten.

Webverzoeken + Python

Om API-opdrachten uit te voeren, kunt u webverzoeken gebruiken met Python en bibliotheken verzoeken, json. Over het algemeen bestaat de structuur van een webverzoek uit drie delen:

1) Adres

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


2) HTTP-headers

content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>


3) Vraag lading aan

Tekst in JSON-formaat met de 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 address GAIA

Hier volgen enkele typische taken die u het vaakst tegenkomt bij het beheren van Check Point.

1) Voorbeeld van autorisatie- en uitlogfuncties:

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) De blades inschakelen en het netwerk instellen:

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) Firewallregels wijzigen:

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) 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) Publiceer en stel het beleid in, controleer de uitvoering van de opdracht (taak-id):

Script


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 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 een veld Bedreigingspreventie 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) Maak een nieuw profiel aan:

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) Wijzig de actie voor de IPS-handtekening:

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) Voeg uw dienst 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) Voeg een categorie, site of groep toe:

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 met de hulp Web-API u kunt netwerken, hosts, toegangsrollen, enz. toevoegen en verwijderen. Messen kunnen worden aangepast Antivirus, Antibot, IPS, VPN. Het is zelfs mogelijk om licenties te installeren met behulp van de opdracht run-script. Alle Check Point API-opdrachten zijn hier te vinden hier.

Check Point API + Postbode

Ook handig in gebruik Check Point Web-API in combinatie met Postbode. Postman heeft desktopversies voor Windows, Linux en MacOS. Daarnaast is er een plug-in voor Google Chrome. Dit is wat we zullen gebruiken. Eerst moet je Postman vinden in de Google Chrome Store en installeren:

Controleer punt R80.10 API. Beheer via CLI, scripts en meer

Met behulp van dit hulpprogramma kunnen we webverzoeken genereren voor de Check Point API. Om niet alle API-opdrachten te onthouden, is het mogelijk zogenaamde collecties (sjablonen) te importeren, die al alle benodigde opdrachten bevatten:

Controleer punt R80.10 API. Beheer via CLI, scripts en meer

Hier vindt Collectie voor R80.10. Na het importeren zijn API-opdrachtsjablonen voor ons beschikbaar:

Controleer punt R80.10 API. Beheer via CLI, scripts en meer

Volgens mij is dit erg handig. Met de Check Point API kunt u snel beginnen met het ontwikkelen van applicaties.

Controlepunt + Ansible

Ik wil ook opmerken dat dat zo is Ansible module voor CheckPoint-API. Met de module kunt u configuraties beheren, maar het is niet zo handig voor het oplossen van exotische problemen. Het schrijven van scripts in elke programmeertaal biedt flexibelere en gemakkelijkere oplossingen.

Uitgang

Dit is waar we waarschijnlijk onze korte recensie van de Check Point API zullen afronden. Naar mijn mening was deze functie erg langverwacht en noodzakelijk. De opkomst van de API opent zeer brede mogelijkheden voor zowel systeembeheerders als systeemintegrators die met Check Point-producten werken. Orkestratie, automatisering, SIEM-feedback... het is nu allemaal mogelijk.

PS Meer artikelen over Check Point zoals altijd kun je het vinden op onze blog Habr of op de blog op Online.

PSS Voor technische vragen met betrekking tot het instellen van Check Point kunt u terecht hier

Alleen geregistreerde gebruikers kunnen deelnemen aan het onderzoek. Inloggen, Alsjeblieft.

Ben je van plan de API te gebruiken?

  • 70,6%Ja12

  • 23,5%Geen4

  • 5,9%Gebruikt al 1

17 gebruikers hebben gestemd. 3 gebruikers onthielden zich van stemming.

Bron: www.habr.com

Voeg een reactie