Check Point R80.10 API. Upravljanje putem CLI-a, skripti i još mnogo toga

Check Point R80.10 API. Upravljanje putem CLI-a, skripti i još mnogo toga

Siguran sam da sa svima koji su ikada radili Check Point, bilo je pritužbe na nemogućnost uređivanja konfiguracije iz komandne linije. Ovo je posebno čudno za one koji su ranije radili sa Cisco ASA, gde se apsolutno sve može konfigurisati u CLI. Sa Check Point-om je obrnuto - sva sigurnosna podešavanja vršena su isključivo preko grafičkog interfejsa. Međutim, neke stvari su potpuno nezgodne za raditi kroz GUI (čak i onaj koji je 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 kliknuti mišem nekoliko puta i unijeti IP adresu. Isto važi i za kreiranje grupe sajtova ili masovno omogućavanje/onemogućavanje IPS potpisa. U ovom slučaju postoji velika vjerovatnoća da ćete napraviti grešku.

“Čudo” se dogodilo relativno nedavno. Sa izlaskom nove verzije Gaia R80 prilika je najavljena Upotreba API-ja, što otvara široke mogućnosti za automatizaciju postavki, administracije, nadzora itd. Sada možete:

  • kreirati objekte;
  • dodavati ili uređivati ​​pristupne liste;
  • omogućiti/onemogućiti oštrice;
  • konfigurirati mrežna sučelja;
  • politike instaliranja;
  • i još mnogo toga.

Da budem iskren, ne razumijem kako je ova vijest prošla pored Habra. U ovom članku ćemo ukratko opisati kako koristiti API i dati nekoliko praktičnih primjera. CheckPoint podešavanja koristeći skripte.

Odmah želim da rezervišem da se API koristi samo za Server za upravljanje. One. Još uvijek je nemoguće upravljati gatewayima bez upravljačkog servera.

Ko u principu može koristiti ovaj API?

  1. Administratori sistema koji žele da pojednostave ili automatizuju rutinske zadatke konfigurisanja Check Point-a;
  2. Kompanije koje žele da integrišu Check Point sa drugim rešenjima (sistemi virtuelizacije, tiket sistemi, sistemi za upravljanje konfiguracijom, itd.);
  3. Sistem integratori koji žele standardizirati postavke ili kreirati dodatne proizvode vezane za Check Point.

Tipična shema

Dakle, zamislimo tipičnu šemu s Check Pointom:

Check Point R80.10 API. Upravljanje putem CLI-a, skripti i još mnogo toga

Kao i obično imamo gateway (SG), server za upravljanje (SMS) i administratorsku konzolu (SmartConsole). U ovom slučaju, uobičajeni proces konfiguracije gatewaya izgleda ovako:

Check Point R80.10 API. Upravljanje putem CLI-a, skripti i još mnogo toga

One. Prvo morate pokrenuti na administratorskom računaru SmartConsole, sa kojim se povezujemo sa serverom za upravljanje (SMS). Sigurnosna podešavanja se vrše na SMS-u, a tek onda se primjenjuju (politika instalacije) do pristupnika (SG).

Kada koristite API za upravljanje, u osnovi možemo preskočiti prvu tačku (pokrenuti SmartConsole) i koristiti API komande direktno na upravljački server (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 ime hosta host1 ip-adresa 192.168.2.100
Ova naredba se pokreće iz komandne linije Management Server (SMS). Mislim da je sintaksa naredbe jasna - host1 je kreiran sa adresom 192.168.2.100.

2) Unesite API komande putem clish-a (u stručnom modu)

U suštini, sve što treba da uradite je da se prijavite na komandnu liniju (mgmt login) pod nalogom koji se koristi prilikom povezivanja putem SmartConsole (ili root naloga). Onda možete ući API komande (u ovom slučaju nema potrebe za korištenjem uslužnog programa prije svake naredbe mgmt_cli). Možete kreirati punopravni BASH skripte. Primjer skripte koju domaćin 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

Ukoliko ste zainteresovani, možete pogledati odgovarajući video:

3) Preko SmartConsole otvaranjem CLI prozora

