APIekin elkarrekintzaren ahalmen osoa programa-kodearekin batera erabiltzen denean agerian geratzen da, API eskaerak eta API erantzunak aztertzeko tresnak dinamikoki sortzea posible denean. Hala ere, oraindik nabaritu gabe jarraitzen du Python Software Garapenerako Kita (aurrerantzean Python SDK deitzen zaio). Check Point Management APIa, baina alferrik. Garatzaileen eta automatizazio zaleen bizitza nabarmen errazten du. Python-ek ospe handia lortu du azkenaldian eta hutsunea betetzea eta ezaugarri nagusiak berrikustea erabaki nuen. . Artikulu honek Habré-ri buruzko beste artikulu baten osagarri bikaina da . Python SDK erabiliz script-ak nola idazten diren aztertuko dugu eta 1.6 bertsioko Kudeaketa APIaren funtzionalitate berria aztertuko dugu (R80.40tik aurrera onartzen da). Artikulua ulertzeko, APIekin eta Pythonekin lan egiteko oinarrizko ezagutzak beharko dituzu.
Check Point APIa aktiboki garatzen ari da eta momentuz honako hauek kaleratu dira:
- - API bidez kontrol-zerbitzariarekin lan egin (eta kontrol-zerbitzariak kontrolatutako atebideetan script-ak exekutatzeko gaitasuna)
- — lan egin segurtasun atebideekin
- — Check Point hodeian sandbox batekin lan egitea
- — Identity Awareness blade-rekin lan egitea atebideetan
- — SMB atebidearen kudeaketa atariarekin lan egin ()
- — IoT kontrolagailuekin elkarrekintza
- -ekin lan egin (SD-WAN segurtasun irtenbidea)
- -ekin lan egin
Python SDK-k Kudeaketa APIarekin eta elkarrekintza soilik onartzen du Gaia APIa. Modulu honetan klase, metodo eta aldagai garrantzitsuenak aztertuko ditugu.

