Siguran sam da svatko tko je ikada radio s
“Č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?
- Administratori sustava koji žele pojednostaviti ili automatizirati rutinske zadatke konfiguracije Check Pointa;
- Tvrtke koje žele integrirati Check Point s drugim rješenjima (sustavi virtualizacije, sustavi ulaznica, sustavi za upravljanje konfiguracijom itd.);
- 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:
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:
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.
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:
- 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
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
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
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:
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
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
PSS Za tehnička pitanja vezana uz postavljanje Check Pointa, možete
U anketi mogu sudjelovati samo registrirani korisnici.
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