Kogu API vĂ”imekus avatakse koostöös programmikoodiga, vĂ”imaldades dĂŒnaamiliselt luua API pĂ€ringuid ja tööriistu API vastuste analĂŒĂŒsimiseks. Kuid seni on vĂ€hem mĂ€rgatud Python'i tarkvaraarenduse komplekti (edaspidi â Python SDK) for Check Point Management API, mida on kahju. See muudab arendajate ja automatiseerimise entusiastide elu oluliselt lihtsamaks. Python on viimasel ajal saavutanud tohutut populaarsust ning ma otsustasin tĂ€ita tĂŒhimiku ja teha ĂŒlevaate peamistest vĂ”imalustest . See artikkel on suurepĂ€rane lisa teisele artiklile Habrisse . Me vaatame, kuidas kirjutada skripte, kasutades Python SDK-d, ja peatume lĂ€hemalt Management API uuel funktsionaalsusel versioonis 1.6 (toetatakse alates R80.40). Artikli mĂ”istmiseks on vajalikud pĂ”hitĂ”ed API ja Python töötamise osas.
Check Point arendab aktiivselt API-d ja hetkel on ilmunud:
- â töö juhtimisserveriga lĂ€bi API (ja vĂ”imalus kĂ€itada skripte vĂ€ravates, mis on juhtimisserveri all)
- â töös turvavĂ€ravatega
- â töös Check Point'i liivakastiga
- â töös Identity Awareness blade'i turvavĂ€ravates
- â töös SMB turvavĂ€ravate haldusportaaliga ()
- â suhtlemine IoT kontrolleritega
- â töös (SD-WAN security lahendus)
- â töös
Python SDK toetab praegu ainult Management API ja Gaia API. KĂ€sitleme selle mooduli olulisemaid klasse, meetodeid ja muutujaid.

