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

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

Ek is seker dat almal met wie al ooit gewerk het Check Point, was daar 'n klagte oor onvermoë om die konfigurasie vanaf die opdragreël te wysig. Dit is veral wild vir diegene wat voorheen met Cisco ASA gewerk het, waar absoluut alles in die CLI gekonfigureer kan word. By Check Point is die teenoorgestelde waar - alle sekuriteitsinstellings is uitsluitlik vanaf die grafiese koppelvlak uitgevoer. Sommige dinge is egter heeltemal ongerieflik om deur die GUI te doen (selfs so gerieflik soos Check Point). Byvoorbeeld, die taak om 100 nuwe gashere of netwerke by te voeg, word 'n lang en vervelige prosedure. Vir elke voorwerp moet jy verskeie kere met die muis klik en die ip-adres invoer. Dieselfde geld vir die skep van 'n groep werwe of massaaktiveer/deaktiveer IPS-handtekeninge. In hierdie geval is daar 'n groot waarskynlikheid om 'n fout te maak.

Betreklik onlangs het 'n "wonderwerk" gebeur. Met die vrystelling van die nuwe weergawe Gaia R80 moontlikheid aangekondig is API gebruik, wat wye geleenthede oopmaak vir die outomatisering van instellings, administrasie, monitering, ens. Nou kan jy:

  • skep voorwerpe;
  • toegangslyste by te voeg of te wysig;
  • aktiveer/deaktiveer lemme;
  • konfigureer netwerkkoppelvlakke;
  • installeer polisse;
  • en nog baie meer.

Om eerlik te wees, ek verstaan ​​nie hoe hierdie nuus by Habr verbygegaan het nie. In hierdie artikel sal ons kortliks beskryf hoe om die API te gebruik en 'n paar praktiese voorbeelde gee. CheckPoint-instellings met skrifte.

Ek wil dadelik 'n bespreking maak, die API word slegs vir die Bestuursbediener gebruik. Dié. dit is steeds onmoontlik om gateways te bestuur sonder 'n Bestuursbediener.

Wie kan moontlik voordeel trek uit hierdie API?

  1. Stelseladministrateurs wat roetine Check Point-konfigurasietake wil vereenvoudig of outomatiseer;
  2. Maatskappye wat Check Point met ander oplossings wil integreer (virtualiseringstelsels, kaartjiestelsels, konfigurasiebestuurstelsels, ens.);
  3. Stelselintegreerders wat instellings wil standaardiseer of bykomende Check Point-verwante produkte wil skep.

Tipiese skema

En so, laat ons ons 'n tipiese skema met Check Point voorstel:

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

Soos gewoonlik het ons 'n poort (SG), beheer bediener (SMS) en administrasiekonsole (slim konsole). In hierdie geval is die gewone gateway-konfigurasieproses soos volg:

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

Dié. eers moet jy op die administrateur se rekenaar hardloop slim konsole, waarmee ons aan die Bestuursbediener koppel (SMS). Sekuriteitsinstellings word op SMS uitgevoer, en eers dan toegepas (installeer beleid) na die poort (SG).

As u gebruik Bestuur API, kan ons basies die eerste stap (die bekendstelling van die SmartConsole) oorslaan en aansoek doen API-opdragte direk na die Bestuursbediener (SMS).

Maniere om die API te gebruik

Daar is vier hoof maniere om die konfigurasie met behulp van die API te wysig:

1) Gebruik die mgmt_cli-hulpprogram

Voorbeeld - # mgmt_cli voeg gasheernaam gasheer1 ip-adres 192.168.2.100 by
Hierdie opdrag word vanaf die Management Server (SMS) opdragreël uitgevoer. Ek dink die sintaksis van die opdrag is duidelik - host1 is geskep met die adres 192.168.2.100.

2) Voer API-opdragte in via clish (in deskundige modus)

Basies, al wat jy hoef te doen is om aan te meld by die opdragreël (mgmt aanmeld) onder die rekening wat gebruik word wanneer u via SmartConsole (of wortelrekening) koppel. Dan kan jy reeds inskryf API-opdragte (in hierdie geval is dit nie nodig om die nut voor elke opdrag te gebruik nie mgmt_cli). Jy kan volledige skep BASH skrifte. 'n Voorbeeld van 'n skrif wat 'n gasheer skep:

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

As jy belangstel, kan jy die ooreenstemmende video kyk:

3) Via SmartConsole deur die CLI-venster oop te maak

Al wat jy hoef te doen is om die venster oop te maak CLI reguit van slim konsole, soos in die prentjie hieronder getoon.

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

In hierdie venster kan jy dadelik API-opdragte begin invoer.

4) Webdienste. Gebruik HTTPS-plasingversoek (REST API)

