Siguran sam da sa svima koji su ikada radili
“Č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?
- Administratori sistema koji žele da pojednostave ili automatizuju rutinske zadatke konfigurisanja Check Point-a;
- Kompanije koje žele da integrišu Check Point sa drugim rešenjima (sistemi virtuelizacije, tiket sistemi, sistemi za upravljanje konfiguracijom, itd.);
- 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:
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:
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.
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:
- API + cli pogodniji za ljude koji su navikli na Cisco;
- API + ljuska za primjenu skripti i obavljanje rutinskih zadataka;
- 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
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
Check Point API + poštar
Takođe pogodan za upotrebu Check Point Web API u vezi sa
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:
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
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
PSS Za tehnička pitanja vezana za postavljanje Check Point-a, možete
Samo registrovani korisnici mogu učestvovati u anketi.
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