Kogu API jĂ”ud avaldub programmkoodi kooskasutamisel, kui tekivad vĂ”imalused dĂŒnaamiliselt luua API pĂ€ringuid ja tööriistu API vastuste analĂŒĂŒsimiseks. Siiski jÀÀb Python Software Development Kit (edasi â Python SDK) jaoks Check Point Management API, mis on kahetusvÀÀrne. See oluliselt lihtsustab arendajate ja automatiseerimisarmastajate elu. Viimasel ajal on Python saavutanud tohutut populaarsust ja otsustasin sulgeda vahe ja teha ĂŒlevaate peamistest vĂ”imalustest . See artikkel on suurepĂ€rane tĂ€ienduseks teisele artiklile Habr's . Me vaatame, kuidas kirjutada skripte Python SDK abil ja peatume pĂ”hjalikumalt Management API uuel funktsionaalsusel versioonis 1.6 (toetatakse alates R80.40). Artikli mĂ”istmiseks on vajalikud pĂ”hiteadmised API ja Python'i töö kohta.
Check Point arendab aktiivselt API-d ja praeguseks on ilmunud:
- â töö haldusserveriga API kaudu (ja vĂ”imalus tĂ€ita skripte haldusserveri all olevatesse vĂ€ravatesse)
- â töö turvavĂ€ravatega
- â töö Check Point'i pilveteras kooskonnas
- â töö Identity Awareness plaadi abil vĂ€ravates
- â töö SMB vĂ€ravate haldusportaaliga ()
- â suhtlemine IoT kontrolleritega
- â töö (SD-WAN turvalahendus)
- â töö
Python SDK toetab praeguseks ainult Management API ja Gaia API. Vaatame kÔige olulisemaid klasse, meetodeid ja muutujaid selles moodulis.