Modulua instalatzea
Modulua cpapi azkar eta erraz instalatzen da laguntzarekin PIP. Instalazio argibide zehatzak hemen daude eskuragarri . Modulu hau Python 2.7 eta 3.7 bertsioekin lan egiteko egokituta dago. Artikulu honetan, Python 3.7 erabiliz adibideak emango dira. Hala ere, Python SDK zuzenean exekutatu daiteke Check Point Management Server-tik (Smart Management), baina Python 2.7 bakarrik onartzen dute, beraz, azken atalean 2.7 bertsiorako kodea emango du. Modulua instalatu eta berehala, direktorioetako adibideak ikustea gomendatzen dut adibideak_python2 и adibideak_python3.
Pizten
cpapi moduluaren osagaiekin lan egin ahal izateko, modulutik inportatu behar dugu cpapi gutxienez beharrezkoak diren bi klase:
APIClient и APIClientArgs
from cpapi import APIClient, APIClientArgs
Class APIClientArgs API zerbitzarirako konexio-parametroez eta klaseaz arduratzen da APIClient APIarekin interakzioaz arduratzen da.
Konexio-parametroak zehaztea
APIra konektatzeko hainbat parametro definitzeko, klasearen instantzia bat sortu behar duzu APIClientArgs. Printzipioz, bere parametroak aurrez definituta daude eta script-a kontrol-zerbitzarian exekutatzen denean, ez dira zehaztu beharrik.
client_args = APIClientArgs()Baina hirugarrenen ostalari batean exekutatzen ari zarenean, gutxienez API zerbitzariaren IP helbidea edo ostalari-izena zehaztu behar duzu (kudeaketa zerbitzari gisa ere ezaguna). Beheko adibidean, zerbitzariaren konexio-parametroa definitzen dugu eta kudeaketa-zerbitzariaren IP helbidea esleitzen diogu kate gisa.
client_args = APIClientArgs(server='192.168.47.241')Ikus ditzagun API zerbitzariarekin konektatzean erabil daitezkeen parametro guztiak eta balio lehenetsiak:
APIClientArgs klaseko __init__ metodoaren argudioak
class APIClientArgs:
"""
This class provides arguments for APIClient configuration.
All the arguments are configured with their default values.
"""
# port is set to None by default, but it gets replaced with 443 if not specified
# context possible values - web_api (default) or 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
# management server fingerprint
self.fingerprint = fingerprint
# session-id.
self.sid = sid
# management server name or IP-address
self.server = server
# debug level
self.http_debug_level = http_debug_level
# an array with all the api calls (for debug purposes)
self.api_calls = api_calls if api_calls else []
# name of debug file. If left empty, debug data will not be saved to disk.
self.debug_file = debug_file
# HTTP proxy server address (without "http://")
self.proxy_host = proxy_host
# HTTP proxy port
self.proxy_port = proxy_port
# Management server's API version
self.api_version = api_version
# Indicates that the client should not check the server's certificate
self.unsafe = unsafe
# Indicates that the client should automatically accept and save the server's certificate
self.unsafe_auto_accept = unsafe_auto_accept
# The context of using the client - defaults to web_api
self.context = contextUste dut APIClientArgs klaseko instantzietan erabil daitezkeen argudioak intuitiboak direla Check Pointeko administratzaileentzat eta ez dutela iruzkin gehigarririk behar.
APIClient eta testuinguru-kudeatzailearen bidez konektatzea
Class APIClient Erabiltzeko modurik erosoena testuinguru-kudeatzailea da. APIClient klaseko instantzia batera pasatu behar dena aurreko urratsean definitu ziren konexio-parametroak dira.
with APIClient(client_args) as client:
Testuinguru-kudeatzaileak ez du automatikoki saioa hasteko deirik egingo API zerbitzariari, baina amaitzeko deia egingo du bertatik irtetean. Arrazoiren batengatik ez bada saioa amaitu behar API deiekin lan egiten amaitu ondoren, lanean hasi behar duzu testuinguru-kudeatzailea erabili gabe:
client = APIClient(clieng_args)Konexioa egiaztatzea
Konexioak zehaztutako parametroak betetzen dituen egiaztatzeko modurik errazena metodoa erabiltzea da egiaztatu_hatz-marka. Zerbitzariaren API ziurtagiriaren hash-markaren sha1 hash batura egiaztatzeak huts egiten badu (itzultzen den metodoa False), orduan konexio-arazoek eragiten dute normalean eta programaren exekuzioa geldiarazi dezakegu (edo erabiltzaileari konexio-datuak zuzentzeko aukera eman):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
Kontuan izan etorkizunean klasea APIClient API dei guztiak (metodoak api_deitu и api_query, haiei buruz pixka bat gehiago hitz egingo dugu) sha1 hatz-markaren ziurtagiria API zerbitzarian. Baina, API zerbitzariaren ziurtagiriaren sha1 hatz-marka egiaztatzean errore bat hautematen bada (ziurtagiria ezezaguna da edo aldatu egin da), metodoa egiaztatu_hatz-marka tokiko makinan horri buruzko informazioa automatikoki gehitzeko/aldatzeko aukera emango du. Egiaztapen hau guztiz desgaitu daiteke (baina hau bakarrik gomenda daiteke scriptak API zerbitzarian bertan exekutatzen badira, 127.0.0.1-era konektatzean), APIClientArgs argumentua erabiliz - unsafe_auto_onar (ikusi gehiago APIClientArgs-i buruz "Konexio-parametroak definitzen" atalean).
client_args = APIClientArgs(unsafe_auto_accept=True)Hasi saioa API zerbitzarian
У APIClient API zerbitzarian saioa hasteko 3 metodo daude, eta horietako bakoitzak esanahia ulertzen du sid(saio-id), goiburuko hurrengo API dei bakoitzean automatikoki erabiltzen dena (parametro honen goiburuko izena da X-chkp-sid), beraz, ez dago parametro hau gehiago prozesatu beharrik.
saioa hasteko metodoa
Saio-hasiera eta pasahitza erabiliz aukera (adibidean, admin erabiltzaile-izena eta 1q2w3e pasahitza posizio-argumentu gisa pasatzen dira):
login = client.login('admin', '1q2w3e') Aukerako parametro gehigarriak ere eskuragarri daude saioa hasteko metodoan; hona hemen haien izenak eta balio lehenetsiak:
continue_last_session=False, domain=None, read_only=False, payload=NoneLogin_with_api_key metodoa
Aukera api gako bat erabiliz (R80.40 kudeaketa bertsiotik hasita onartzen da/Management API v1.6, "3TsbPJ8ZKjaJGvFyoFqHFA==" hau da API gakoaren baimen-metodoa duen kudeaketa zerbitzariko erabiltzaileetako baten API gakoaren balioa):
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') Metodoan login_with_api_key metodoaren aukerako parametro berberak daude eskuragarri saioa hasi.
login_as_root metodoa
API zerbitzari batekin tokiko makina batean saioa hasteko aukera:
login = client.login_as_root()Metodo honetarako aukerako bi parametro baino ez daude eskuragarri:
domain=None, payload=NoneEta azkenik, APIak bere buruari deitzen dio
Metodoen bidez API deiak egiteko bi aukera ditugu api_deitu и api_query. Azter dezagun zein den haien arteko aldea.
api_deitu
Metodo hau edozein deitarako aplikagarria da. Beharrezkoa izanez gero, api deiaren eta kargaren azken zatia eskaeraren gorputzean pasatu behar dugu. Karga hutsik badago, ezin izango da batere transferitu:
api_versions = client.api_call('show-api-versions') Mozketaren azpian eskaera honen irteera:
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'})Mozketaren azpian eskaera honen irteera:
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
Erreserba bat egin dezadan berehala metodo hau desplazamendua dakarten deietarako soilik aplikagarria dela. Inferentzia hori informazio kopuru handia eduki edo eduki dezakeenean gertatzen da. Adibidez, hau kudeaketa zerbitzarian sortutako ostalari-objektu guztien zerrenda eskaria izan daiteke. Halako eskaeretarako, APIak 50 objektuko zerrenda itzultzen du lehenespenez (erantzunean 500 objektura igo dezakezu muga). Eta informazioa hainbat aldiz ez ateratzeko, API eskaeran offset parametroa aldatuz, badago lan hau automatikoki egiten duen api_query metodo bat. Metodo hau behar den deien adibideak: erakutsi-saioak, erakutsi-ostalariak, erakutsi-sareak, erakutsi-komodinak, erakutsi-taldeak, erakutsi-helbide-barrutiak, erakutsi-simple-gateways, show-simple-clusters, erakutsi-sarbide-rolak, erakutsi-konfiantzazko-bezeroak, ikuskizun-paketeak. Izan ere, API dei horien izenean pluraleko hitzak ikusten ditugu, beraz, dei hauek errazago kudeatzeko aukera izango da. api_query
show_hosts = client.api_query('show-hosts') Mozketaren azpian eskaera honen irteera:
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 deien emaitzak prozesatzea
Honen ondoren klaseko aldagaiak eta metodoak erabil ditzakezu APIRerantzuna(testuinguruaren kudeatzailearen barruan zein kanpoan). Klasean APIRerantzuna 4 metodo eta 5 aldagai aurredefinituta daude; garrantzitsuenetan sakonduko dugu.

