Check Point R80.10 API. Upravljanje putem CLI-ja, skripti i više

Check Point R80.10 API. Upravljanje putem CLI-ja, skripti i više

Siguran sam da svatko tko je ikada radio s Check Point, bila je pritužba na nemogućnost uređivanja konfiguracije iz naredbenog retka. Ovo je posebno čudno za one koji su prethodno radili s Cisco ASA, gdje se apsolutno sve može konfigurirati u CLI-ju. Kod Check Pointa je obrnuto - sve sigurnosne postavke su izvedene isključivo iz grafičkog sučelja. Međutim, neke stvari je potpuno nezgodno raditi kroz GUI (čak i onaj tako zgodan kao što je Check Point). Na primjer, zadatak dodavanja 100 novih hostova ili mreža pretvara se u dugu i zamornu proceduru. Za svaki objekt morat ćete nekoliko puta kliknuti mišem i unijeti IP adresu. Isto vrijedi i za stvaranje grupe stranica ili masovno omogućavanje/onemogućavanje IPS potpisa. U ovom slučaju postoji velika vjerojatnost pogreške.

“Čudo” se dogodilo relativno nedavno. Izlaskom nove verzije Gaia 80 kn prilika je najavljena korištenje API-ja, što otvara široke mogućnosti automatizacije postavki, administracije, nadzora itd. Sada možeš:

  • stvarati objekte;
  • dodavanje ili uređivanje popisa pristupa;
  • omogućiti/onemogućiti oštrice;
  • konfigurirati mrežna sučelja;
  • instalirati politike;
  • i još mnogo toga.

Iskreno rečeno, nije mi jasno kako je ova vijest prošla na Habru. U ovom ćemo članku ukratko opisati kako koristiti API i dati nekoliko praktičnih primjera. CheckPoint postavke pomoću skripti.

Želio bih odmah rezervirati da se API koristi samo za poslužitelj za upravljanje. Oni. I dalje je nemoguće upravljati pristupnicima bez poslužitelja za upravljanje.

Tko u načelu može koristiti ovaj API?

  1. Administratori sustava koji žele pojednostaviti ili automatizirati rutinske zadatke konfiguracije Check Pointa;
  2. Tvrtke koje žele integrirati Check Point s drugim rješenjima (sustavi virtualizacije, sustavi ulaznica, sustavi za upravljanje konfiguracijom itd.);
  3. Integratori sustava koji žele standardizirati postavke ili stvoriti dodatne proizvode povezane s Check Pointom.

Tipična shema

Dakle, zamislimo tipičnu shemu s Check Pointom:

Check Point R80.10 API. Upravljanje putem CLI-ja, skripti i više

Kao i obično imamo gateway (SG), poslužitelj za upravljanje (SMS) i administratorska konzola (SmartConsole). U ovom slučaju uobičajeni postupak konfiguracije pristupnika izgleda ovako:

Check Point R80.10 API. Upravljanje putem CLI-ja, skripti i više

Oni. Prvo morate pokrenuti na računalu administratora SmartConsole, s kojim se spajamo na Upravljački poslužitelj (SMS). Sigurnosne postavke se postavljaju na SMS-u, a tek onda se primjenjuju (politika instaliranja) do pristupnika (SG).

Kada koristite API za upravljanje, u osnovi možemo preskočiti prvu točku (pokrenuti SmartConsole) i koristiti API naredbe izravno na poslužitelj za upravljanje (SMS).

Načini korištenja API-ja

Postoje četiri glavna načina za uređivanje konfiguracije pomoću API-ja:

1) Korištenje uslužnog programa mgmt_cli

Primjer - # mgmt_cli dodaj naziv hosta host1 ip-adresa 192.168.2.100
Ova se naredba pokreće iz naredbenog retka poslužitelja za upravljanje (SMS). Mislim da je sintaksa naredbe jasna - host1 se kreira s adresom 192.168.2.100.

2) Unesite API naredbe putem clisha (u stručnom načinu)

Uglavnom, sve što trebate učiniti je prijaviti se u naredbeni redak (mgmt prijava) pod računom koji se koristi pri povezivanju preko SmartConsole (ili root račun). Onda možete ući API naredbe (u ovom slučaju nema potrebe koristiti pomoćni program prije svake naredbe mgmt_cli). Možete stvoriti punopravni BASH skripte. Primjer skripte koju host kreira:

bash skripta

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

Ako ste zainteresirani, možete pogledati odgovarajući video:

3) Preko SmartConsole otvaranjem CLI prozora

Sve što trebate učiniti je otvoriti prozor CLI ravno iz SmartConsole, kao što je prikazano na slici ispod.

Check Point R80.10 API. Upravljanje putem CLI-ja, skripti i više

U ovom prozoru možete odmah početi unositi API naredbe.

4) Web usluge. Koristi HTTPS zahtjev za objavu (REST API)

