Check Point R80.10 API. Upravljanje prek CLI, skriptov in več

Check Point R80.10 API. Upravljanje prek CLI, skriptov in več

Prepričan sem, da vsi, ki so kdaj delali z Check Point, je bila pritožba glede nezmožnost urejanja konfiguracije iz ukazne vrstice. To je še posebej nenavadno za tiste, ki so že delali s Cisco ASA, kjer je mogoče popolnoma vse konfigurirati v CLI. Pri Check Pointu je ravno obratno - vse varnostne nastavitve so bile izvedene izključno iz grafičnega vmesnika. Vendar pa je nekatere stvari povsem neprimerno narediti prek grafičnega uporabniškega vmesnika (tudi tako priročnega, kot je Check Point). Naloga dodajanja 100 novih gostiteljev ali omrežij se na primer spremeni v dolg in dolgočasen postopek. Za vsak predmet boste morali večkrat klikniti z miško in vnesti naslov IP. Enako velja za ustvarjanje skupine spletnih mest ali množično omogočanje/onemogočanje podpisov IPS. V tem primeru obstaja velika verjetnost napake.

"Čudež" se je zgodil relativno nedavno. Z izidom nove različice Gaia 80 € priložnost je bila napovedana uporaba API-ja, ki odpira široke možnosti za avtomatizacijo nastavitev, administracije, nadzora itd. Zdaj lahko:

  • ustvarjanje predmetov;
  • dodajanje ali urejanje dostopnih seznamov;
  • omogoči/onemogoči rezila;
  • konfigurirati omrežne vmesnike;
  • namestitvene politike;
  • in še veliko več.

Iskreno povedano, ne razumem, kako je ta novica prišla mimo Habra. V tem članku bomo na kratko opisali uporabo API-ja in podali nekaj praktičnih primerov. Nastavitve CheckPointa z uporabo skriptov.

Želel bi takoj rezervirati, da se API uporablja samo za strežnik za upravljanje. Tisti. Še vedno je nemogoče upravljati prehode brez strežnika za upravljanje.

Kdo lahko načeloma uporablja ta API?

  1. Sistemski skrbniki, ki želijo poenostaviti ali avtomatizirati rutinska konfiguracijska opravila Check Point;
  2. Podjetja, ki želijo integrirati Check Point z drugimi rešitvami (sistemi za virtualizacijo, sistemi vozovnic, sistemi za upravljanje konfiguracije itd.);
  3. Sistemski integratorji, ki želijo standardizirati nastavitve ali ustvariti dodatne izdelke, povezane s Check Pointom.

Tipična shema

Torej, predstavljajmo si tipično shemo s Check Pointom:

Check Point R80.10 API. Upravljanje prek CLI, skriptov in več

Kot ponavadi imamo prehod (SG), strežnik za upravljanje (SMS) in skrbniško konzolo (SmartConsole). V tem primeru je običajni postopek konfiguracije prehoda videti takole:

Check Point R80.10 API. Upravljanje prek CLI, skriptov in več

Tisti. Najprej morate zagnati na skrbniškem računalniku SmartConsole, s katerim se povežemo s strežnikom za upravljanje (SMS). Varnostne nastavitve se izvedejo na SMS-u in šele nato uporabijo (pravilnik o namestitvi) do prehoda (SG).

Pri uporabi API za upravljanje, lahko prvo točko v bistvu preskočimo (zaženemo SmartConsole) in uporabimo API ukazi neposredno na strežnik za upravljanje (SMS).

Načini uporabe API-ja

Obstajajo štirje glavni načini urejanja konfiguracije z uporabo API-ja:

1) Z uporabo pripomočka mgmt_cli

Primer - # mgmt_cli dodaj ime gostitelja host1 naslov IP 192.168.2.100
Ta ukaz se zažene iz ukazne vrstice strežnika za upravljanje (SMS). Mislim, da je sintaksa ukaza jasna - host1 je ustvarjen z naslovom 192.168.2.100.

2) Vnesite ukaze API prek clish (v strokovnem načinu)

V bistvu se morate le prijaviti v ukazno vrstico (mgmt prijava) pod računom, ki se uporablja pri povezovanju prek SmartConsole (ali root račun). Potem lahko vstopite API ukazi (v tem primeru ni treba uporabljati pripomočka pred vsakim ukazom mgmt_cli). Ustvarite lahko polnopravne skripte BASH. Primer skripta, ki ga ustvari gostitelj:

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

Če vas zanima, si lahko ogledate ustrezen video:

3) Prek SmartConsole z odpiranjem okna CLI

Vse kar morate storiti je, da odprete okno CLI naravnost iz SmartConsole, kot je prikazano na spodnji sliki.

Check Point R80.10 API. Upravljanje prek CLI, skriptov in več

V tem oknu lahko takoj začnete vnašati ukaze API.

4) Spletne storitve. Uporabi zahtevo za objavo HTTPS (REST API)