arrakasta
Hasteko, komenigarria izango litzateke API deiak arrakasta izan duela eta emaitza bat itzuli duela ziurtatzea. Metodo bat dago horretarako arrakasta:
In [49]: api_versions.success
Out[49]: True
True itzultzen du API deiak arrakastatsua izan bada (erantzun-kodea - 200) eta False ez bada (beste edozein erantzun-kode). Erosoa da API dei baten ondoren berehala erabiltzea erantzun-kodearen arabera informazio ezberdina bistaratzeko.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message) egoera-kodea
Erantzun kodea itzultzen du API dei bat egin ondoren.
In [62]: api_versions.status_code
Out[62]: 400
Erantzun-kode posibleak: 200,400,401,403,404,409,500,501.
ezarri_success_status
Kasu honetan, baliteke arrakasta egoeraren balioa aldatzea beharrezkoa izatea. Teknikoki, edozer jar dezakezu bertan, baita ohiko kate bat ere. Baina benetako adibide bat parametro hau False gisa berrezartzea izango litzateke, horrekin batera baldintza jakin batzuetan. Jarraian, erreparatu adibideari kudeaketa zerbitzarian zereginak exekutatzen direnean, baina eskaera hau arrakastatsutzat joko dugu (arrakasta aldagaia ezarriko dugu. False, API deiak arrakastatsua izan eta 200 kodea itzuli duen arren).
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
breakerantzuna()
Erantzun-metodoak hiztegia erantzun-kodearekin (egoera_kodea) eta erantzunaren gorputzarekin (gorputza) ikusteko aukera ematen du.
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']}}
datuak
Erantzunaren (gorputza) soilik ikusteko aukera ematen du alferrikako informaziorik gabe.
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
Informazio hau API eskaera prozesatzen denean errore bat gertatu denean bakarrik dago eskuragarri (erantzun kodea ez 200). Irteera adibidea
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
Adibide erabilgarriak
Jarraian, Management API 1.6-n gehitu ziren API deiak erabiltzen dituzten adibideak dira.
Lehenik eta behin, ikus dezagun nola funtzionatzen duten deiak gehitu-ostalari и gehitu-helbide-barrutia. Demagun 192.168.0.0/24 azpisareko IP helbide guztiak sortu behar ditugula, azken zortzikotea 5 izanik, ostalari motako objektu gisa, eta gainerako IP helbide guztiak helbide-barruti motako objektu gisa idatzi behar ditugula. Kasu honetan, baztertu azpisarearen helbidea eta difusio helbidea.
Beraz, behean arazo hau konpontzen duen script bat dago eta ostalari motako 50 objektu eta helbide-barruti motako 51 objektu sortzen ditu. Arazoa konpontzeko, 101 API dei behar dira (azken argitaratze-deia zenbatu gabe). Era berean, timeit modulua erabiliz, scripta exekutatzeko behar den denbora kalkulatzen dugu aldaketak argitaratu arte.
Add-host eta add-address-range erabiliz gidoia
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')
Nire laborategiko ingurunean, script hau 30 eta 50 segundo artean exekutatzen da, kudeaketa zerbitzariaren kargaren arabera.
Orain ikus dezagun arazo bera nola konpondu API dei bat erabiliz gehitu-objektuak-batch, laguntza API 1.6 bertsioan gehitu zen. Dei honek objektu asko aldi berean sor ditzakezu API eskaera batean. Gainera, mota ezberdinetako objektuak izan daitezke (adibidez, ostalariak, azpisareak eta helbide-barrutiak). Horrela, gure zeregina API dei baten esparruan konpondu daiteke.
Add-objects-batch erabiliz gidoia
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')
Eta script hau nire laborategiko ingurunean exekutatzen 3 eta 7 segundo irauten du, kudeaketa zerbitzariaren kargaren arabera. Hau da, batez beste, 101 API objektutan batch motako deia 10 aldiz azkarrago exekutatzen da. Objektu kopuru handiago batean aldea are ikusgarriagoa izango da.
Orain ikus dezagun nola lan egin multzo-objektu-sorta. API dei hau erabiliz, edozein parametro alda dezakegu masiboki. Ezar ditzagun aurreko adibideko helbideen lehen erdia (gehienez .124 ostalariak, eta barrutiak ere) koloreko sienna, eta esleitu kaki kolorea helbideen bigarren erdiari.
Aurreko adibidean sortutako objektuen kolorea aldatzea
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")
Hainbat objektu ezaba ditzakezu API dei batean erabiliz ezabatu-objektuak-batch. Ikus dezagun orain aurretik sortutako ostalari guztiak ezabatzen dituen kode-adibide bat gehitu-objektuak-batch.
Objektuak ezabatzea delete-objects-batch erabiliz
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 Point softwarearen bertsio berrietan agertzen diren funtzio guztiek berehala eskuratzen dituzte API deiak. Horrela, R80.40-n Revert to revision eta Smart Task bezalako "ezaugarriak" agertu ziren, eta dagozkien API deiak berehala prestatu ziren. Gainera, Legacy kontsoletatik Politika bateratu modura pasatzen direnean funtzionalitate guztiek API laguntza ere eskuratzen dute. Esaterako, R80.40 software bertsioan aspaldi itxaroten den eguneraketa HTTPS Inspection politika Legacy modutik Unified Policy modura pasatzea izan zen, eta funtzionalitate honek berehala jaso zituen API deiak. Hona hemen HTTPS Ikuskapen-politikaren goiko posizioari arau bat gehitzen dion kode-adibide bat, 3 kategoria ikuskapenetik kanpo uzten dituena (Osasuna, Finantza, Gobernu Zerbitzuak), legediaren arabera ikuskatzea debekatuta daudenak.
Gehitu arau bat HTTPS Ikuskapen-politikari
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 scriptak exekutatzen Check Point kudeaketa zerbitzarian
Dena berdin kontrol zerbitzaritik zuzenean Python scriptak exekutatzeko informazioa dauka. Hau erosoa izan daiteke beste makina batetik API zerbitzarira konektatu ezin zarenean. Sei minutuko bideo bat grabatu nuen eta bertan modulua instalatzen ikusten dudan cpapi eta kontrol zerbitzarian Python script-ak exekutatzeko ezaugarriak. Adibide gisa, sarearen auditoria bezalako ataza baterako atebide berri baten konfigurazioa automatizatzen duen script bat exekutatzen da. Segurtasun Egiaztapena. Landu behar izan ditudan ezaugarrien artean: funtzioa oraindik ez da agertu Python 2.7-n sarrera, beraz, erabiltzaileak sartzen duen informazioa prozesatzeko, funtzio bat erabiltzen da sarrera_gordina. Bestela, kodea beste makina batzuetatik abiarazteko berdina da, funtzioa erabiltzea erosoagoa da login_as_root, kudeaketa zerbitzariaren erabiltzaile-izena, pasahitza eta IP helbidea berriro ez zehazteko.