Po našem mišljenju, ovo je jedna od metoda koja najviše obećava, jer omogućuje "izgradnju" cijelih aplikacija na temelju upravljanje poslužiteljem management (oprostite na tautologiji). U nastavku ćemo pogledati ovu metodu malo detaljnije.

Sažeti:

  1. API + cli pogodniji za ljude koji su navikli na Cisco;
  2. API + ljuska za primjenu skripti i obavljanje rutinskih zadataka;
  3. REST API za automatizaciju.

Omogućavanje API-ja

Prema zadanim postavkama, API je omogućen na poslužiteljima za upravljanje s više od 4 GB RAM-a i samostalnim konfiguracijama s više od 8 GB RAM-a. Status možete provjeriti pomoću naredbe: api status

Ako se ispostavi da je API onemogućen, vrlo ga je lako omogućiti preko SmartConsole-a: Upravljanje i postavke > Blades > Management API > Napredne postavke

Check Point R80.10 API. Upravljanje putem CLI-ja, skripti i više

Zatim objavi (Objaviti) mijenja i pokrenite naredbu api ponovno pokretanje.

Web zahtjevi + Python

Za izvršavanje API naredbi, možete koristiti web zahtjeve pomoću Piton i knjižnice zahtjeva, JSON. Općenito, struktura web zahtjeva sastoji se od tri dijela:

1) Adresa

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


2) HTTP zaglavlja

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


3) Zatražite korisni teret

Tekst u JSON formatu koji sadrži različite parametre

Primjer za pozivanje raznih naredbi:


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

Evo nekoliko tipičnih zadataka s kojima se najčešće susrećete prilikom administriranja Check Pointa.

1) Primjer funkcija autorizacije i 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) Uključivanje bladeova i postavljanje mreže:

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) Promjena pravila vatrozida:

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) Dodavanje 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 i postavite pravilo, provjerite izvršenje naredbe (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 domaćina:

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 sprječavanje prijetnji:

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) Pregledajte popis sesija

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) Napravite novi 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) Promijenite akciju za IPS potpis:

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 svoju uslugu:

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 kategoriju, stranicu ili grupu:

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

Osim toga, uz pomoć WebAPI možete dodavati i uklanjati mreže, hostove, pristupne uloge itd. Oštrice se mogu prilagoditi Antivirus, Antibot, IPS, VPN. Moguće je čak i instalirati licence pomoću naredbe pokrenuti skriptu. Sve Check Point API naredbe možete pronaći ovdje здесь.

Check Point API + poštar

Također praktičan za korištenje Check Point Web API u spoju sa Poštar. Postman ima desktop verzije za Windows, Linux i MacOS. Osim toga, postoji dodatak za Google Chrome. To je ono što ćemo koristiti. Prvo trebate pronaći Postmana u Google Chrome trgovini i instalirati:

Check Point R80.10 API. Upravljanje putem CLI-ja, skripti i više

Pomoću ovog uslužnog programa moći ćemo generirati web zahtjeve za Check Point API. Kako se ne bi pamtile sve API naredbe, moguće je uvesti tzv. kolekcije (templates), koje već sadrže sve potrebne naredbe:

Check Point R80.10 API. Upravljanje putem CLI-ja, skripti i više

Ovdje naći ćete zbirka za R80.10. Nakon uvoza, predlošci API naredbi postat će nam dostupni:

Check Point R80.10 API. Upravljanje putem CLI-ja, skripti i više

Po mom mišljenju, ovo je vrlo zgodno. Možete brzo početi razvijati aplikacije koristeći Check Point API.

Check Point + Ansible

Također bih želio napomenuti da postoji Ansible modul za CheckPoint API. Modul vam omogućuje upravljanje konfiguracijama, ali nije tako prikladan za rješavanje egzotičnih problema. Pisanje skripti u bilo kojem programskom jeziku pruža fleksibilnija i praktičnija rješenja.

Izlaz

Ovdje ćemo vjerojatno završiti naš kratki pregled Check Point API-ja. Po mom mišljenju, ova značajka je bila jako dugo očekivana i neophodna. Pojava API-ja otvara vrlo široke mogućnosti za sistemske administratore i sistemske integratore koji rade s Check Point proizvodima. Orkestracija, automatizacija, SIEM povratne informacije... sve je to sada moguće.

PS Više članaka o Check Point kao i uvijek možete ga pronaći na našem blogu Habr ili na blogu na Online.

PSS Za tehnička pitanja vezana uz postavljanje Check Pointa, možete здесь

U anketi mogu sudjelovati samo registrirani korisnici. Prijaviti se, molim.

Planirate li koristiti API?

  • 70,6%Da12

  • 23,5%br.4

  • 5,9%Već koristim1

Glasovalo je 17 korisnika. Suzdržana su bila 3 korisnika.

Izvor: www.habr.com

Dodajte komentar