Python SDK paÅ”laik atbalsta tikai mijiedarbÄ«bu ar pÄrvaldÄ«bas API un Gaia API. Å ajÄ modulÄ« mÄs apskatÄ«sim svarÄ«gÄkÄs klases, metodes un mainÄ«gos.
Moduļa uzstÄdÄ«Å”ana
Modulis cpapi Ätri un vienkÄrÅ”i instalÄ no oficiÄlajÄ Check Point repozitorijÄ vietnÄ github via pip. DetalizÄtas uzstÄdÄ«Å”anas instrukcijas ir pieejamas README.md. Å is modulis ir pielÄgots darbam ar Python versijÄm 2.7 un 3.7. Å ajÄ rakstÄ tiks sniegti piemÄri, izmantojot Python 3.7. TomÄr Python SDK var palaist tieÅ”i no Check Point Management Server (Smart Management), taÄu tie atbalsta tikai Python 2.7, tÄpÄc pÄdÄjÄ sadaÄ¼Ä tiks nodroÅ”inÄts kods versijai 2.7. Uzreiz pÄc moduļa instalÄÅ”anas iesaku apskatÄ«t piemÄrus direktorijÄs examples_python2 Šø examples_python3.
Darba sÄkÅ”ana
Lai mÄs varÄtu strÄdÄt ar cpapi moduļa komponentiem, mums ir jÄimportÄ no moduļa cpapi vismaz divas obligÄtÄs klases:
APIClient Šø APIClientArgs
from cpapi import APIClient, APIClientArgs
Klase APIClientArgs ir atbildīgs par savienojuma parametriem ar API serveri un klasi APIClient ir atbildīgs par mijiedarbību ar API.
Savienojuma parametru noteikŔana
Lai definÄtu dažÄdus parametrus savienojumam ar API, jums ir jÄizveido klases gadÄ«jums APIClientArgs. PrincipÄ tÄ parametri ir iepriekÅ” definÄti un, palaižot skriptu vadÄ«bas serverÄ«, tie nav jÄnorÄda.
client_args = APIClientArgs()
Bet, darbojoties treÅ”Äs puses resursdatorÄ, jums ir jÄnorÄda vismaz API servera (pazÄ«stams arÄ« kÄ pÄrvaldÄ«bas serveri) IP adrese vai resursdatora nosaukums. TÄlÄk esoÅ”ajÄ piemÄrÄ mÄs definÄjam servera savienojuma parametru un pieŔķiram tam pÄrvaldÄ«bas servera IP adresi kÄ virkni.
ApskatÄ«sim visus parametrus un to noklusÄjuma vÄrtÄ«bas, ko var izmantot, veidojot savienojumu ar API serveri:
APIClientArgs klases metodes __init__ argumenti
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 = context
Es uzskatu, ka argumenti, ko var izmantot APIClientArgs klases gadÄ«jumos, ir intuitÄ«vi Check Point administratoriem un tiem nav nepiecieÅ”ami papildu komentÄri.
Savienojuma izveide, izmantojot APIClient un konteksta pÄrvaldnieku
Klase APIClient ÄrtÄkais veids, kÄ to izmantot, ir konteksta pÄrvaldnieks. Viss, kas jÄnodod APIClient klases instancÄ, ir savienojuma parametri, kas tika definÄti iepriekÅ”ÄjÄ darbÄ«bÄ.
with APIClient(client_args) as client:
Konteksta pÄrvaldnieks automÄtiski neveiks pieteikÅ”anÄs zvanu API serverim, taÄu, izejot no tÄ, tas veiks atteikÅ”anÄs zvanu. Ja pÄc darba ar API izsaukumiem kÄda iemesla dÄļ atteikÅ”anÄs nav nepiecieÅ”ama, jÄsÄk strÄdÄt, neizmantojot konteksta pÄrvaldnieku:
client = APIClient(clieng_args)
Savienojuma pÄrbaude
VienkÄrÅ”Äkais veids, kÄ pÄrbaudÄ«t, vai savienojums atbilst norÄdÄ«tajiem parametriem, ir izmantot Å”o metodi pÄrbaudÄ«t_pirkstu nospiedumu. Ja servera API sertifikÄta pirksta nospieduma sha1 jaucÄjsummas pÄrbaude neizdodas (atgrieztÄ metode Nepatiess), tad to parasti izraisa savienojuma problÄmas un mÄs varam apturÄt programmas izpildi (vai dot lietotÄjam iespÄju labot savienojuma datus):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
LÅ«dzu, Åemiet vÄrÄ, ka turpmÄk klasÄ APIClient pÄrbaudÄ«s katru API zvanu (metodes api_call Šø api_query, mÄs par tiem runÄsim nedaudz tÄlÄk) sha1 pirkstu nospiedumu sertifikÄts API serverÄ«. Bet, ja, pÄrbaudot API servera sertifikÄta sha1 pirksta nospiedumu, tiek konstatÄta kļūda (sertifikÄts nav zinÄms vai ir mainÄ«ts), metode pÄrbaudÄ«t_pirkstu nospiedumu nodroÅ”inÄs iespÄju automÄtiski pievienot/mainÄ«t informÄciju par to lokÄlajÄ maŔīnÄ. Å o pÄrbaudi var pilnÄ«bÄ atspÄjot (bet to var ieteikt tikai tad, ja skripti tiek palaisti paÅ”Ä API serverÄ«, kad tiek izveidots savienojums ar 127.0.0.1), izmantojot APIClientArgs argumentu - unsafe_auto_accept (vairÄk par APIClientArgs skatiet sadaÄ¼Ä āSavienojuma parametru definÄÅ”anaā).
Š£ APIClient ir 3 metodes, lai pieteiktos API serverÄ«, un katra no tÄm saprot nozÄ«mi sid(session-id), kas tiek automÄtiski izmantots katrÄ nÄkamajÄ API izsaukumÄ galvenÄ (nosaukums Ŕī parametra galvenÄ ir X-chkp-sid), tÄpÄc Å”is parametrs nav jÄapstrÄdÄ tÄlÄk.
pieteikÅ”anÄs metode
Opcija, izmantojot pieteikumvÄrdu un paroli (piemÄrÄ lietotÄjvÄrds admin un parole 1q2w3e tiek nodoti kÄ pozicionÄlie argumenti):
login = client.login('admin', '1q2w3e')
PieteikÅ”anÄs metodÄ ir pieejami arÄ« papildu izvÄles parametri; Å”eit ir to nosaukumi un noklusÄjuma vÄrtÄ«bas:
Opcija, izmantojot api atslÄgu (tiek atbalstÄ«ta, sÄkot no pÄrvaldÄ«bas versijas R80.40/Management API v1.6, "3TsbPJ8ZKjaJGvFyoFqHFA==" Ŕī ir API atslÄgas vÄrtÄ«ba vienam no lietotÄjiem pÄrvaldÄ«bas serverÄ« ar API atslÄgas autorizÄcijas metodi):
MetodÄ login_with_api_key ir pieejami tie paÅ”i izvÄles parametri kÄ metodÄ PieslÄgties.
login_as_root metode
IespÄja pieteikties vietÄjÄ maŔīnÄ ar API serveri:
login = client.login_as_root()
Å ai metodei ir pieejami tikai divi izvÄles parametri:
domain=None, payload=None
Un visbeidzot API izsauc sevi
Mums ir divas iespÄjas veikt API zvanus, izmantojot metodes api_call Šø api_query. Noskaidrosim, kÄda ir atŔķirÄ«ba starp tÄm.
api_call
Å Ä« metode ir piemÄrota visiem zvaniem. VajadzÄ«bas gadÄ«jumÄ mums ir jÄnodod pÄdÄjÄ API izsaukuma daļa un lietderÄ«gÄ slodze pieprasÄ«juma pamattekstÄ. Ja krava ir tukÅ”a, to vispÄr nevar pÄrsÅ«tÄ«t:
Ä»aujiet man uzreiz izdarÄ«t atrunu, ka Ŕī metode ir piemÄrojama tikai zvaniem, kuru izvade ir saistÄ«ta ar nobÄ«di. Å Äds secinÄjums rodas, ja tas satur vai var saturÄt lielu informÄcijas daudzumu. PiemÄram, tas varÄtu bÅ«t pieprasÄ«jums pÄc visu izveidoto saimniekdatora objektu saraksta pÄrvaldÄ«bas serverÄ«. Å Ädiem pieprasÄ«jumiem API pÄc noklusÄjuma atgriež sarakstu ar 50 objektiem (atbildÄ varat palielinÄt ierobežojumu lÄ«dz 500 objektiem). Un, lai informÄcija netiktu izvilkta vairÄkas reizes, mainot nobÄ«des parametru API pieprasÄ«jumÄ, ir api_query metode, kas to veic automÄtiski. Zvanu piemÄri, kur Ŕī metode ir nepiecieÅ”ama: raidÄ«jumu sesijas, raidÄ«jumu vadÄ«tÄji, Å”ovu tÄ«kli, rÄdÄ«Å”anas aizstÄjÄjzÄ«mes, Å”ovu grupas, rÄdÄ«Å”anas adreÅ”u diapazoni, vienkÄrÅ”Äs demonstrÄÅ”anas vÄrtejas, vienkÄrÅ”Äs demonstrÄÅ”anas kopas, raidÄ«jumu piekļuves lomas, uzticamo klientu demonstrÄÅ”ana, Å”ovu paketes. Faktiski Å”o API izsaukumu nosaukumos redzami vÄrdi daudzskaitļa formÄ, tÄpÄc Å”os zvanus bÅ«s vieglÄk apstrÄdÄt api_query
PÄc tam varat izmantot klases mainÄ«gos un metodes APIResponse(gan konteksta pÄrvaldniekÄ, gan Ärpus tÄ). KlasÄ APIResponse Ir iepriekÅ” definÄtas 4 metodes un 5 mainÄ«gie, pie svarÄ«gÄkajÄm mÄs pakavÄsimies sÄ«kÄk.
veiksme
Vispirms bÅ«tu ieteicams pÄrliecinÄties, vai API izsaukums bija veiksmÄ«gs un atgrieza rezultÄtu. Tam ir metode veiksme:
In [49]: api_versions.success
Out[49]: True
Atgriež True, ja API izsaukums bija veiksmÄ«gs (atbildes kods ā 200), un False, ja tas nav veiksmÄ«gs (jebkurÅ” cits atbildes kods). To ir Ärti lietot uzreiz pÄc API izsaukuma, lai parÄdÄ«tu dažÄdu informÄciju atkarÄ«bÄ no atbildes koda.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message)
Å ÄdÄ gadÄ«jumÄ var bÅ«t nepiecieÅ”ams mainÄ«t veiksmes statusa vÄrtÄ«bu. Tehniski tur var likt jebko, pat parastu virkni. TaÄu reÄls piemÄrs varÄtu bÅ«t Ŕī parametra atiestatÄ«Å”ana uz False noteiktos papildu apstÄkļos. TÄlÄk pievÄrsiet uzmanÄ«bu piemÄram, kad pÄrvaldÄ«bas serverÄ« darbojas uzdevumi, taÄu mÄs uzskatÄ«sim Å”o pieprasÄ«jumu par neveiksmÄ«gu (veiksmes mainÄ«go iestatÄ«sim uz Nepatiess, neskatoties uz to, ka API izsaukums bija veiksmÄ«gs un atgrieza kodu 200).
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
break
atbilde ()
Atbildes metode ļauj skatÄ«t vÄrdnÄ«cu ar atbildes kodu (statusa_kods) un atbildes pamattekstu (body).
Å Ä« informÄcija ir pieejama tikai tad, ja API pieprasÄ«juma apstrÄdes laikÄ radÄs kļūda (atbildes kods nÄ 200). Izvades piemÄrs
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
NoderÄ«gi piemÄri
TÄlÄk ir sniegti piemÄri, kuros tiek izmantoti API izsaukumi, kas tika pievienoti pÄrvaldÄ«bas API 1.6.
Vispirms apskatÄ«sim, kÄ darbojas zvani pievienoÅ”anas resursdators Šø add-adreÅ”u diapazons. PieÅemsim, ka mums ir jÄizveido visas apakÅ”tÄ«kla 192.168.0.0/24 IP adreses, kuru pÄdÄjais oktets ir 5, kÄ resursdatora tipa objekti un visas pÄrÄjÄs IP adreses jÄraksta kÄ adreÅ”u diapazona tipa objekti. Å ÄdÄ gadÄ«jumÄ izslÄdziet apakÅ”tÄ«kla adresi un apraides adresi.
TÄtad, zemÄk ir skripts, kas atrisina Å”o problÄmu un izveido 50 resursdatora tipa objektus un 51 objektu adreses diapazona tipa. Lai atrisinÄtu problÄmu, ir nepiecieÅ”ams 101 API izsaukums (neÅemot vÄrÄ galÄ«go publicÄÅ”anas zvanu). TÄpat, izmantojot timeit moduli, mÄs aprÄÄ·inÄm laiku, kas nepiecieÅ”ams skripta izpildei lÄ«dz izmaiÅu publicÄÅ”anai.
Skripts, izmantojot add-host un add-address-range
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')
ManÄ laboratorijas vidÄ Å”Ä« skripta izpilde aizÅem no 30 lÄ«dz 50 sekundÄm atkarÄ«bÄ no pÄrvaldÄ«bas servera slodzes.
Tagad redzÄsim, kÄ atrisinÄt to paÅ”u problÄmu, izmantojot API zvanu pievieno-objekti-partija, kuras atbalsts tika pievienots API versijÄ 1.6. Å is izsaukums ļauj vienÄ API pieprasÄ«jumÄ vienlaikus izveidot vairÄkus objektus. TurklÄt tie var bÅ«t dažÄda veida objekti (piemÄram, resursdatori, apakÅ”tÄ«kli un adreÅ”u diapazoni). TÄdÄjÄdi mÅ«su uzdevumu var atrisinÄt viena API izsaukuma ietvaros.
Skripts, izmantojot 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')
Un Ŕī skripta palaiÅ”ana manÄ laboratorijas vidÄ aizÅem no 3 lÄ«dz 7 sekundÄm atkarÄ«bÄ no pÄrvaldÄ«bas servera slodzes. Tas nozÄ«mÄ, ka vidÄji 101 API objektÄ pakeÅ”u veida izsaukums darbojas 10 reizes ÄtrÄk. LielÄkam objektu skaitam atŔķirÄ«ba bÅ«s vÄl iespaidÄ«gÄka.
Tagad redzÄsim, kÄ strÄdÄt ar set-objects-batch. Izmantojot Å”o API izsaukumu, mÄs varam lielapjoma mainÄ«t jebkuru parametru. IestatÄ«sim adreÅ”u pirmo pusi no iepriekÅ”ÄjÄ piemÄra (lÄ«dz .124 saimniekiem un arÄ« diapazoniem) uz krÄsu sienna un pieŔķirsim haki krÄsu adreÅ”u otrajai pusei.
IepriekÅ”ÄjÄ piemÄrÄ izveidoto objektu krÄsas maiÅa
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")
Varat dzÄst vairÄkus objektus vienÄ API izsaukumÄ, izmantojot delete-objects-batch. Tagad apskatÄ«sim koda piemÄru, kas dzÄÅ” visus saimniekdatorus, kas iepriekÅ” izveidoti, izmantojot pievieno-objekti-partija.
Objektu dzÄÅ”ana, izmantojot delete-objects-batch
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)
Visas funkcijas, kas parÄdÄs jaunajos Check Point programmatÅ«ras laidienos, nekavÄjoties iegÅ«st API izsaukumus. TÄdÄjÄdi R80.40 parÄdÄ«jÄs tÄdas āfunkcijasā kÄ Revert to revision un Smart Task, un tÄm nekavÄjoties tika sagatavoti atbilstoÅ”i API izsaukumi. TurklÄt visas funkcionalitÄtes, pÄrejot no mantotajÄm konsolÄm uz vienotÄs politikas režīmu, iegÅ«st arÄ« API atbalstu. PiemÄram, programmatÅ«ras versijas R80.40 ilgi gaidÄ«tais atjauninÄjums bija HTTPS pÄrbaudes politikas pÄrvietoÅ”ana no mantotÄ režīma uz vienotÄs politikas režīmu, un Ŕī funkcionalitÄte nekavÄjoties saÅÄma API zvanus. TÄlÄk ir sniegts koda piemÄrs, kas HTTPS pÄrbaudes politikas augÅ”Äjai pozÄ«cijai pievieno kÄrtulu, kas no pÄrbaudÄm izslÄdz 3 kategorijas (veselÄ«bas, finanÅ”u, valdÄ«bas pakalpojumus), kurÄm saskaÅÄ ar likumu vairÄkÄs valstÄ«s ir aizliegts pÄrbaudÄ«t.
Python skriptu palaiÅ”ana Check Point pÄrvaldÄ«bas serverÄ«
Viss ir vienÄds README.md satur informÄciju par to, kÄ palaist Python skriptus tieÅ”i no vadÄ«bas servera. Tas var bÅ«t Ärti, ja nevarat izveidot savienojumu ar API serveri no citas iekÄrtas. Es ierakstÄ«ju seÅ”u minÅ«Å”u video, kurÄ aplÅ«koju moduļa instalÄÅ”anu cpapi un Python skriptu palaiÅ”anas funkcijas vadÄ«bas serverÄ«. PiemÄram, tiek palaists skripts, kas automatizÄ jaunas vÄrtejas konfigurÄÅ”anu uzdevumam, piemÄram, tÄ«kla auditÄÅ”anai. DroŔības pÄrbaude. Starp funkcijÄm, ar kurÄm man bija jÄtiek galÄ: funkcija Python 2.7 vÄl nav parÄdÄ«jusies ievade, lai apstrÄdÄtu lietotÄja ievadÄ«to informÄciju, tiek izmantota funkcija raw_input. CitÄdi kods ir tÄds pats kÄ palaiÅ”anai no citÄm maŔīnÄm, tikai ÄrtÄk izmantot funkciju login_as_root, lai vÄlreiz nenorÄdÄ«tu savu lietotÄjvÄrdu, paroli un pÄrvaldÄ«bas servera IP adresi.
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()
Å ajÄ rakstÄ aplÅ«kotas tikai darba pamatiespÄjas Python SDK un modulis cpapi(kÄ jau varÄja uzminÄt, tie patiesÄ«bÄ ir sinonÄ«mi), un, izpÄtot kodu Å”ajÄ modulÄ«, jÅ«s atklÄsiet vÄl vairÄk iespÄju strÄdÄt ar to. IespÄjams, vÄlÄsities to papildinÄt ar savÄm klasÄm, funkcijÄm, metodÄm un mainÄ«gajiem. SadaÄ¼Ä vienmÄr varat kopÄ«got savus darbus un skatÄ«t citus Check Point skriptus CodeHub sabiedrÄ«bÄ CheckMates, kas apvieno gan produktu izstrÄdÄtÄjus, gan lietotÄjus.
LaimÄ«gu kodÄÅ”anu un paldies, ka izlasÄ«jÄt lÄ«dz beigÄm!