Is-simplifikazzjoni tal-API Check Point bil-Python SDK
Il-qawwa sħiħa tal-interazzjoni mal-APIs tiġi żvelata meta tintuża flimkien mal-kodiċi tal-programm, meta jsir possibbli li jiġu ġġenerati b'mod dinamiku talbiet tal-API u għodod għall-analiżi tar-risponsi tal-API. Madankollu, xorta tibqa' ma tinnotax Kit ta' Żvilupp tas-Softwer Python (minn hawn 'il quddiem imsejħa Python SDK) għal Check Point Management API, imma għalxejn. Jissimplifika b'mod sinifikanti l-ħajja tal-iżviluppaturi u d-dilettanti tal-awtomazzjoni. Python kiseb popolarità enormi dan l-aħħar u ddeċidejt li timla l-vojt u nirrevedi l-karatteristiċi ewlenin. Check Point API Python Development Kit. Dan l-artiklu jservi bħala żieda eċċellenti għal artiklu ieħor dwar Habré Check Point R80.10 API. Ġestjoni permezz ta 'CLI, skripts u aktar. Aħna ser inħarsu lejn kif tikteb skripts bl-użu tal-Python SDK u nagħtu ħarsa aktar mill-qrib lejn il-funzjonalità l-ġdida tal-Management API fil-verżjoni 1.6 (sostnjata li tibda minn R80.40). Biex tifhem l-artiklu, ser ikollok bżonn għarfien bażiku dwar kif taħdem ma 'APIs u Python.
Check Point qed jiżviluppa b'mod attiv l-API u bħalissa ġew rilaxxati dawn li ġejjin:
Il-Python SDK bħalissa jappoġġja biss l-interazzjoni mal-API tal-Ġestjoni u Gaia API. Aħna se nħarsu lejn l-aktar klassijiet, metodi u varjabbli importanti f'dan il-modulu.
Installazzjoni tal-modulu
Modulu cpapi jinstalla malajr u faċilment minn repożitorju uffiċjali ta' Check Point fuq github bl-għajnuna pip. Istruzzjonijiet dettaljati għall-installazzjoni huma disponibbli fi README.md. Dan il-modulu huwa adattat biex jaħdem mal-verżjonijiet Python 2.7 u 3.7. F'dan l-artikolu, se jingħataw eżempji bl-użu ta' Python 3.7. Madankollu, il-Python SDK jista 'jitħaddem direttament mis-Server ta' Ġestjoni tal-Punt ta 'Check (Ġestjoni Intelliġenti), iżda jappoġġjaw biss Python 2.7, għalhekk l-aħħar taqsima se tipprovdi kodiċi għall-verżjoni 2.7. Immedjatament wara l-installazzjoni tal-modulu, nirrakkomanda li tħares lejn l-eżempji fid-direttorji examples_python2 и examples_python3.
Getting Started
Sabiex inkunu nistgħu naħdmu mal-komponenti tal-modulu cpapi, għandna bżonn nimportaw mill-modulu cpapi mill-inqas żewġ klassijiet meħtieġa:
APIClient и APIClientArgs
from cpapi import APIClient, APIClientArgs
Klassi APIClientArgs huwa responsabbli għall-parametri tal-konnessjoni mas-server tal-API, u l-klassi APIClient huwa responsabbli għall-interazzjoni mal-API.
Determinazzjoni tal-parametri tal-konnessjoni
Biex tiddefinixxi diversi parametri għall-konnessjoni mal-API, trid toħloq istanza tal-klassi APIClientArgs. Fil-prinċipju, il-parametri tiegħu huma predefiniti u meta tħaddem l-iskrittura fuq is-server tal-kontroll, m'għandhomx għalfejn jiġu speċifikati.
client_args = APIClientArgs()
Iżda meta taħdem fuq host ta 'parti terza, trid tispeċifika mill-inqas l-indirizz IP jew l-isem tal-host tas-server tal-API (magħruf ukoll bħala s-server tal-ġestjoni). Fl-eżempju hawn taħt, aħna niddefinixxu l-parametru tal-konnessjoni tas-server u nassenjawh l-indirizz IP tas-server tal-ġestjoni bħala string.
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
Nemmen li l-argumenti li jistgħu jintużaw f'każijiet tal-klassi APIClientArgs huma intuwittivi għall-amministraturi ta 'Check Point u ma jeħtieġux kummenti addizzjonali.
Konnessjoni permezz tal-APIClient u l-maniġer tal-kuntest
Klassi APIClient L-aktar mod konvenjenti biex tużah huwa permezz tal-maniġer tal-kuntest. Dak kollu li jeħtieġ li jiġi mgħoddi lil istanza tal-klassi APIClient huma l-parametri tal-konnessjoni li ġew definiti fil-pass preċedenti.
with APIClient(client_args) as client:
Il-maniġer tal-kuntest mhux se jagħmel awtomatikament sejħa tal-login lis-server tal-API, iżda jagħmel sejħa tal-logout meta joħroġ minnu. Jekk għal xi raġuni l-logout ma jkunx meħtieġ wara li tispiċċa taħdem mas-sejħiet API, trid tibda taħdem mingħajr ma tuża l-maniġer tal-kuntest:
client = APIClient(clieng_args)
Test tal-konnessjoni
L-eħfef mod biex tivverifika jekk il-konnessjoni tissodisfax il-parametri speċifikati qed tuża l-metodu check_fingerprint. Jekk il-verifika tas-somma hash sha1 għall-marki tas-swaba' taċ-ċertifikat API tas-server tfalli (il-metodu rritornat False), allura dan ġeneralment ikun ikkawżat minn problemi ta 'konnessjoni u nistgħu nwaqqfu l-eżekuzzjoni tal-programm (jew nagħtu lill-utent l-opportunità li jikkoreġi d-dejta tal-konnessjoni):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
Jekk jogħġbok innota li fil-futur il-klassi APIClient se jiċċekkja kull sejħa API (metodi api_call и api_query, nitkellmu dwarhom ftit aktar) ċertifikat tal-marki tas-swaba’ sha1 fuq is-server tal-API. Imma jekk, meta tiċċekkja l-marki tas-swaba 'sha1 taċ-ċertifikat tas-server API, jiġi skopert żball (iċ-ċertifikat mhux magħruf jew inbidel), il-metodu check_fingerprint se tipprovdi l-opportunità li żżid/tbiddel informazzjoni dwarha fuq il-magna lokali awtomatikament. Dan il-kontroll jista' jiġi diżattivat kompletament (iżda dan jista' jiġi rrakkomandat biss jekk l-iskripts jitmexxew fuq is-server tal-API innifsu, meta tikkonnettja ma' 127.0.0.1), bl-użu tal-argument APIClientArgs - unsafe_auto_accept (ara aktar dwar APIClientArgs aktar kmieni fi “Definizzjoni tal-parametri tal-konnessjoni”).
У APIClient hemm daqs 3 metodi biex tidħol fis-server API, u kull wieħed minnhom jifhem it-tifsira sid(id-sessjoni), li tintuża awtomatikament f'kull sejħa API sussegwenti fl-intestatura (l-isem fl-intestatura ta' dan il-parametru huwa X-chkp-sid), għalhekk m'hemmx bżonn li jkompli jipproċessa dan il-parametru.
metodu ta' login
Għażla li tuża login u password (fl-eżempju, l-username admin u l-password 1q2w3e huma mgħoddija bħala argumenti pożizzjonali):
login = client.login('admin', '1q2w3e')
Parametri fakultattivi addizzjonali huma wkoll disponibbli fil-metodu tal-login; hawn huma l-ismijiet u l-valuri awtomatiċi tagħhom:
Għażla li tuża ċavetta api (sostnjata li tibda mill-verżjoni tal-ġestjoni R80.40/Management API v1.6, "3TsbPJ8ZKjaJGvFyoFqHFA==" dan huwa l-valur taċ-ċavetta tal-API għal wieħed mill-utenti fuq is-server tal-ġestjoni bil-metodu tal-awtorizzazzjoni taċ-ċavetta tal-API):
Fil-metodu login_with_api_key l-istess parametri fakultattivi huma disponibbli bħal fil-metodu login.
metodu login_as_root
Għażla li tidħol f'magna lokali b'server API:
login = client.login_as_root()
Hemm biss żewġ parametri mhux obbligatorji disponibbli għal dan il-metodu:
domain=None, payload=None
U fl-aħħarnett l-API jsejħu lilhom infushom
Għandna żewġ għażliet biex nagħmlu sejħiet API permezz ta 'metodi api_call и api_query. Ejja naraw x'inhi d-differenza bejniethom.
api_call
Dan il-metodu huwa applikabbli għal kwalunkwe sejħiet. Irridu ngħaddu l-aħħar parti għas-sejħa api u t-tagħbija fil-korp tat-talba jekk meħtieġ. Jekk it-tagħbija hija vojta, allura ma tistax tiġi trasferita għal kollox:
Ħa nagħmel riżerva minnufih li dan il-metodu huwa applikabbli biss għal sejħiet li l-output tagħhom jinvolvi offset. Tali inferenza sseħħ meta jkun fiha jew jista’ jkun fiha ammont kbir ta’ informazzjoni. Pereżempju, din tista' tkun talba għal lista tal-oġġetti ospitanti kollha maħluqa fuq is-server tal-ġestjoni. Għal tali talbiet, l-API jirritorna lista ta '50 oġġett awtomatikament (tista' żżid il-limitu għal 500 oġġett fir-rispons). U sabiex ma tiġbedx l-informazzjoni diversi drabi, billi tbiddel il-parametru tal-offset fit-talba tal-API, hemm metodu api_query li jagħmel dan ix-xogħol awtomatikament. Eżempji ta' sejħiet fejn dan il-metodu huwa meħtieġ: sessjonijiet tal-ispettaklu, hosts tal-wiri, netwerks tal-wiri, wildcards tal-wiri, gruppi tal-wiri, firxiet tal-indirizzi tal-ispettaklu, gateways-sempliċi tal-wiri, raggruppamenti-sempliċi tal-wiri, rwoli-aċċess tal-wiri, klijenti-fidati-turi, Show-pakketti. Fil-fatt, naraw kliem plural f'isem dawn is-sejħiet API, għalhekk dawn is-sejħiet ikunu aktar faċli biex jiġu mmaniġġjati. api_query
Wara dan tista' tuża l-varjabbli u l-metodi tal-klassi APIRispons(kemm ġewwa l-maniġer tal-kuntest kif ukoll barra). Fil-klassi APIRispons 4 metodi u 5 varjabbli huma predefiniti; aħna se noqogħdu fuq dawk l-aktar importanti f'aktar dettall.
suċċess
Biex tibda, tkun idea tajba li tiżgura li s-sejħa API kienet ta 'suċċess u rritornat riżultat. Hemm metodu għal dan suċċess:
In [49]: api_versions.success
Out[49]: True
Jirritorna Veru jekk is-sejħa API kienet ta' suċċess (kodiċi ta' rispons - 200) u Falza jekk ma rnexxiex (kwalunkwe kodiċi ta' rispons ieħor). Huwa konvenjenti li tuża immedjatament wara sejħa API biex turi informazzjoni differenti skont il-kodiċi tar-rispons.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message)
statuscode
Jirritorna l-kodiċi tar-rispons wara li tkun saret sejħa API.
In [62]: api_versions.status_code
Out[62]: 400
Kodiċi ta' rispons possibbli: 200,400,401,403,404,409,500,501.
set_success_status
F'dan il-każ, jista 'jkun meħtieġ li jinbidel il-valur tal-istatus ta' suċċess. Teknikament, tista 'tpoġġi xi ħaġa hemmhekk, anki spag regolari. Iżda eżempju reali jkun li dan il-parametru jerġa' jiġi ssettjat għal Falz taħt ċerti kundizzjonijiet ta' akkumpanjament. Hawn taħt, oqgħod attent għall-eżempju meta jkun hemm kompiti li qed jaħdmu fuq is-server tal-ġestjoni, iżda aħna se nqisu din it-talba ma tirnexxix (se nissettjaw il-varjabbli tas-suċċess għal False, minkejja l-fatt li s-sejħa API kienet ta’ suċċess u rritornat il-kodiċi 200).
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
break
Din l-informazzjoni hija disponibbli biss meta seħħ żball waqt l-ipproċessar tat-talba API (kodiċi ta’ rispons ebda 200). Eżempju ta' produzzjoni
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
Eżempji utli
Dawn li ġejjin huma eżempji li jużaw is-sejħiet API li ġew miżjuda fl-API ta' Ġestjoni 1.6.
L-ewwel, ejja nħarsu lejn kif jaħdmu sejħiet add-host и żid-firxa-indirizz. Ejja ngħidu li għandna bżonn noħolqu l-indirizzi IP kollha tas-subnet 192.168.0.0/24, li l-aħħar ottett tiegħu huwa 5, bħala oġġetti tat-tip ospitanti, u ikteb l-indirizzi IP l-oħra kollha bħala oġġetti tat-tip ta 'firxa ta' indirizzi. F'dan il-każ, eskludi l-indirizz tas-subnet u l-indirizz tax-xandir.
Allura, hawn taħt hemm skript li ssolvi din il-problema u joħloq 50 oġġett tat-tip ospitanti u 51 oġġett tat-tip ta 'firxa ta' indirizzi. Biex issolvi l-problema, huma meħtieġa 101 sejħiet API (mingħajr ma tingħadd is-sejħa finali tal-pubblikazzjoni). Ukoll, bl-użu tal-modulu timeit, aħna nikkalkulaw iż-żmien li tieħu biex tesegwixxi l-iskrittura sakemm il-bidliet jiġu ppubblikati.
Script bl-użu ta 'add-host u 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')
Fl-ambjent tal-laboratorju tiegħi, din l-iskrittura tieħu bejn 30 u 50 sekonda biex tesegwixxi, skont it-tagħbija fuq is-server tal-ġestjoni.
Issa ejja naraw kif issolvi l-istess problema billi tuża sejħa API żid-oġġetti-lott, li appoġġ għalih ġie miżjud fil-verżjoni API 1.6. Din is-sejħa tippermettilek toħloq ħafna oġġetti f'daqqa f'talba API waħda. Barra minn hekk, dawn jistgħu jkunu oġġetti ta' tipi differenti (pereżempju, hosts, subnets u meded ta' indirizzi). Għalhekk, il-kompitu tagħna jista 'jiġi solvut fil-qafas ta' sejħa API waħda.
Skript li juża 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')
U t-tħaddim ta 'dan l-iskript fl-ambjent tal-laboratorju tiegħi jieħu minn 3 sa 7 sekondi, skond it-tagħbija fuq is-server ta' ġestjoni. Jiġifieri, bħala medja, fuq 101 oġġett API, sejħa tat-tip ta 'lott taħdem 10 darbiet aktar malajr. Fuq numru akbar ta 'oġġetti d-differenza se tkun saħansitra aktar impressjonanti.
Issa ejja naraw kif taħdem magħhom sett-oġġetti-lott. Billi tuża din is-sejħa API, nistgħu nibdlu bl-ingrossa kwalunkwe parametru. Ejja nissettjaw l-ewwel nofs ta 'l-indirizzi mill-eżempju preċedenti (sa .124 hosts, u firxiet ukoll) għall-kulur sienna, u jassenja l-kulur kaki għat-tieni nofs ta' l-indirizzi.
Nibdlu l-kulur tal-oġġetti maħluqa fl-eżempju preċedenti
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")
Tista 'tħassar oġġetti multipli f'sejħa API waħda bl-użu ħassar-oġġetti-lott. Issa ejja nħarsu lejn eżempju ta 'kodiċi li jħassar l-ospiti kollha maħluqa preċedentement permezz żid-oġġetti-lott.
Tħassir ta' oġġetti bl-użu ta' 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)
Il-funzjonijiet kollha li jidhru fir-rilaxxi ġodda tas-softwer Check Point jakkwistaw immedjatament sejħiet API. Għalhekk, f'R80.40 dehru "karatteristiċi" bħal Revert to reviżjoni u Smart Task, u sejħiet API korrispondenti tħejjew immedjatament għalihom. Barra minn hekk, il-funzjonalità kollha meta tiċċaqlaq minn Legacy consoles għall-mod Unified Policy wkoll takkwista appoġġ API. Pereżempju, l-aġġornament tant mistenni fil-verżjoni tas-softwer R80.40 kien iċ-ċaqliq tal-politika tal-Ispezzjoni HTTPS mill-modalità Legacy għall-modalità Politika Unifikata, u din il-funzjonalità immedjatament irċeviet sejħiet API. Hawn eżempju ta 'kodiċi li żżid regola mal-pożizzjoni ewlenija tal-politika ta' Spezzjoni HTTPS li teskludi 3 kategoriji mill-ispezzjoni (Saħħa, Finanzi, Servizzi tal-Gvern), li huma pprojbiti mill-ispezzjoni skont il-liġi f'numru ta 'pajjiżi.
Tmexxi skripts Python fuq is-server tal-ġestjoni tal-Check Point
Kollox huwa l-istess README.md fih informazzjoni dwar kif tħaddem skripts Python direttament mis-server tal-kontroll. Dan jista 'jkun konvenjenti meta ma tkunx tista' tikkonnettja mas-server API minn magna oħra. Irreġistrajt vidjo ta’ sitt minuti li fih inħares lejn l-installazzjoni tal-modulu cpapi u karatteristiċi tat-tħaddim ta' skripts Python fuq is-server tal-kontroll. Bħala eżempju, titħaddem skript li awtomatizza l-konfigurazzjoni ta' portal ġdid għal biċċa xogħol bħall-awditjar tan-netwerk Kontroll tas-Sigurtà. Fost il-karatteristiċi li kelli nittratta magħhom: il-funzjoni għadha ma dehritx f'Python 2.7 input, għalhekk biex tipproċessa l-informazzjoni li l-utent idaħħal, tintuża funzjoni raw_input. Inkella, il-kodiċi huwa l-istess bħal għat-tnedija minn magni oħra, biss huwa aktar konvenjenti li tuża l-funzjoni login_as_root, sabiex ma terġax tispeċifika l-isem tal-utent, il-password u l-indirizz IP tiegħek tas-server tal-ġestjoni.
Skript għal setup ta' malajr ta' Security CheckUp
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()
Fajl ta' eżempju b'dizzjunarju password addizzjonali_pass.conf {
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","пароль","Пароль","Ключ","ключ","шифр","Шифр"]
}
Konklużjoni
Dan l-artikolu jeżamina biss il-possibbiltajiet bażiċi tax-xogħol Python SDK u modulu cpapi(kif tista' tkun qtajt, dawn huma fil-fatt sinonimi), u billi tistudja l-kodiċi f'dan il-modulu inti ser tiskopri saħansitra aktar opportunitajiet biex taħdem miegħu. Huwa possibbli li tkun trid tissupplimentaha bil-klassijiet, funzjonijiet, metodi u varjabbli tiegħek stess. Dejjem tista' taqsam ix-xogħol tiegħek u tara skripts oħra għal Check Point fit-taqsima CodeHub fil-komunità CheckMates, li tiġbor flimkien kemm l-iżviluppaturi tal-prodotti kif ukoll l-utenti.
Kodifikazzjoni kuntenta u grazzi tal-qari sal-aħħar!