Segurtasun-egiaztapena azkar konfiguratzeko scripta
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("Enter the gateway name:")
gw_ip = raw_input("Enter the gateway IP address:")
if sys.stdin.isatty():
sic = getpass.getpass("Enter one-time password for the gateway(SIC): ")
else:
print("Attention! Your password will be shown on the screen!")
sic = raw_input("Enter one-time password for the gateway(SIC): ")
version = raw_input("Enter the gateway version(like 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("Secure connection with the gateway hasn't established!")
exit(1)
elif add_gw.success:
print("The gateway was added successfully.")
gw_uid = add_gw.data['uid']
gw_name = add_gw.data['name']
else:
print("Failed to add the gateway - {}".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("The policy has been changed successfully")
else:
print("Failed to change the policy- {}".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("The cleanup rule has been changed successfully")
else:
print("Failed to change the cleanup rule- {}".format(change_rule.error_message))
# publish the result
publish_res = client.api_call("publish", {})
if publish_res.success:
print("The changes were published successfully.")
else:
print("Failed to publish the changes - {}".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("The access policy has been installed")
else:
print("Failed to install access policy - {}".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("The threat prevention policy has been installed")
else:
print("Failed to install threat prevention policy - {}".format(install_tp_policy.error_message))
# add passwords and passphrases to dictionary
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" : "Add passwords and passphrases", "script" : "printf "{}" >> $FWDIR/conf/additional_pass.conf".format(line), "targets" : gw_name})
if add_password_dictionary.success:
print("The password dictionary line {} was added successfully".format(line_num))
else:
print("Failed to add the dictionary - {}".format(add_password_dictionary.error_message))
main() Adibide-fitxategi bat pasahitz hiztegi batekin addition_pass.conf
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","пароль","Пароль","Ключ","ключ","шифр","Шифр"]
}
Ondorioa
Artikulu honek lanaren oinarrizko aukerak baino ez ditu aztertzen Python SDK eta modulua cpapi(Igarri zenuten bezala, hauek benetan sinonimoak dira), eta modulu honetako kodea aztertuz gero eta aukera gehiago aurkituko dituzu horrekin lan egiteko. Baliteke zure klase, funtzio, metodo eta aldagaiekin osatu nahi izatea. Beti parteka dezakezu zure lana eta Check Point-erako beste script batzuk ikus ditzakezu atalean komunitatean , produktuen garatzaileak zein erabiltzaileak biltzen dituena.
Zoriontsu kodeketa eta eskerrik asko amaiera arte irakurtzeagatik!
Iturria: www.habr.com