Sve što treba da uradite je da otvorite prozor CLI direktno iz SmartConsole, kao što je prikazano na slici ispod.

Check Point R80.10 API. Upravljanje putem CLI-a, skripti i još mnogo toga

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

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

Po našem mišljenju, ovo je jedna od najperspektivnijih metoda, jer omogućava vam da „izgradite“ čitave aplikacije na osnovu upravljanje serverom za upravljanje (izvinite na tautologiji). U nastavku ćemo malo detaljnije pogledati ovu metodu.

Da rezimiramo:

  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

Podrazumevano, API je omogućen na serverima za upravljanje sa više od 4 GB RAM-a i samostalnim konfiguracijama sa više od 8 GB RAM-a. Status možete provjeriti pomoću naredbe: api status

Ako se ispostavi da je api onemogućen, onda ga je prilično lako omogućiti putem SmartConsole: Upravljanje i postavke > Blades > API za upravljanje > Napredne postavke

Check Point R80.10 API. Upravljanje putem CLI-a, skripti i još mnogo toga

Zatim objavite (objaviti) mijenja i pokrenite naredbu api restart.

Web zahtjevi + Python

Da biste izvršili API naredbe, možete koristiti web zahtjeve koristeći piton i biblioteke zahtjevi, json. Generalno, 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 nosivost

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

Primjer za pozivanje raznih komandi:


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 kada administrirate Check Point.

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 blejdova 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 zaštitnog zida:

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 politiku, 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 prevenciju 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) Pogledajte listu 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) Kreirajte 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, lokaciju 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 run-script. Sve Check Point API komande možete pronaći ovdje ovdje.

Check Point API + poštar

Takođe pogodan za upotrebu Check Point Web API u vezi sa Poštar. Postman ima desktop verzije za Windows, Linux i MacOS. Osim toga, postoji i dodatak za Google Chrome. Ovo je ono što ćemo koristiti. Prvo morate pronaći Postman u Google Chrome Store-u i instalirati:

Check Point R80.10 API. Upravljanje putem CLI-a, skripti i još mnogo toga

Koristeći ovaj uslužni program, moći ćemo generirati web zahtjeve za Check Point API. Kako ne bi pamtili sve API komande, moguće je uvesti tzv. kolekcije (templates), koje već sadrže sve potrebne komande:

Check Point R80.10 API. Upravljanje putem CLI-a, skripti i još mnogo toga

to je naći ćete kolekcija do R80.10. Nakon uvoza, predlošci API komandi će nam postati dostupni:

Check Point R80.10 API. Upravljanje putem CLI-a, skripti i još mnogo toga

Po mom mišljenju, ovo je veoma zgodno. Možete brzo započeti razvoj aplikacija koristeći Check Point API.

Check Point + Ansible

Takođe bih želeo da napomenem da postoji Ansible modul za CheckPoint API. Modul vam omogućava upravljanje konfiguracijama, ali nije tako zgodan za rješavanje egzotičnih problema. Pisanje skripti na bilo kojem programskom jeziku pruža fleksibilnija i praktičnija rješenja.

zaključak

Ovdje ćemo vjerovatno završiti naš kratki pregled Check Point API-ja. Po mom mišljenju, ova karakteristika je bila veoma dugo očekivana i neophodna. Pojava API-ja otvara veoma široke mogućnosti i za sistem administratore i za sistemske integratore koji rade sa Check Point proizvodima. Orkestracija, automatizacija, SIEM povratne informacije... sada je sve 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 site.

PSS Za tehnička pitanja vezana za postavljanje Check Point-a, možete ovdje

Samo registrovani korisnici mogu učestvovati u anketi. Prijavite semolim.

Planirate li koristiti API?

  • 70,6%Da12

  • 23,5%No4

  • 5,9%Već koristim 1

Glasalo je 17 korisnika. 3 korisnika je bila uzdržana.

izvor: www.habr.com

Dodajte komentar