Check Point Management API (kasalukuyang bersyon 1.6) - makipagtulungan sa server ng pamamahala sa pamamagitan ng API (at ang kakayahang magsagawa ng mga script sa mga gateway na kinokontrol ng server ng pamamahala)
Kasalukuyang sinusuportahan lamang ng Python SDK ang pakikipag-ugnayan sa Management API at Gaia API. Tatalakayin natin ang pinakamahahalagang klase, pamamaraan at variable sa modyul na ito.
Pag-install ng module
Modyul cpapi na-install nang mabilis at madali mula sa Check Point opisyal na imbakan sa github sa tulong tuldukan. Ang mga detalyadong tagubilin sa pag-install ay nasa README.md. Ang modyul na ito ay iniangkop upang gumana sa mga bersyon ng Python 2.7 at 3.7. Sa artikulong ito, ibibigay ang mga halimbawa gamit ang Python 3.7. Gayunpaman, ang Python SDK ay maaaring direktang patakbuhin mula sa Check Point management server (Smart Management), ngunit sinusuportahan lamang nila ang Python 2.7, kaya ang code para sa bersyon 2.7 ay ibibigay sa huling seksyon. Kaagad pagkatapos i-install ang module, inirerekomenda kong tingnan ang mga halimbawa sa mga direktoryo examples_python2 ΠΈ examples_python3.
Pagsisimula
Upang magawa natin ang mga bahagi ng module ng cpapi, kinakailangan na mag-import mula sa module cpapi hindi bababa sa dalawang kinakailangang klase:
APIClient ΠΈ APIClientArgs
from cpapi import APIClient, APIClientArgs
klase APIClientArgs ay responsable para sa mga parameter ng koneksyon sa API server, at ang klase APIClient responsable para sa pakikipag-ugnayan sa API.
Pagtukoy ng mga parameter ng koneksyon
Upang tukuyin ang iba't ibang mga parameter para sa pagkonekta sa API, kailangan mong lumikha ng isang instance ng klase APIClientArgs. Sa prinsipyo, ang mga parameter nito ay paunang natukoy, at kapag pinapatakbo ang script sa control server, maaari silang alisin.
client_args = APIClientArgs()
Ngunit kapag tumatakbo sa isang third-party na host, dapat mong tukuyin ang hindi bababa sa IP address o pangalan ng host ng API server (aka ang server ng pamamahala). Sa halimbawa sa ibaba, tinukoy namin ang server ng parameter ng koneksyon at itinalaga ito bilang isang string ang IP address ng server ng pamamahala.
Tingnan natin ang lahat ng mga parameter at ang kanilang mga default na halaga na maaaring magamit kapag kumokonekta sa API server:
Mga argumento para sa __init__ na pamamaraan ng klase ng APIClientArgs
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
Naniniwala ako na ang mga argumento na maaaring magamit sa mga pagkakataon ng klase ng APIClientArgs ay madaling maunawaan para sa mga administrator ng Check Point at hindi nangangailangan ng mga karagdagang komento.
Kumokonekta sa pamamagitan ng APIClient at Context Manager
klase APIClient ito ay pinaka-maginhawang gamitin sa pamamagitan ng context manager. Ang kailangan lang ipasa sa isang instance ng klase ng APIClient ay ang mga parameter ng koneksyon na tinukoy sa huling hakbang.
with APIClient(client_args) as client:
Ang tagapamahala ng konteksto ay hindi awtomatikong gagawa ng isang tawag sa pag-login sa API server, ngunit ito ay gagawa ng isang logout na tawag kapag lumabas dito. Kung sa ilang kadahilanan ay hindi mo kailangang mag-logout kapag natapos mo nang magtrabaho sa mga tawag sa API, kailangan mong magsimulang magtrabaho nang hindi gumagamit ng context manager:
client = APIClient(clieng_args)
Pagsubok sa koneksyon
Ito ay pinakamadaling suriin kung ang koneksyon ay pumasa ayon sa tinukoy na mga parameter gamit ang pamamaraan check_fingerprint. Kung nabigo ang pag-verify ng sha1 hash sum para sa fingerprint ng server API certificate (ibinalik ang pamamaraan Huwad), kung gayon ito ay karaniwang sanhi ng mga problema sa koneksyon at maaari naming ihinto ang programa mula sa pagtakbo (o bigyan ang user ng pagkakataon na iwasto ang data para sa koneksyon):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
Mangyaring tandaan na sa hinaharap ang klase APIClient susuriin ang bawat tawag sa API (methods api_call ΠΈ api_query, pag-uusapan natin ang mga ito nang kaunti pa) sha1 fingerprint ng certificate sa API server. Ngunit kung may nakitang error kapag sinusuri ang sha1 fingerprint ng server API certificate (ang certificate ay hindi kilala o binago), ang pamamaraan check_fingerprint ay magbibigay ng pagkakataong magdagdag / magbago ng impormasyon tungkol dito sa lokal na makina sa awtomatikong mode. Ang pagsusuring ito ay maaaring ganap na hindi paganahin (ngunit maaari lamang itong irekomenda kung ang mga script ay pinapatakbo sa API server mismo, kapag kumokonekta sa 127.0.0.1), gamit ang APIClientArgs argument - unsafe_auto_accept (Tumingin ng higit pa tungkol sa APIClientArgs mas maaga sa "Pagtukoy ng Mga Parameter ng Koneksyon").
Π£ APIClient mayroong kasing dami ng 3 paraan ng pag-log in sa API server, at bawat isa sa kanila ay naaalala ang halaga Sid(session-id), na awtomatikong ginagamit sa bawat kasunod na API call sa header (ang pangalan sa header ng parameter na ito ay X-chkp-sid), kaya hindi na kailangang iproseso pa ang parameter na ito.
paraan ng pag-login
Pagpipilian gamit ang pag-login at password (sa halimbawa, ang username admin at password 1q2w3e ay ipinasa bilang mga positional na argumento):
login = client.login('admin', '1q2w3e')
Available din ang mga karagdagang opsyonal na parameter sa paraan ng pag-login, narito ang kanilang mga pangalan at default na halaga:
Opsyon gamit ang isang api key (sinusuportahan mula noong bersyon ng pamamahala na R80.40/Management API v1.6, "3TsbPJ8ZKjaJGvFyoFqHFA=" ito ang halaga ng API key para sa isa sa mga user sa management server gamit ang API key authorization method):
Sa pamamaraan login_with_api_key ang parehong mga opsyonal na parameter ay magagamit tulad ng sa pamamaraan login.
login_as_root method
Pagpipilian upang mag-login sa isang lokal na makina na may API server:
login = client.login_as_root()
Dalawang opsyonal na parameter lamang ang magagamit para sa pamamaraang ito:
domain=None, payload=None
At sa wakas, tinawag ng API ang kanilang sarili
Mayroon kaming dalawang opsyon para sa paggawa ng mga tawag sa API sa pamamagitan ng mga pamamaraan api_call ΠΈ api_query. Tingnan natin kung ano ang pagkakaiba sa pagitan nila.
api_call
Ang pamamaraang ito ay naaangkop sa anumang mga tawag. Kailangan nating ipasa ang huling bahagi para sa api call at payload sa request body kung kinakailangan. Kung walang laman ang payload, hindi ito mailipat sa lahat:
Magsasagawa ako kaagad ng reserbasyon na ang paraang ito ay naaangkop lamang para sa mga tawag na ang output ay nagpapahiwatig ng isang offset (shift). Ang ganitong konklusyon ay nangyayari kapag naglalaman ito o maaaring naglalaman ng malaking halaga ng impormasyon. Halimbawa, maaaring ito ay isang kahilingan para sa isang listahan ng lahat ng nilikhang object ng uri ng host sa server ng pamamahala. Para sa mga naturang kahilingan, ang API ay nagbabalik ng isang listahan ng 50 mga bagay bilang default (maaari mong taasan ang limitasyon sa 500 mga bagay sa tugon). At upang hindi makuha ang impormasyon nang maraming beses, binabago ang offset na parameter sa kahilingan ng API, mayroong isang api_query na paraan na awtomatikong ginagawa ito. Mga halimbawa ng mga tawag kung saan kailangan ang paraang ito: mga show-session, show-host, show-network, show-wildcard, show-group, show-address-range, show-simple-gateway, show-simple-cluster, show-access-role, show-trusted-clients, ipakita ang mga pakete. Sa katunayan, sa pangalan ng mga API na tawag na ito, nakikita namin ang mga salita sa maramihan, kaya ang mga tawag na ito ay magiging mas madaling iproseso sa pamamagitan ng api_query
show_hosts = client.api_query('show-hosts')
Ang output para sa kahilingang ito sa ilalim ng cut:
Pagkatapos nito, maaari mong gamitin ang mga variable at pamamaraan ng klase APIResponse(kapwa sa loob ng tagapamahala ng konteksto at sa labas). Sa klase APIResponse 4 na mga pamamaraan at 5 mga variable ang paunang natukoy, tatalakayin natin ang pinakamahalagang mga bagay nang mas detalyado.
tagumpay
Upang magsimula, mainam na tiyaking matagumpay ang tawag sa API at nagbalik ng resulta. May paraan para dito tagumpay:
In [49]: api_versions.success
Out[49]: True
Nagbabalik ng True kung ang API call ay matagumpay (response code - 200) at False kung hindi matagumpay (anumang ibang response code). Maginhawang gamitin kaagad pagkatapos ng tawag sa API upang magpakita ng iba't ibang impormasyon depende sa code ng pagtugon.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message)
code ng katayuan
Ibinabalik ang response code pagkatapos maisagawa ang isang API call.
In [62]: api_versions.status_code
Out[62]: 400
Mga posibleng sagot na code: 200,400,401,403,404,409,500,501.
set_success_status
Sa kasong ito, maaaring kailanganin na baguhin ang halaga ng katayuan ng tagumpay. Sa teknikal, maaari kang maglagay ng kahit ano doon, kahit isang regular na string. Ngunit ang isang tunay na halimbawa ay ang pag-reset ng ibinigay na parameter sa False sa ilalim ng ilang partikular na kasamang kundisyon. Sa ibaba, bigyang pansin ang halimbawa kapag may mga gawain na tumatakbo sa server ng pamamahala, ngunit ituturing naming hindi matagumpay ang kahilingang ito (itatakda namin ang variable ng tagumpay sa Huwad, kahit na matagumpay ang tawag sa API at nagbalik ng 200 code).
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
break
tugon()
Binibigyang-daan ka ng paraan ng pagtugon na tingnan ang diksyunaryo na may response code (status_code) at ang response body (body).
Available lang ang impormasyong ito kapag may naganap na error habang pinoproseso ang kahilingan sa API (response code hindi 200). Halimbawa ng output
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
Mga kapaki-pakinabang na halimbawa
Ang mga sumusunod ay mga halimbawa na gumagamit ng mga tawag sa API na idinagdag sa 1.6 na bersyon ng Management API.
Una, tingnan natin kung paano gumagana ang mga tawag. add-host ΠΈ add-address-range. Ipagpalagay na kailangan nating likhain ang lahat ng ip address ng subnet 192.168.0.0/24 bilang mga object ng uri ng host, ang huling octet ay 5, at isulat ang lahat ng natitirang ip address bilang mga object ng uri ng hanay ng address. Sa kasong ito, ibukod ang subnet address at ang broadcast address.
Kaya, nasa ibaba ang isang script na lumulutas sa problemang ito at lumilikha ng 50 object ng host type at 51 object ng address range type. Ang mga 101 API na tawag ay kinakailangan upang malutas ang problema (hindi binibilang ang huling publish na tawag). Gayundin, gamit ang timeit module, kinakalkula namin ang oras upang maisagawa ang script hanggang sa mai-publish ang mga pagbabago.
Script gamit ang add-host at 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')
Sa aking kapaligiran sa lab, ang script na ito ay tumatagal sa pagitan ng 30 at 50 segundo upang makumpleto, depende sa pag-load sa server ng pamamahala.
At ngayon tingnan natin kung paano lutasin ang parehong problema gamit ang API call add-objects-batch, suporta kung saan idinagdag sa bersyon 1.6 ng API. Binibigyang-daan ka ng tawag na ito na lumikha ng maraming bagay nang sabay-sabay sa isang kahilingan sa API. Bukod dito, ang mga ito ay maaaring mga bagay na may iba't ibang uri (halimbawa, mga host, subnet at hanay ng address). Kaya, ang aming gawain ay maaaring malutas sa loob ng isang tawag sa API.
Script gamit ang 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')
At sa aking kapaligiran sa lab, ang script na ito ay tumatagal mula 3 hanggang 7 segundo upang maisagawa, depende sa pag-load sa server ng pamamahala. Iyon ay, sa karaniwan, sa 101 API object, ang isang tawag ng batch type ay 10 beses na mas mabilis. Sa higit pang mga bagay, ang pagkakaiba ay magiging mas kahanga-hanga.
Ngayon tingnan natin kung paano magtrabaho set-objects-batch. Sa API call na ito, maaari naming bultuhang baguhin ang anumang parameter. Itakda natin ang unang kalahati ng mga address mula sa nakaraang halimbawa (hanggang sa .124 na mga host, at ang mga hanay din) upang maging sienna, at ang pangalawang kalahati ng mga address ay khaki.
Pagbabago ng kulay ng mga bagay na nilikha sa nakaraang halimbawa
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")
Maaari kang magtanggal ng maraming bagay sa isang API na tawag gamit delete-objects-batch. At ngayon, tingnan natin ang isang halimbawa ng code na nag-aalis sa lahat ng mga host na ginawa nang mas maaga add-objects-batch.
Pagtanggal ng mga bagay na may 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)
Lahat ng feature na lumalabas sa mga bagong release ng Check Point software ay agad na nakakakuha ng mga API call. Kaya, sa R80.40, lumitaw ang mga "feature" tulad ng Revert to revision at Smart Task, at ang mga katumbas na API call ay inihanda kaagad para sa kanila. Bukod dito, lahat ng functionality kapag lumipat mula sa Legacy consoles patungo sa Unified Policy mode ay nakakakuha din ng suporta sa API. Halimbawa, ang pinakahihintay na update sa bersyon ng software na R80.40 ay ang paglipat ng HTTPS Inspection policy mula sa Legacy mode patungo sa Unified Policy mode, at ang functionality na ito ay nakatanggap kaagad ng mga API call. Narito ang isang halimbawa ng code na nagdaragdag ng panuntunan sa pinakamataas na posisyon ng patakaran sa Pag-inspeksyon ng HTTPS na nagbubukod ng 3 kategorya mula sa inspeksyon (Health, Finance, Public Services), na ipinagbabawal sa inspeksyon alinsunod sa mga batas sa ilang bansa.
Magdagdag ng Panuntunan sa Patakaran sa Pag-inspeksyon ng HTTPS
Pagpapatakbo ng Python Scripts sa Check Point Management Server
Lahat sa parehong README.md naglalaman ng impormasyon kung paano direktang magpatakbo ng mga script ng Python mula sa server ng pamamahala. Maaari itong maging madaling gamitin kapag hindi ka makakonekta sa API server mula sa isa pang makina. Nag-record ako ng anim na minutong video kung saan isinasaalang-alang ko ang pag-install ng module cpapi at mga tampok ng pagpapatakbo ng mga script ng Python sa control server. Bilang halimbawa, pinapatakbo ang isang script na nag-automate sa pagsasaayos ng isang bagong gateway para sa isang gawain tulad ng pag-audit sa isang network Security CheckUp. Sa mga tampok na kailangan kong harapin: sa bersyon ng Python 2.7, ang function ay hindi pa lumitaw input, kaya para maproseso ang impormasyong ipinasok ng user, ginagamit ang function raw input. Kung hindi man, ang code ay kapareho ng para sa pagtakbo mula sa iba pang mga makina, tanging ito ay mas maginhawang gamitin ang function login_as_root, upang hindi matukoy muli ang iyong sariling username, password at IP address ng server ng pamamahala.
Script para sa mabilis na configuration ng 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()
Isang halimbawa ng file na may diksyonaryo ng password additional_pass.conf {
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","ΠΏΠ°ΡΠΎΠ»Ρ","ΠΠ°ΡΠΎΠ»Ρ","ΠΠ»ΡΡ","ΠΊΠ»ΡΡ","ΡΠΈΡΡ","Π¨ΠΈΡΡ"]
}
Konklusyon
Ang artikulong ito ay sumasaklaw lamang sa mga pangunahing tampok ng trabaho Python SDK at modyul cpapi(tulad ng maaari mong hulaan, ang mga ito ay talagang kasingkahulugan), at sa pamamagitan ng pag-aaral ng code sa modyul na ito, matutuklasan mo ang higit pang mga posibilidad para sa paggamit nito. Posible na magkakaroon ka ng pagnanais na dagdagan ito ng iyong sariling mga klase, function, pamamaraan at variable. Maaari mong ibahagi ang iyong trabaho anumang oras at tingnan ang iba pang mga script para sa Check Point sa seksyon codehub sa komunidad CheckMates, na pinagsasama ang parehong mga developer ng produkto at mga user.
Happy coding at salamat sa pagbabasa hanggang dulo!