Esu tikras, kad visi, kurie kada nors dirbo su
„Stebuklas“ įvyko palyginti neseniai. Išleidus naują versiją Gaia R80 buvo paskelbta galimybė API naudojimas, kuri atveria plačias galimybes automatizuoti nustatymus, administravimą, stebėjimą ir kt. Dabar gali:
- kurti objektus;
- pridėti arba redaguoti prieigos sąrašus;
- įjungti / išjungti peilius;
- konfigūruoti tinklo sąsajas;
- įdiegti politiką;
- ir daug daugiau.
Tiesą sakant, nesuprantu, kaip šią naujieną perdavė Habras. Šiame straipsnyje trumpai apibūdinsime, kaip naudoti API, ir pateiksime keletą praktinių pavyzdžių. CheckPoint nustatymai naudojant scenarijus.
Norėčiau iš karto rezervuoti, kad API būtų naudojama tik valdymo serveriui. Tie. Vis dar neįmanoma valdyti šliuzų be valdymo serverio.
Kas iš principo gali naudoti šią API?
- Sistemos administratoriai, norintys supaprastinti arba automatizuoti įprastas Check Point konfigūravimo užduotis;
- Įmonės, kurios nori integruoti Check Point su kitais sprendimais (virtualizacijos sistemomis, bilietų sistemomis, konfigūracijos valdymo sistemomis ir kt.);
- Sistemos integratoriai, norintys standartizuoti nustatymus arba sukurti papildomų su Check Point susijusių produktų.
Tipiška schema
Taigi, įsivaizduokime tipišką schemą su Check Point:
Kaip įprasta, mes turime vartus (SG), valdymo serveris (SMS) ir administratoriaus konsolę (SmartConsole). Šiuo atveju įprastas šliuzo konfigūravimo procesas atrodo taip:
Tie. Pirmiausia turite paleisti administratoriaus kompiuteryje SmartConsole, su kuriuo prisijungiame prie valdymo serverio (SMS). Saugos nustatymai atliekami SMS žinutėje ir tik tada taikomi (diegimo politika) į vartus (SG).
kai naudojant Valdymo API, iš esmės galime praleisti pirmąjį tašką (paleisti SmartConsole) ir naudoti API komandos tiesiai į valdymo serverį (SMS).
API naudojimo būdai
Yra keturi pagrindiniai būdai, kaip redaguoti konfigūraciją naudojant API:
1) Naudodami programą mgmt_cli
Pavyzdys - # mgmt_cli pridėti prieglobos pavadinimą host1 ip-adresas 192.168.2.100
Ši komanda vykdoma iš valdymo serverio (SMS) komandų eilutės. Manau, kad komandos sintaksė aiški – host1 sukurtas adresu 192.168.2.100.
2) Įveskite API komandas naudodami clish (eksperto režimu)
Iš esmės viskas, ką jums reikia padaryti, tai prisijungti prie komandinės eilutės (mgmt prisijungimas) pagal paskyrą, kuri naudojama jungiantis per SmartConsole (arba root paskyrą). Tada galite įeiti API komandos (šiuo atveju nereikia naudoti naudingumo prieš kiekvieną komandą mgmt_cli). Galite sukurti visavertį BASH scenarijus. Scenarijaus, kurį sukuria priegloba, pavyzdys:
Bash scenarijus
#!/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
Jei jus domina, galite žiūrėti atitinkamą vaizdo įrašą:
3) Per SmartConsole atidarius CLI langą
Viskas, ką jums reikia padaryti, tai atidaryti langą CLI tiesiai iš SmartConsole, kaip parodyta paveikslėlyje žemiau.
Šiame lange galite iš karto pradėti įvesti API komandas.
4) Web Services. Naudokite HTTPS įrašo užklausą (REST API)
Mūsų nuomone, tai vienas perspektyviausių būdų, nes leidžia „kurti“ visas programas remiantis valdymo serverio valdymas (atsiprašau už tautologiją). Žemiau mes apžvelgsime šį metodą šiek tiek išsamiau.
Apibendrinti:
- API + klip labiau tinka žmonėms, kurie pripratę prie Cisco;
- API + apvalkalas už scenarijų taikymą ir įprastų užduočių atlikimą;
- POILSIO API automatizavimui.
API įgalinimas
Pagal numatytuosius nustatymus API įjungta valdymo serveriuose, kuriuose yra daugiau nei 4 GB RAM, ir atskirose konfigūracijose, kuriose yra daugiau nei 8 GB RAM. Galite patikrinti būseną naudodami komandą: api būsena
Jei paaiškėja, kad API išjungta, ją gana lengva įjungti naudojant „SmartConsole“: Tvarkyti ir nustatymai > Blades > Valdymo API > Išplėstiniai nustatymai
Tada paskelbkite (Skelbti) pakeitimus ir paleiskite komandą api paleisti iš naujo.
Žiniatinklio užklausos + Python
Norėdami vykdyti API komandas, galite naudoti žiniatinklio užklausas naudodami Pitonas ir bibliotekos prašymai, Džonsas. Apskritai žiniatinklio užklausos struktūra susideda iš trijų dalių:
1) Adresas
(https://<managemenet server>:<port>/web_api/<command>)
2) HTTP antraštės
content-Type: application/json
x-chkp-sid: <session ID token as returned by the login command>
3) Prašyti naudingos apkrovos
JSON formato tekstas su skirtingais parametrais
Įvairių komandų iškvietimo pavyzdys:
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
Štai keletas tipinių užduočių, su kuriomis dažniausiai susiduriate administruodami „Check Point“.
1) Autorizacijos ir atsijungimo funkcijų pavyzdys:
Scenarijus
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) Ašmenų įjungimas ir tinklo nustatymas:
Scenarijus
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) Užkardos taisyklių keitimas:
Scenarijus
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) Pridėkite taikymo sluoksnį:
Scenarijus
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) Paskelbkite ir nustatykite politiką, patikrinkite komandos vykdymą (užduoties ID):
Scenarijus
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) Pridėti prieglobą:
Scenarijus
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) Pridėkite grėsmių prevencijos lauką:
Scenarijus
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) Peržiūrėkite seansų sąrašą
Scenarijus
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) Sukurkite naują profilį:
Scenarijus
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) Pakeiskite IPS parašo veiksmą:
Scenarijus
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) Pridėkite savo paslaugą:
Scenarijus
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) Pridėkite kategoriją, svetainę arba grupę:
Scenarijus
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))
Be to, su pagalba Žiniatinklio API galite pridėti ir pašalinti tinklus, pagrindinius kompiuterius, prieigos vaidmenis ir kt. Ašmenys gali būti pritaikyti Antivirusinė, antibotas, IPS, VPN. Netgi galima įdiegti licencijas naudojant komandą run-script. Visas Check Point API komandas galite rasti čia
Check Point API + paštininkas
Taip pat patogus naudoti Check Point Web API kartu su
Naudodami šią priemonę galėsime generuoti žiniatinklio užklausas į Check Point API. Kad neprisimintų visų API komandų, galima importuoti taip vadinamus rinkinius (šablonus), kuriuose jau yra visos reikalingos komandos:
Mano nuomone, tai labai patogu. Galite greitai pradėti kurti programas naudodami Check Point API.
Check Point + Ansible
Taip pat norėčiau pažymėti, kad yra Galimas
Produkcija
Čia tikriausiai baigsime trumpą Check Point API apžvalgą. Mano nuomone, ši funkcija buvo labai laukta ir reikalinga. API atsiradimas atveria labai plačias galimybes tiek sistemų administratoriams, tiek sistemų integratoriams, dirbantiems su Check Point produktais. Orkestravimas, automatizavimas, SIEM grįžtamasis ryšys... dabar viskas įmanoma.
P.S. Daugiau straipsnių apie
P.S.S. Jei turite techninių klausimų, susijusių su Check Point nustatymu, galite
Apklausoje gali dalyvauti tik registruoti vartotojai.
Ar planuojate naudoti API?
-
70,6%Taip 12
-
23,5%Nr.4
-
5,9%Jau naudoju 1
Balsavo 17 vartotojų. 3 vartotojai susilaikė.
Šaltinis: www.habr.com