Moodi installimine
Moodul cpapi installitakse kiiresti ja lihtsalt kasutades pip. Ăksikasjalik installatsioonijuhend on . See moodul on kohandatud tööks Python versioonidega 2.7 ja 3.7. KĂ€esolevas artiklis esitatakse nĂ€iteid kasutades Python 3.7. Siiski on Python SDK vĂ”imalik otse Check Point'i haldusserverist (Smart Management) kĂ€itada, kuid seal toetatakse vaid Python 2.7 versiooni, seega viimas sekretis on toomatud kood versioonile 2.7. Kohe pĂ€rast mooduli installimist soovitan vaadata nĂ€iteid kaustades examples_python2 ja examples_python3.
Esimene samm
Ettevalmistamiseks, et saaksime töötada cpapi mooduli komponentidega, tuleb importida moodulist cpapi kaks vajalikku klassi:
APIClient ja APIClientArgs
from cpapi import APIClient, APIClientArgs
Klass APIClientArgs vastutab API serverisse ĂŒhenduse loomise parameetrite eest, samas kui klass APIClient vastutab API-ga suhtlemise eest.
MÀÀrame ĂŒhenduse parameetrid
Et mÀÀrata erinevaid ĂŒhenduse parameetreid API-ga, peate looma klassi APIClientArgs. Ăldiselt on tema parameetrid eeldefineeritud ja skripti kĂ€ivitamisel haldusserveris ei pea neid mÀÀrama.
client_args = APIClientArgs()Kuid kolmandal hostil kĂ€ivitamisel tuleb mÀÀrata vĂ€hemalt API serveri IP-aadress vĂ”i hosti nimi (haldusserver). Allolevas nĂ€ites mÀÀrame ĂŒhenduse parameetri server ja omistame sellele stringina haldusserveri IP-aadressi.
client_args = APIClientArgs(server='192.168.47.241')Vaadakem kĂ”iki parameetreid ja nende vaikimisi vÀÀrtusi, mida saab kasutada API serveriga ĂŒhenduse loomiseks:
APIClientArgs klassi __init__ meetodi argumendid
class APIClientArgs:
"""
See klass annab argumente APIClient konfiguratsiooniks.
KÔik argumendid on konfigureeritud oma vaikimisi vÀÀrtustega.
"""
# port on vaikimisi mÀÀratud None-ks, kuid see asendatakse 443-ga, kui seda ei mÀÀrata
# 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
# haldusserveri sÔrmejÀlg
self.fingerprint = fingerprint
# sessiooni-id.
self.sid = sid
# haldusserveri nimi vÔi IP-aadress
self.server = server
# silumisaste
self.http_debug_level = http_debug_level
# massiiv kÔigi API kutsungitega (silumiseks)
self.api_calls = api_calls if api_calls else []
# silumisdokumendi nimi. Kui see jÀÀb tĂŒhjaks, ei salvestata silumistandmeid kettale.
self.debug_file = debug_file
# HTTP proxy serveri aadress (ilma "http://")
self.proxy_host = proxy_host
# HTTP proxy port
self.proxy_port = proxy_port
# Haldusserveri API versioon
self.api_version = api_version
# NĂ€itab, et klient ei peaks kontrollima 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 = contextEeldan, et APIClientArgs klassi eksemplaride argumendid on Check Pointi administraatoritele intuitiivselt arusaadavad ja ei vajada lisakommentaare.
Ăhendume APIClienti ja konteksti halduriga
Klass APIClient KĂ”ige mugavam on kasutada konteksti haldajat. KĂ”ik, mis tuleb APIClient klassi eksemplarile edastada, on ĂŒhenduse parameetrid, mis mÀÀrati eelmises etapis.
with APIClient(client_args) as client:
Konteksti haldaja ei tee automaatselt API serveri sisselogimist, kuid ta teeb vÀljaregistreerimise vÀljumisel. Kui mingil pÔhjusel ei ole pÀrast API kutsete kasutamist vÀljaregistreerimine vajalik, tuleks alustada töötamist ilma konteksti haldajata:
client = APIClient(client_args)Ăhenduse kontrollimine
Lihtsaim viis kontrollida, kas ĂŒhendus on antud parameetrite alusel olemas, on kasutada meetodit check_fingerprint. Kui sha1 kontrollsumma API serveri fingerprint sertifikaadi jaoks ebaĂ”nnestub (meetod tagastas Vale), siis on see tavaliselt pĂ”hjustatud ĂŒhenduse probleemidest ja me saame peatada programmi toimimise (vĂ”i anda kasutajale vĂ”imaluse parandada ĂŒhendusandmeid):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
Pange tĂ€hele, et edaspidi kontrollib klass APIClient iga API kutse puhul (meetodites api_call ja api_query, millest rÀÀgitakse pisut hiljem) sha1 fingerprint sertifikaati API serveris. Kui sha1 fingerprint API serveri sertifikaadi kontrollimisel ilmneb viga (sertifikaat on tundmatu vĂ”i on muudetud), siis meetod check_fingerprint pakub vĂ”imalust lisada/muuta teavet selle kohta kohalikus masinas automaatselt. Selle kontrolli saab tĂ€ielikult keelata (kuid seda soovitatakse ainult juhul, kui skripte kĂ€itatakse otse API serveris, ĂŒhendudes 127.0.0.1), kasutades APIClientArgs argumenti â unsafe_auto_accept (vt rohkem APIClientArgs kohta varem peatĂŒkis "MÀÀrame ĂŒhenduse parameetrid").
client_args = APIClientArgs(unsafe_auto_accept=True)Sisselogimine API serverisse
Uus APIClient on kokku 3 meetodit API serverisse sisselogimiseks ja igaĂŒks neist salvestab vÀÀrtuse sid(sessioon-ID), mida kasutatakse automaatselt igas jĂ€rgnevas API kutses pĂ€ises (selle parameetri nimi pĂ€ises on X-chkp-sid), nii et seda parameetrit pole vaja tĂ€iendavalt töödelda.
Sisselogimise meetod
Variant sisselogimiseks kasutades kasutajanime ja parooli (nÀites on kasutajanimi admin ja parool 1q2w3e antud positsiooniliste argumentidena):
login = client.login('admin', '1q2w3e') Sisselogimise meetodil on ka tÀiendavad valikulised parameetrid, toon vÀlja nende nimed ja vaikeseaded:
continue_last_session=False, domain=None, read_only=False, payload=Nonelogin_with_api_key meetod
API vĂ”tme kasutamise variant (toetatakse alates versioonist R80.40 / Management API v1.6, «3TsbPJ8ZKjaJGvFyoFqHFA==» see on API vĂ”tme vÀÀrtus ĂŒhe kasutaja jaoks haldusserveris, kasutades API key autoriseerimise meetodit):
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') Meetodis login_with_api_key on sama valikuline parameetrite hulk nagu meetodis login.
login_as_root meetod
API serveriga kohalikult sisselogimise variant:
login = client.login_as_root()Selle meetodi jaoks on saadaval vaid kaks valikulist parameetrit:
domain=None, payload=NoneJa lÔpuks ise API kutsed
Meil on kaks varianti API kutsumiste tegemiseks meetodite kaudu. api_call ja api_queryUurime, mis vahel erinevus on.
api_call
See meetod sobib igasuguste kutsude tegemiseks. Me peame edastama viimase osa API kutsest ja payload'i vajadusel pĂ€ringu kehas. Kui payload on tĂŒhi, siis ei ole seda ĂŒldse vaja edastada:
api_versions = client.api_call('show-api-versions') Selle 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'})Selle pÀringu vÀljund allpool:
In [25]: show_host
Out[25]:
APIResponse({
"data": {
"color": "black",
"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": "black",
"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
Esiteks, see meetod sobib ainult pĂ€ringute jaoks, mille vĂ€ljund eeldab offset'i. Selline vĂ€ljund toimub juhul, kui see sisaldab vĂ”i vĂ”ib sisaldada suurt hulka teavet. NĂ€iteks vĂ”ib see olla pĂ€ring kĂ”igi loodud host-tĂŒĂŒpi objektide loendi saamiseks haldusserveris. Selliste pĂ€ringute puhul tagastab API vaikimisi 50 objekti loendi (seda limiiti on vĂ”imalik suurendada kuni 500 objekti kohta vastuses). Ja et mitte teavet mitu korda kĂŒsida, muutes pĂ€ringu offset parameetrit, on olemas meetod api_query, mis teeb selle töö automaatselt. NĂ€idised vĂ€ljakutsetest, kus vajalik see meetod: 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 vĂ€ljakutsete nimedes mitmuse vormi sĂ”nu, seega on neid vĂ€ljakutseid lihtsam töödelda lĂ€bi api_query
show_hosts = client.api_query('show-hosts') Selle pÀringu vÀljund allpool:
In [21]: show_hosts
Out[21]:
APIResponse({
"data": [
{
"domain": {
"domain-type": "domain",
"name": "SMC User",
"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 User",
"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 User",
"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 User",
"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 on vÔimalik kasutada klassi muutujaid ja meetodeid APIResponse(nii konteksti halduri sees kui vÀljaspool). Klassil APIResponse on mÀÀratletud 4 meetodit ja 5 muutujat, millest kÔige olulisematel peatume lÀhemalt.

success
Esmalt oleks hea veenduda, et API kutsung lÀks lÀbi ja tagastas tulemuse. Selleks on olemas meetod success:
In [49]: api_versions.success
Out[49]: True
Tagastab True, kui API kutsung lĂ€ks edukalt lĂ€bi (vastuskood â 200) ja False, kui mitte (igal muul vastuskoodil). Mugav kasutada kohe pĂ€rast API kutsungit, et vastuskoodi jĂ€rgi erinevat teavet vĂ€lja printida.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message) statuscode
Tagastab vastuskoodi pÀrast API kutsungi 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
Samas vĂ”ib olla vajalik muuta status success vÀÀrtust. Tehniliselt on sinna vĂ”imalik paigutada mida iganes, isegi tavaline string. Kuid reaalse nĂ€itena vĂ”ib olla selle parameetri seadmine False'ks teatud kaasnevate tingimuste korral. Allpool on nĂ€ide, kus on ĂŒlesanded, mida tĂ€idetakse juhtimisseerveris, kuid me peame seda pĂ€ringut ebaĂ”nnestunuks (seame muutuja success) Vale, vaatamata sellele, et API kutsumine 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()
Metod response vÔimaldab vaadata vastuse sÔnastikku (status_code) ja vastuse keha (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
Lubab nÀha ainult vastuse keha (body) ilma liigsest teabest.
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öötlemisel tekkis viga (vastuskood 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 loetletud nÀited, kus kasutatakse API kutsumisi, mis on lisatud versioonile Management API 1.6.
Alustame API kutsumise töötluse uurimist add-host ja add-address-range. Oletame, et peame looma hosti tĂŒĂŒpi objektid kĂ”ikidele alamvĂ”rgu 192.168.0.0/24 IP-aadressidele, mille viimane oktet on 5, ja kĂ”ik ĂŒlejÀÀnud IP-aadressid jÀÀvad aadressivahemiku objektideks. Samuti tuleb vĂ€listada alamvĂ”rgu aadress ja laiaulatusliku aadress.
Nii et allpool on skript, milles lahendatakse antud ĂŒlesanne ja luuakse 50 hosti tĂŒĂŒpi objekti ja 51 aadressivahemiku objekti. Ălesande lahendamiseks on vajalik 101 API kutset (ilma viimase publish kutseta). Samuti mÔÔdame timeit mooduli abil skripti tĂ€itmise aega kuni muudatuste avaldamiseni.
Skript 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 laboratoorse keskkonna jaoks kulub selle skripti tĂ€itmiseks 30 kuni 50 sekundit, sĂ”ltuvalt haldussĂŒsteemi koormusest.
NĂŒĂŒd vaatame, kuidas sama ĂŒlesannet lahendada API kĂ”ne abil add-objects-batch, mille tugi on lisatud API versioonis 1.6. See kĂ”ne vĂ”imaldab ĂŒhe API pĂ€ringu abil luua korraga mitmeid objekte. Need vĂ”ivad olla erinevat tĂŒĂŒpi objektid (nĂ€iteks hostid, alavĂ”rgud ja aadressivahemikud). Seega saame meie ĂŒlesande lahendada ĂŒhe API kĂ”ne 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')
Ja selle skripti tĂ€itmine minu laboratoorse keskkonna jaoks vĂ”tab 3 kuni 7 sekundit, sĂ”ltuvalt haldussĂŒsteemi koormusest. See tĂ€hendab, et keskmiselt toimib 101 objekti API kĂ”ne tĂŒĂŒbiga 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 suurte muudatuste kaudu muuta igat parameetrit. Seadistame nĂ€iteks eelmise nĂ€ite esimeses pooles (hostid kuni .124, samuti vahemikud) vĂ€rvi sienna ja teises pooles 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")
Mitme objekti kustutamine ĂŒhes API-kutses on vĂ”imalik delete-objects-batch. Vaatame nĂŒĂŒd koodinĂ€idet, mis kustutab kĂ”ik varem loodud hostid add-objects-batch.
Objektide kustutamine 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)
KĂ”ik funktsioonid, mis ilmuvad uusimates Check Pointi tarkvaraversioonides, saavad kohe ka API-kutsed. NĂ€iteks R80.40 toob sellised âfunktsioonidâ nagu Revert to revision ja Smart Task, ning neile on kohe valmistatud vastavad API-kutsed. Veelgi enam, kogu funktsionaalsus, mis on seotud ĂŒleminekuga Legacy konsoolidelt Unified Policy reĆŸiimile, saab samuti API toe. NĂ€iteks oli kauaoodatud uuendus versioonis R80.40 HTTPS Inspection poliitika ĂŒleviimine Legacy reĆŸiimist Unified Policy reĆŸiimi ja see funktsionaalsus sai kohe API kutsed. Siin on koodinĂ€ide, mis lisab HTTPS Inspection poliitika kĂ”rgeimale positsioonile reegli, mis vĂ€listab inspekteerimisest 3 kategooriat (Tervis, Finants, Riiklikud teenused), mida on mitmesuguste seaduste kohaselt keelatud inspekteerida.
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
KĂ”ik on samas sisaldab teavet, kuidas kĂ€ivitada Python skripte otse haldusserverist. See vĂ”ib olla mugav, kui teil pole vĂ”imalust ĂŒhendada API serveriga teiselt masinalt. Olen salvestanud kuue minuti pikkuse video, kus kĂ€sitlen mooduli cpapi ja Python skriptide kĂ€ivitamise eripĂ€ra haldusserveris. NĂ€iteks kĂ€ivitub skript, mis automatiseerib uue lĂŒnga seadistamist selliseks ĂŒlesandeks nagu vĂ”rgu audit Security CheckUp. Kohtasin eripĂ€ra, millega pidin silmitsi seisma: versioonis Python 2.7 ei olnud veel funktsiooni input, seega kasutatakse kasutaja sisendi töötlemiseks funktsiooni raw_input. ĂlejÀÀnud osas on kood sama, nagu kĂ€ivitamisel teistelt masinatelt, lihtsalt mugavam on kasutada funktsiooni login_as_root, et mitte mÀÀrata uuesti oma kasutajanime, parooli ja haldusserveri IP-aadressi.

Skript kiireks Security CheckUp 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("Could not get the server's fingerprint - Check connectivity with the server.")
# exit(1)
login_res = client.login_as_root()
if login_res.success is False:
print("Login failed: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 kuvatakse ekraanil!")
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("Turbeline ĂŒhendus vĂ€ravaga ei ole loodud!")
exit(1)
elif add_gw.success:
print("VĂ€rav lisatud 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("Poliitikat on edukalt muudetud")
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 on edukalt muudetud")
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("Muutused on edukalt avaldatud.")
else:
print("Muutuste 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ÀÀsupoliitika on installitud")
else:
print("JuurdepÀÀsupoliitika 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("OhutÔrje poliitika on installitud")
else:
print("OhutÔrje poliitika installimine ebaÔnnestus - {}".format(install_tp_policy.error_message))
# lisa paroolid ja salafraasid sÔnaraamatusse
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 salafraasid", "script" : "printf "{}" >> $FWDIR/conf/additional_pass.conf".format(line), "targets" : gw_name})
if add_password_dictionary.success:
print("Parooli sÔnaraamatu rida {} on edukalt lisatud".format(line_num))
else:
print("SÔnaraamatu lisamine ebaÔnnestus - {}".format(add_password_dictionary.error_message))
main() NĂ€idisfail salajaste paroolide jaoks additional_pass.conf
{
"passwords" : ["pahavÔtud","kahjulik","nakatunud","Nakatunud"],
"phrases" : ["pahavĂ”ti","PahavĂ”ti","Pass","pass","kood","vĂ”ti","pwd","паŃĐŸĐ»Ń","ĐаŃĐŸĐ»Ń","ĐĐ»ŃŃ","ĐșĐ»ŃŃ","ŃĐžŃŃ","КОŃŃ"]
}
KokkuvÔte
See artikkel kĂ€sitleb ainult pĂ”hifunktsioone Python SDK ning moodulit cpapi(nagu vĂ”isite arvata, on need tegelikult sĂŒnonĂŒĂŒmid), ja uurides selle mooduli koodi, avardate oma vĂ”imalusi selle kasutamisel. Pole vĂ€listatud, et soovite lisada sellele oma klasse, funktsioone, meetodeid ja muutujaid. Saate alati jagada oma töid ja vaadata teisi Check Pointi skripte jaotises kogukonnas , mis ĂŒhendab arendajaid ja toote kasutajaid.
Head kodeerimist ja tÀnan teid, et lugesite lÔpuni!
Allikas: habr.com