Mooduli
Modul cpapi paigaldamine on kiire ja lihtne kasutades pip. Ăksikasjalik installatsiooni juhend on saadaval . See moodul on kohandatud töötamiseks Python 2.7 ja 3.7 versioonidega. Antud artiklis on nĂ€ited toodud kasutades Python 3.7. Siiski, Python SDK-d saab kĂ€ivitada otse Check Point'i haldusserverilt (Smart Management), kuid seal toetatakse ainult Python 2.7 versiooni, seega viimases osas on toodud kood versioonile 2.7. Kohe pĂ€rast mooduli installimist soovitan vaadata nĂ€iteid kataloogides examples_python2 ja examples_python3.
Alustamine
Kuna meil on vÔimalus töötada cpapi mooduli komponentidega, tuleb importida moodulist cpapi vÀhemalt kaks vajalikku klassi:
APIClient ja APIClientArgs
from cpapi import APIClient, APIClientArgs
Klass APIClientArgs millel on seotud API serveriga ĂŒhenduse parameetrid, ning klass APIClient kĂ€sitleb API-ga suhtlemist.
MÀÀra ĂŒhenduse parameetrid
Erinevate API-ga ĂŒhenduse parameetrite mÀÀramiseks tuleb luua klassi APIClientArgseksemplar. Ăldiselt on selle parameetrid eelnevalt mÀÀratud ja skripti kĂ€ivitamisel haldussĂŒsteemis ei pea neid kindlasti mÀÀrama.
client_args = APIClientArgs()Kuid kolmandal serveril kĂ€ivitamisel tuleb mÀÀrata vĂ€hemalt API serveri IP-aadress vĂ”i hostinimi (see on ka haldussĂŒsteem). Allolevas nĂ€ites mÀÀrame ĂŒhenduse parameetri server ja mÀÀrame sellele stringina haldussĂŒsteemi IP-aadressi.
client_args = APIClientArgs(server='192.168.47.241')Vaatame kĂ”iki parameetreid ja nende vaikimisi vÀÀrtusi, mida saab API-serveriga ĂŒhendamiseks kasutada:
APIClientArgs klassi __init__ meetodi argumendid
class APIClientArgs:
"""
See klass pakub argumente APIClient konfigureerimiseks.
KÔik argumendid on seadistatud oma vaikevÀÀrtustega.
"""
# port on vaikimisi seadistatud None, kuid asendatakse 443-ga, kui ei ole mÀÀratud
# konteksti vÔimalikud vÀÀrtused - web_api (vaikimisi) vÔi gaia_api
def __init__(self, port=None, fingerprint=None, sid=None, server="127.0.0.1", http_debug_level=0,
api_calls=None, debug_file="", proxy_host=None, proxy_port=8080,
api_version=None, unsafe=False, unsafe_auto_accept=False, context="web_api"):
self.port = port
# haldusteenuse sÔrmejÀlg
self.fingerprint = fingerprint
# sessiooni-ID.
self.sid = sid
# haldusteenuse nimi vÔi IP-aadress
self.server = server
# silumise tase
self.http_debug_level = http_debug_level
# massiiv, kus on kÔik API-kutsed (silumise eesmÀrkidel)
self.api_calls = api_calls if api_calls else []
# silumise faili nimi. Kui see jÀÀb tĂŒhjaks, ei salvestata silumise andmeid kettale.
self.debug_file = debug_file
# HTTP-proksi serveri aadress (ilma "http://")
self.proxy_host = proxy_host
# HTTP-proksi port
self.proxy_port = proxy_port
# haldusteenuse API versioon
self.api_version = api_version
# NĂ€itab, et klient ei tohiks kontrollida serveri sertifikaati
self.unsafe = unsafe
# NĂ€itab, et klient peaks automaatselt aktsepteerima ja salvestama serveri sertifikaadi
self.unsafe_auto_accept = unsafe_auto_accept
# Kliendi kasutamise kontekst - vaikimisi web_api
self.context = contextArvan, et APIClientArgs klassi eksemplaride argumentide mÔisted on Check Pointi administraatoritele loogiliselt arusaadavad ning neile ei ole lisakommentaare vajalik.
Ăhendame APIClienti ja kontekstihalduriga
Klass APIClient on kĂ”ige mugavam kasutada kontekstihalduse kaudu. KĂ”ik, mis tuleb APIClient klassi eksemplarile edastada, on ĂŒhenduse parameetrid, mis mÀÀrati eelnevas sammus.
with APIClient(client_args) as client:
Kontekstihaldur ei soorita automaatselt login kÔnet API serverisse, kuid ta teeb logout kÔne, kui sellest vÀljutakse. Kui mingil pÔhjusel pole API kÔnede lÔpetamise jÀrgselt logout vajalik, tuleb alustada tööd ilma kontekstihaldurita:
client = APIClient(client_args)Ăhenduse kontrollimine
Kontrollida, kas ĂŒhendus antud parameetritega on lihtsaim kasutada meetodi check_fingerprint. Kui API serveri sertifikaadi fingerprinti sha1 kontrollimised ei lĂ€inud lĂ€bi (meetod tagastas False), on see tavaliselt pĂ”hjustatud ĂŒhenduse probleemidest ning me saame programmi kĂ€ivitamise peatada (vĂ”i anda kasutajale vĂ”imaluse andmeid parandada):
kui client.check_fingerprint() on vale:
print("Ei saanud serveri sĂ”rmejĂ€lge - Kontrollige ĂŒhendust serveriga.")
exit(1)
Pange tĂ€hele, et edaspidi klass APIClient kontrollib iga API-ĂŒlesande korral (meetodid api_call ja api_query, millest rÀÀgime hiljem) sha1 sĂ”rmejĂ€lge API serveri sertifikaadi kohta. Kui sha1 sĂ”rmejĂ€lje kontrollimisel tuvastatakse viga (sertifikaat on tundmatu vĂ”i on muutunud), siis meetod check_fingerprint pakub vĂ”imalust lisada/muuta selle kohta teavet kohaliku masina automaatreĆŸiimis. Selle kontrolli saab ĂŒldse vĂ€lja lĂŒlitada (kuid seda soovitatakse ainult juhul, kui skripte kĂ€itatakse otse API serveris, ĂŒhendades 127.0.0.1), kasutades argumenti APIClientArgs â unsafe_auto_accept (vt APIClientArgs kohta lĂ€hemalt "MÀÀratlege ĂŒhenduse parameetrid"-s).
client_args = APIClientArgs(unsafe_auto_accept=True)Logi sisse API serverisse
U APIClient on kokku 3 meetodit sisse logimiseks API serverisse, ja igaĂŒhe puhul salvestatakse vÀÀrtus sid(session-id), mida kasutatakse automaatselt igas jĂ€rgmises API-ĂŒhenduses pĂ€ises (selle parameetri nimi pĂ€ises on X-chkp-sid), nii et seda parameetrit ei pea eraldi töötlema.
Meetod login
Variant, kasutades sisselogimist ja parooli (nÀiteks on kasutajanimi admin ja parool 1q2w3e edastatud positsiooniliste argumentidena):
login = client.login('admin', '1q2w3e') Metoodis login on saadaval ka tÀiendavad valikuvÔimalused, siin on nende nimed ja vaikimisi vÀÀrtused:
continue_last_session=False, domain=None, read_only=False, payload=NoneMeetod login_with_api_key
Variant, kasutades API vĂ”tit (tugineb versioonist R80.40 / Management API v1.6, «3TsbPJ8ZKjaJGvFyoFqHFA==» see on API vĂ”ti ĂŒhele kasutajale haldusserveris, kasutades autentimismeetodit API key):
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') Meetodis login_with_api_key on saadaval samad valikuvÔimalused nagu meetodis login.
Meetod login_as_root
Variant sisselogimiseks lokaalsesse masinasse API serveriga:
login = client.login_as_root()Selle meetodi jaoks on saadaval vaid kaks valikuvÔimalust:
domain=None, payload=NoneJa lÔpuks, ise API kutsed
Meil on kaks varianti API kutsude tegemiseks lÀbi meetodite. api_call ja api_queryVaatame, milline nende vahel on erinevus.
api_call
Seda meetodit saab kasutada igasuguste kutsuste jaoks. Me peame edastama viimase osa API kutsest ja payload'i soovi korral. Kui payload on tĂŒhi, siis seda ei pea ĂŒldse edastama:
api_versions = client.api_call('show-api-versions') KÀesoleva pÀringu vÀljund allpool:
In [23]: api_versions
Out[23]:
APIResponse({
"data": {
"current-version": "1.6",
"supported-versions": [
"1",
"1.1",
"1.2",
"1.3",
"1.4",
"1.5",
"1.6"
]
},
"res_obj": {
"data": {
"current-version": "1.6",
"supported-versions": [
"1",
"1.1",
"1.2",
"1.3",
"1.4",
"1.5",
"1.6"
]
},
"status_code": 200
},
"status_code": 200,
"success": true
})
show_host = client.api_call('show-host', {'name' : 'h_8.8.8.8'})KÀesoleva pÀringu vÀljund allpool:
In [25]: show_host
Out[25]:
APIResponse({
"data": {
"color": "must",
"comments": "",
"domain": {
"domain-type": "domain",
"name": "SMC User",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"groups": [],
"icon": "Objects/host",
"interfaces": [],
"ipv4-address": "8.8.8.8",
"meta-info": {
"creation-time": {
"iso-8601": "2020-05-01T21:49+0300",
"posix": 1588358973517
},
"creator": "admin",
"last-modifier": "admin",
"last-modify-time": {
"iso-8601": "2020-05-01T21:49+0300",
"posix": 1588358973517
},
"lock": "unlocked",
"validation-state": "ok"
},
"name": "h_8.8.8.8",
"nat-settings": {
"auto-rule": false
},
"read-only": false,
"tags": [],
"type": "host",
"uid": "c210af07-1939-49d3-a351-953a9c471d9e"
},
"res_obj": {
"data": {
"color": "must",
"comments": "",
"domain": {
"domain-type": "domain",
"name": "SMC User",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"groups": [],
"icon": "Objects/host",
"interfaces": [],
"ipv4-address": "8.8.8.8",
"meta-info": {
"creation-time": {
"iso-8601": "2020-05-01T21:49+0300",
"posix": 1588358973517
},
"creator": "admin",
"last-modifier": "admin",
"last-modify-time": {
"iso-8601": "2020-05-01T21:49+0300",
"posix": 1588358973517
},
"lock": "unlocked",
"validation-state": "ok"
},
"name": "h_8.8.8.8",
"nat-settings": {
"auto-rule": false
},
"read-only": false,
"tags": [],
"type": "host",
"uid": "c210af07-1939-49d3-a351-953a9c471d9e"
},
"status_code": 200
},
"status_code": 200,
"success": true
})
api_query
EsmapĂ€raselt ĂŒtlen, et see meetod kehtib ainult nende API-kutsede puhul, mille vĂ€ljundis on offset (tĂ”uke) olemas. Sellist vĂ€ljundit kasutatakse, kui see sisaldab vĂ”i vĂ”ib sisaldada suurt hulka teavet. NĂ€iteks vĂ”ib see olla pĂ€ring kĂ”igi loodud hostide loendi saamiseks haldusserveris. Selliste pĂ€ringute puhul tagastab API vaikimisi 50 objekti (selle arvu saab suurendada kuni 500 objekti). Et vĂ€ltida teabe mitu korda pĂ€rimist erineva offset parameetriga API-kutses, on olemas meetod api_query, mis teeb selle töö automaatselt Ă€ra. NĂ€ited kutsetest, kus seda meetodit on vaja: show-sessions, show-hosts, show-networks, show-wildcards, show-groups, show-address-ranges, show-simple-gateways, show-simple-clusters, show-access-roles, show-trusted-clients, show-packages. Tegelikult nĂ€eme nende API-kutsete nimedes sĂ”nu mitmuses, nii et neid kutseid on lihtsam töödelda lĂ€bi api_query
show_hosts = client.api_query('show-hosts') KÀesoleva pÀringu vÀljund allpool:
In [21]: show_hosts
Out[21]:
APIResponse({
"data": [
{
"domain": {
"domain-type": "domain",
"name": "SMC kasutaja",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"ipv4-address": "192.168.47.1",
"name": "h_192.168.47.1",
"type": "host",
"uid": "5d7d7086-d70b-4995-971a-0583b15a2bfc"
},
{
"domain": {
"domain-type": "domain",
"name": "SMC kasutaja",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"ipv4-address": "8.8.8.8",
"name": "h_8.8.8.8",
"type": "host",
"uid": "c210af07-1939-49d3-a351-953a9c471d9e"
}
],
"res_obj": {
"data": {
"from": 1,
"objects": [
{
"domain": {
"domain-type": "domain",
"name": "SMC kasutaja",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"ipv4-address": "192.168.47.1",
"name": "h_192.168.47.1",
"type": "host",
"uid": "5d7d7086-d70b-4995-971a-0583b15a2bfc"
},
{
"domain": {
"domain-type": "domain",
"name": "SMC kasutaja",
"uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
},
"ipv4-address": "8.8.8.8",
"name": "h_8.8.8.8",
"type": "host",
"uid": "c210af07-1939-49d3-a351-953a9c471d9e"
}
],
"to": 2,
"total": 2
},
"status_code": 200
},
"status_code": 200,
"success": true
})
API kutsungite tulemuste töötlemine
PÀrast seda saab kasutada klassi muutujaid ja meetodeid APIResponse(nii konteksti halduri sees kui ka vÀljaspool). Klassil APIResponse on mÀÀratud 4 meetodit ja 5 muutujat, millest kÔige olulisematel peatume lÀhemalt.

success
Alustuseks oleks hea veenduda, et API kutse Ônnestus ja tagastas tulemuse. Selleks on olemas meetod success:
In [49]: api_versions.success
Out[49]: True
Tagastab True, kui API kutse Ă”nnestus (vastuskood â 200) ja False, kui mitte (ĂŒkskĂ”ik milline teine vastuskood). Mugav kasutada kohe pĂ€rast API kutsest, et vastavalt vastuskoodile erinevat teavet kuvada.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message) statuscode
Tagastab vastuskoodi pÀrast API kutsumise tÀitmist.
In [62]: api_versions.status_code
Out[62]: 400
VÔimalikud vastuskoodid: 200,400,401,403,404,409,500,501.
set_success_status
Samuti vĂ”ib olla vajalik muuta staatuse vÀÀrtust success. Tehniliselt vĂ”ib sinna panna mis tahes, isegi tavalise stringi. Kuid reaalseks nĂ€iteks vĂ”ib olla selle parameetri seadmine False'iks teatud kĂ”rvaltingimustes. Allpool on nĂ€ide, kus on ĂŒlesanded, mis tĂ€idetakse haldusserveris, kuid me peame seda pĂ€ringut ebaĂ”nnestunuks (seadke muutuja success False, hoolimata sellest, et API-kutse oli edukas ja tagastas koodi 200).
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
breakresponse()
Meetod response vÔimaldab vaadata sÔnastikku koos vastuse koodiga (status_code) ja vastuse kehaga (body).
In [94]: api_versions.response()
Out[94]:
{'status_code': 200,
'data': {'current-version': '1.6',
'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}}
data
VÔimaldab nÀha ainult vastuse keha (body) ilma liigsete detailideta.
In [93]: api_versions.data
Out[93]:
{'current-version': '1.6',
'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}
error_message
See teave on saadaval ainult siis, kui API pÀringu töötlemise kÀigus tekkis tÔrge (vastuse kood ei 200). NÀide vÀljundist
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
Kasulikud nÀited
Allpool on toodud nÀited, kus kasutatakse API pÀringuid, mis on lisatud juhtimise API versioonile 1.6.
Alustuseks vaatame pĂ€ringute toimimist add-host ja add-address-range. Oletame, et me peame looma objektid, mille tĂŒĂŒp on host, kĂ”ikide IP aadresside jaoks alamsĂŒsteemis 192.168.0.0/24, mille viimane oktet on 5, ja kĂ”ik ĂŒlejÀÀnud IP aadressid salvestama objektidena, mille tĂŒĂŒp on aadressirida. Samuti tuleb vĂ€lja jĂ€tta alamsĂŒsteemi aadress ja laiendatud aadress.
Nii et allpool on esitatud skript, mis lahendab antud ĂŒlesande ja loob 50 host tĂŒĂŒpi objekti ja 51 aadressirea objekti. Probleemi lahendamiseks kulub 101 API pĂ€ringut (ilma lĂ”pp-pĂ€ringut publish arvestamata). Samuti kasutame moodulit timeit, et arvutada skripti tĂ€itmise aega kuni muudatuste avaldamiseni.
Skript koos add-host ja add-address-range kasutamisega
import timeit
from cpapi import APIClient, APIClientArgs
start = timeit.default_timer()
first_ip = 1
last_ip = 4
client_args = APIClientArgs(server="192.168.47.240")
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
for ip in range(5, 255, 5):
add_host = client.api_call("add-host", {"name" : f"h_192.168.0.{ip}", "ip-address": f'192.168.0.{ip}'})
while last_ip < 255:
add_range = client.api_call("add-address-range", {"name": f"r_192.168.0.{first_ip}-{last_ip}", "ip-address-first": f"192.168.0.{first_ip}", "ip-address-last": f"192.168.0.{last_ip}"})
first_ip += 5
last_ip += 5
stop = timeit.default_timer()
publish = client.api_call("publish")
print(f'Time to execute batch request: {stop - start} seconds')
Minu laboratooriumis kulub selle skripti tÀitmiseks sÔltuvalt haldusserveri koormusest 30 kuni 50 sekundit.
NĂŒĂŒd vaatame, kuidas lahendada sama probleem API kutsumise abil add-objects-batch, mille tugi on lisatud API versioonis 1.6. See kutsumine vĂ”imaldab ĂŒhes API pĂ€ringus luua mitmeid objekte. Need vĂ”ivad olla erinevat tĂŒĂŒpi objektid (nĂ€iteks hostid, alamvĂ”rgud ja aadressivahemikud). Seega saame meie ĂŒlesande lahendada ĂŒhe API kutsumise raames.
Skript, mis kasutab add-objects-batch
import timeit
from cpapi import APIClient, APIClientArgs
start = timeit.default_timer()
client_args = APIClientArgs(server="192.168.47.240")
objects_list_ip = []
objects_list_range = []
for ip in range(5,255,5):
data = {"name": f'h_192.168.0.{ip}', "ip-address": f'192.168.0.{ip}'}
objects_list_ip.append(data)
first_ip = 1
last_ip = 4
while last_ip < 255:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "ip-address-first": f"192.168.0.{first_ip}", "ip-address-last": f"192.168.0.{last_ip}"}
objects_list_range.append(data)
first_ip+=5
last_ip+=5
data_for_batch = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip
}, {
"type" : "address-range",
"list" : objects_list_range
}]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
add_objects_batch = client.api_call("add-objects-batch", data_for_batch)
stop = timeit.default_timer()
publish = client.api_call("publish")
print(f'Time to execute batch request: {stop - start} seconds')
Kuid skripti tĂ€itmine minu laborikeskkonnas vĂ”tab aega 3 kuni 7 sekundit olenevalt haldusseervere koormusest. See tĂ€hendab, et keskmiselt saab 101 objekti puhul API kutsumine tĂŒĂŒpi batch 10 korda kiiremini. Suurema objekti arvu korral on erinevus veelgi muljetavaldavam.
NĂŒĂŒd vaatame, kuidas töötada set-objects-batch. Selle API-kĂ”ne abil saame massiliselt muuta mis tahes parameetrit. Seadistame esimeses pooles aadresse eelmisest nĂ€itest (kuni .124 hostini, sealhulgas ka vahemike jaoks) vĂ€rvi sienna ja teises pooles aadresse mÀÀrame vĂ€rvi khaki.
Objektide vÀrvi muutmine, mis loodi eelnevas nÀites
from cpapi import APIClient, APIClientArgs
client_args = APIClientArgs(server="192.168.47.240")
objects_list_ip_first = []
objects_list_range_first = []
objects_list_ip_second = []
objects_list_range_second = []
for ip in range(5,125,5):
data = {"name": f'h_192.168.0.{ip}', "color": "sienna"}
objects_list_ip_first.append(data)
for ip in range(125,255,5):
data = {"name": f'h_192.168.0.{ip}', "color": "khaki"}
objects_list_ip_second.append(data)
first_ip = 1
last_ip = 4
while last_ip < 125:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "color": "sienna"}
objects_list_range_first.append(data)
first_ip+=5
last_ip+=5
while last_ip < 255:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "color": "khaki"}
objects_list_range_second.append(data)
first_ip+=5
last_ip+=5
data_for_batch_first = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip_first
}, {
"type" : "address-range",
"list" : objects_list_range_first
}]
}
data_for_batch_second = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip_second
}, {
"type" : "address-range",
"list" : objects_list_range_second
}]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
set_objects_batch_first = client.api_call("set-objects-batch", data_for_batch_first)
set_objects_batch_second = client.api_call("set-objects-batch", data_for_batch_second)
publish = client.api_call("publish")
Eemaldada mitmed objektid ĂŒhe API kutsumisega on vĂ”imalik kasutades delete-objects-batch. Ja nĂŒĂŒd vaatame koodi nĂ€idet, mis eemaldab kĂ”ik varem loodud hostid add-objects-batch.
Objektide eemaldamine delete-objects-batch abil
from cpapi import APIClient, APIClientArgs
client_args = APIClientArgs(server="192.168.47.240")
objects_list_ip = []
objects_list_range = []
for ip in range(5,255,5):
data = {"name": f'h_192.168.0.{ip}'}
objects_list_ip.append(data)
first_ip = 1
last_ip = 4
while last_ip < 255:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}"}
objects_list_range.append(data)
first_ip+=5
last_ip+=5
data_for_batch = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip
}, {
"type" : "address-range",
"list" : objects_list_range
}]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
delete_objects_batch = client.api_call("delete-objects-batch", data_for_batch)
publish = client.api_call("publish")
print(delete_objects_batch.data)
Check Pointi tarkvara uutes versioonides on kĂ”ik funktsioonid koheselt seotud ka API kutsungitega. NĂ€iteks R80.40 versioonis tutvustatakse selliseid funktsioone nagu âRevert to revisionâ ja âSmart Taskâ, ning nende jaoks on kohe valmis vastavad API kutsungid. Lisaks sellele, kogu funktsionaalsus, kui toimub ĂŒleminek Legacy konsoolidest Unified Policy reĆŸiimi, saab samuti API toe. NĂ€iteks oodatud uuendus R80.40 versioonis oli HTTPS Inspection poliitika ĂŒleminek Legacy reĆŸiimist Unified Policy reĆŸiimi, ning see funktsionaalsus sai kohe API kutsungid. Siin on koodinĂ€ide, mis lisab HTTPS Inspection poliitika tippu reegli, mis vĂ€listab kolmest kategooriast (Tervis, Rahandus, Avalikud teenused) inspektsiooni, mille inspektsioon on mitmes riigis seadusandluses keelatud.
Lisa reegel HTTPS Inspection poliitikasse
from cpapi import APIClient, APIClientArgs
client_args = APIClientArgs(server="192.168.47.240")
data = {
"layer" : "Default Layer",
"position" : "top",
"name" : "Legal Requirements",
"action": "bypass",
"site-category": ["Health", "Government / Military", "Financial Services"]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
add_https_rule = client.api_call("add-https-rule", data)
publish = client.api_call("publish")
Python skriptide kÀivitamine Check Pointi haldusserveris
Kogu sisu jÀÀb samaks sisal on teavet, kuidas kĂ€ivitada skripte Pythonis otse haldusserverist. See vĂ”ib olla mugav, kui teil pole vĂ”imalik ĂŒhendada API serverisse mĂ”nest teisest masinast. Olen salvestanud kuue minuti video, milles kĂ€sitlen mooduli cpapi ja Python-skriptide kĂ€ivitamise eripĂ€rasid haldusserveris. NĂ€iteks kĂ€ivitan skripti, mis automatiseerib uue lĂŒĂŒsikoodi seadistamist selliste ĂŒlesannete jaoks nagu vĂ”rgu auditeerimine. Security CheckUp. EripĂ€rad, millega silmitsi seisin: Python 2.7 versioonis polnud veel funktsiooni input, seega kasutatakse kasutaja sisestatud teabe töötlemiseks funktsiooni raw_input. Muudelt masinakĂ€ivitustelt koodit erakordselt ei erine, lihtsalt on mugavam kasutada funktsiooni login_as_root, et mitte oma enda kasutajanime, paroole ja haldusserveri IP-aadressi uuesti sisestada.

Skript Security CheckUp kiireks seadistamiseks.
from __future__ import print_function
import getpass
import sys, os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from cpapi import APIClient, APIClientArgs
def main():
with APIClient() as client:
# if client.check_fingerprint() is False:
# print("Ei saanud serveri sĂ”rmejĂ€lge kĂ€tte - kontrollige serveriga ĂŒhendust.")
# exit(1)
login_res = client.login_as_root()
if login_res.success is False:
print("Sisselogimine ebaÔnnestus:n{}".format(login_res.error_message))
exit(1)
gw_name = raw_input("Sisesta vÀrava nimi:")
gw_ip = raw_input("Sisesta vÀrava IP-aadress:")
if sys.stdin.isatty():
sic = getpass.getpass("Sisesta ĂŒhekordne parool vĂ€rava jaoks (SIC): ")
else:
print("TĂ€helepanu! Teie parool ilmub ekraanile!")
sic = raw_input("Sisesta ĂŒhekordne parool vĂ€rava jaoks (SIC): ")
version = raw_input("Sisesta vÀrava versioon (nt RXX.YY):")
add_gw = client.api_call("add-simple-gateway", {'name' : gw_name, 'ipv4-address' : gw_ip, 'one-time-password' : sic, 'version': version.capitalize(), 'application-control' : 'true', 'url-filtering' : 'true', 'ips' : 'true', 'anti-bot' : 'true', 'anti-virus' : 'true', 'threat-emulation' : 'true'})
if add_gw.success and add_gw.data['sic-state'] != "communicating":
print("Turvaline ĂŒhendus vĂ€ravaga ei ole loodud!")
exit(1)
elif add_gw.success:
print("VĂ€rav lisati edukalt.")
gw_uid = add_gw.data['uid']
gw_name = add_gw.data['name']
else:
print("VÀrava lisamine ebaÔnnestus - {}".format(add_gw.error_message))
exit(1)
change_policy = client.api_call("set-access-layer", {"name" : "Network", "applications-and-url-filtering": "true", "content-awareness": "true"})
if change_policy.success:
print("Poliitika muudeti edukalt")
else:
print("Poliitika muutmine ebaÔnnestus - {}".format(change_policy.error_message))
change_rule = client.api_call("set-access-rule", {"name" : "Cleanup rule", "layer" : "Network", "action": "Accept", "track": {"type": "Detailed Log", "accounting": "true"}})
if change_rule.success:
print("Cleanup reegel muudeti edukalt")
else:
print("Cleanup reegli muutmine ebaÔnnestus - {}".format(change_rule.error_message))
# avalda tulemus
publish_res = client.api_call("publish", {})
if publish_res.success:
print("Muudatused avaldati edukalt.")
else:
print("Muudatuste avaldamine ebaÔnnestus - {}".format(install_tp_policy.error_message))
install_access_policy = client.api_call("install-policy", {"policy-package" : "Standard", "access" : 'true', "threat-prevention" : 'false', "targets" : gw_uid})
if install_access_policy.success:
print("JuurdepÀÀsu poliitika on installitud")
else:
print("JuurdepÀÀsu poliitika installimine ebaÔnnestus - {}".format(install_tp_policy.error_message))
install_tp_policy = client.api_call("install-policy", {"policy-package" : "Standard", "access" : 'false', "threat-prevention" : 'true', "targets" : gw_uid})
if install_tp_policy.success:
print("Sissetungi tÔkestamise poliitika on installitud")
else:
print("Sissetungi tÔkestamise poliitika installimine ebaÔnnestus - {}".format(install_tp_policy.error_message))
# lisa paroolid ja salasÔnad sÔnastikku
with open('additional_pass.conf') as f:
line_num = 0
for line in f:
line_num += 1
add_password_dictionary = client.api_call("run-script", {"script-name" : "Lisa paroolid ja salasÔnad", "script" : "printf "{}" >> $FWDIR/conf/additional_pass.conf".format(line), "targets" : gw_name})
if add_password_dictionary.success:
print("Parooli sÔnastiku rida {} lisati edukalt".format(line_num))
else:
print("SÔnastiku lisamine ebaÔnnestus - {}".format(add_password_dictionary.error_message))
main() NÀidis fail sÔnadega varvete jaoks additional_pass.conf
{
"passwords" : ["malware","malicious","infektoitunud","Infected"],
"phrases" : ["parool","Parool","Pass","pass","kood","vĂ”ti","pwd","паŃĐŸĐ»Ń","ĐаŃĐŸĐ»Ń","ĐĐ»ŃŃ","ĐșĐ»ŃŃ","ŃĐžŃŃ","КОŃŃ"]
}
KokkuvÔte
See artikkel kĂ€sitleb ainult pĂ”hivĂ”imalusi tööks Python SDK ja mooduli cpapi(nagu te vĂ”isite arvata, need on pĂ”himĂ”tteliselt sĂŒnonĂŒĂŒmid), ja uurides selle mooduli koodi avastate veelgi rohkem vĂ”imalusi selle kasutamiseks. Pole vĂ€listatud, et tekib soov tĂ€iendada seda oma klassidega, funktsioonidega, meetoditega ja muutujatega. Te vĂ”ite alati jagada oma saavutusi ja vaadata teisi Check Pointi skripte jaotises kogukonnas , mis ĂŒhendab nii toodete arendajaid kui ka kasutajaid.
Head programmeerimist ja aitÀh, et lugesite lÔpuni!
Allikas: habr.com