Na ons mening is dit een van die mees belowende maniere, want. laat jou toe om hele toepassings te "bou" volgens bestuur bediener bestuur (jammer vir die tautologie). Ons sal hierdie metode in 'n bietjie meer detail hieronder kyk.

Op te som:

  1. API+cli meer geskik vir mense wat gewoond is aan Cisco;
  2. API + dop om skrifte toe te pas en roetinetake uit te voer;
  3. REST API vir outomatisering.

Aktiveer API

By verstek is die API geaktiveer op bestuursbedieners met meer as 4 GB RAM en selfstandige konfigurasies met meer as 8 GB RAM. U kan die status nagaan met die opdrag: api status

As dit blyk dat die API gedeaktiveer is, dan is dit redelik eenvoudig om dit deur die SmartConsole te aktiveer: Bestuur en instellings > Blades > Bestuur API > Gevorderde instellings

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

Publiseer dan (Publiseer) verander en voer die opdrag uit api herbegin.

webversoeke + luislang

Om API-opdragte uit te voer, kan jy Webversoeke gebruik deur Python en biblioteke versoeke, json. Oor die algemeen bestaan ​​die struktuur van 'n webversoek uit drie dele:

1) Adres

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


2) HTTP-opskrifte

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


3) Versoek loonvrag

Teks in JSON-formaat wat die verskillende parameters bevat

Voorbeeld vir die oproep van verskeie opdragte:


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 is 'n paar tipiese take wat jy die meeste teëkom wanneer jy Check Point administreer.

1) 'n Voorbeeld van magtiging en afmeldfunksies:

Skripsie


    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) Skakel die lemme aan en stel die netwerk op:

Skripsie


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) Verander firewall reëls:

Skripsie


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) Voeg toepassingslaag by:

Skripsie


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) Publiseer en installeer die beleid, kontroleer die uitvoering van die opdrag (taak-ID):

Skripsie


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) Voeg gasheer by:

Skripsie


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 veld vir die voorkoming van bedreiging by:

Skripsie


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) Kyk na die lys sessies

Skripsie


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) Skep 'n nuwe profiel:

Skripsie


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) Verander aksie vir IPS-handtekening:

Skripsie


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 jou diens by:

Skripsie


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 kategorie, werf of groep by:

Skripsie


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

Daarbenewens, met die hulp Web-API jy kan netwerke, gashere, toegangsrolle, ens. Lemme kan gekonfigureer word Antivirus, Antibot, IPS, VPN. Dit is selfs moontlik om lisensies te installeer met behulp van die opdrag run-script. Alle Check Point API-opdragte kan gevind word hier.

Check Point API + Posman

Dit is ook gerieflik om te gebruik Check Point Web API in samewerking met Postman. Postman het rekenaarweergawes vir Windows, Linux en MacOS. Daarbenewens is daar 'n inprop vir Google Chrome. Ons sal hulle gebruik. Eerstens moet jy Postman in die Google Chrome-winkel vind en installeer:

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

Met hierdie hulpprogram sal ons webversoeke na die Check Point API kan genereer. Om nie al die API-opdragte te onthou nie, is dit moontlik om die sogenaamde versamelings (sjablone) in te voer, wat reeds al die nodige opdragte bevat:

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

Hier sal jy vind versameling vir R80.10. Na invoer sal API-opdragsjablone vir ons beskikbaar wees:

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

Na my mening is dit baie gerieflik. Jy kan baie vinnig begin met die ontwikkeling van toepassings met behulp van die Check Point API.

Check Point + Ansible

Ek wil ook daarop wys dat daar Ansible module vir die CheckPoint API. Die module laat jou toe om konfigurasies te bestuur, maar dit is nie so gerieflik om eksotiese probleme op te los nie. Die skryf van skrifte in enige programmeertaal bied meer buigsame en gerieflike oplossings.

Output

Hieroor sal ons miskien ons kort oorsig van die Check Point API voltooi. Na my mening was hierdie kenmerk baie lank verwag en nodig. Die voorkoms van die API bied baie wye geleenthede vir beide stelseladministrateurs en stelselintegreerders wat met Check Point-produkte werk. Orkestrasie, outomatisering, SIEM-terugvoer ... dit is nou alles moontlik.

PS Meer artikels oor Check Point soos altyd kan jy in ons blog vind Habr of op die blog Online.

PSS Vir tegniese vrae wat verband hou met die opstel van Check Point, kan jy hier

Slegs geregistreerde gebruikers kan aan die opname deelneem. Meld aan, asseblief.

Beplan jy om die API te gebruik?

  • 70,6%Ja 12

  • 23,5%No4

  • 5,9%Gebruik reeds 1

17 gebruikers het gestem. 3 gebruikers het buite stemming gebly.

Bron: will.com

Voeg 'n opmerking