Po našem mnenju je to ena najbolj obetavnih metod, saj omogoča "zgradnjo" celotnih aplikacij na podlagi upravljanje strežnika za upravljanje (se opravičujem za tavtologijo). Spodaj si bomo to metodo ogledali nekoliko podrobneje.

Povzeti:

  1. API + cli bolj primeren za ljudi, ki so navajeni na Cisco;
  2. API + lupina za uporabo skriptov in izvajanje rutinskih opravil;
  3. REST API za avtomatizacijo.

Omogočanje API-ja

API je privzeto omogočen na strežnikih za upravljanje z več kot 4 GB RAM-a in samostojnih konfiguracijah z več kot 8 GB RAM-a. Stanje lahko preverite z ukazom: status api

Če se izkaže, da je api onemogočen, ga je zelo enostavno omogočiti prek SmartConsole: Upravljanje in nastavitve > Rezina > API za upravljanje > Napredne nastavitve

Check Point R80.10 API. Upravljanje prek CLI, skriptov in več

Nato objavi (objavi) spremeni in zaženite ukaz ponovni zagon api.

Spletne zahteve + Python

Za izvajanje ukazov API lahko uporabite spletne zahteve z uporabo Python in knjižnice zahteva, json. Na splošno je struktura spletne zahteve sestavljena iz treh delov:

1) Naslov

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


2) Glave HTTP

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


3) Zahtevajte tovor

Besedilo v formatu JSON, ki vsebuje različne parametre

Primer klicanja različnih ukazov:


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

Tukaj je nekaj tipičnih opravil, s katerimi se najpogosteje srečujete pri upravljanju Check Pointa.

1) Primer funkcij avtorizacije in odjave:

Skripta


    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) Vklop rezil in nastavitev omrežja:

Skripta


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) Spreminjanje pravil požarnega zidu:

Skripta


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) Dodajanje sloja aplikacije:

Skripta


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) Objavite in nastavite pravilnik, preverite izvajanje ukaza (task-id):

Skripta


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) Dodajte gostitelja:

Skripta


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) Dodajte polje za preprečevanje groženj:

Skripta


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) Oglejte si seznam sej

Skripta


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) Ustvarite nov profil:

Skripta


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) Spremenite dejanje za podpis IPS:

Skripta


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) Dodajte svojo storitev:

Skripta


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) Dodajte kategorijo, spletno mesto ali skupino:

Skripta


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

Poleg tega s pomočjo Spletni API dodajate in odstranjujete lahko omrežja, gostitelje, dostopne vloge itd. Rezila je mogoče prilagoditi Antivirus, Antibot, IPS, VPN. Z ukazom je mogoče celo namestiti licence run-script. Vse ukaze Check Point API lahko najdete tukaj tukaj.

Check Point API + poštar

Prav tako priročen za uporabo Check Point Web API v povezavi z Poštar. Postman ima namizne različice za Windows, Linux in MacOS. Poleg tega obstaja vtičnik za Google Chrome. To bomo uporabili. Najprej morate poiskati Postman v trgovini Google Chrome in namestiti:

Check Point R80.10 API. Upravljanje prek CLI, skriptov in več

Z uporabo tega pripomočka bomo lahko ustvarili spletne zahteve za API Check Point. Da si ne zapomnimo vseh API ukazov, je možno uvoziti tako imenovane zbirke (predloge), ki že vsebujejo vse potrebne ukaze:

Check Point R80.10 API. Upravljanje prek CLI, skriptov in več

Tukaj boste našli zbirka za R80.10. Po uvozu nam bodo na voljo predloge ukazov API:

Check Point R80.10 API. Upravljanje prek CLI, skriptov in več

Po mojem mnenju je to zelo priročno. Z API-jem Check Point lahko hitro začnete razvijati aplikacije.

Check Point + Ansible

Prav tako bi rad opozoril, da obstaja Možno modul za CheckPoint API. Modul omogoča upravljanje konfiguracij, vendar ni tako priročen za reševanje eksotičnih problemov. Pisanje skriptov v katerem koli programskem jeziku zagotavlja bolj prilagodljive in priročne rešitve.

Izhod

Tukaj bomo verjetno končali naš kratek pregled API-ja Check Point. Po mojem mnenju je bila ta funkcija zelo dolgo pričakovana in potrebna. Pojav API-ja odpira zelo široke možnosti za sistemske skrbnike in sistemske integratorje, ki delajo z izdelki Check Point. Orkestracija, avtomatizacija, povratne informacije SIEM ... vse je zdaj mogoče.

P.S. Več člankov o Check Point kot vedno ga lahko najdete na našem blogu Habr ali na blogu na Online.

P.S.S. Za tehnična vprašanja, povezana z nastavitvijo Check Point, lahko tukaj

V anketi lahko sodelujejo samo registrirani uporabniki. Prijaviti se, prosim.

Ali nameravate uporabiti API?

  • 70,6%Da12

  • 23,5%št.4

  • 5,9%Že uporabljam 1

Glasovalo je 17 uporabnikov. 3 uporabnika sta se vzdržala.

Vir: www.habr.com

Dodaj komentar