Check Point API:n yksinkertaistaminen Python SDK:lla
API-vuorovaikutuksen täysi teho paljastuu, kun sitä käytetään yhdessä ohjelmakoodin kanssa, kun on mahdollista luoda dynaamisesti API-pyyntöjä ja työkaluja API-vastausten analysointiin. Se on kuitenkin edelleen huomaamaton Python Software Development Kit (jäljempänä Python SDK) varten Check Point Management API, mutta turhaan. Se yksinkertaistaa merkittävästi kehittäjien ja automaatioharrastajien elämää. Python on saavuttanut valtavan suosion viime aikoina ja päätin täyttää aukon ja käydä läpi tärkeimmät ominaisuudet. Check Point API Python Development Kit. Tämä artikkeli toimii erinomaisena lisäyksenä toiseen Habré-artikkeliin Check Point R80.10 API. Hallinta CLI:n, komentosarjojen ja muiden kautta. Tarkastellaan skriptien kirjoittamista Python SDK:n avulla ja tarkastellaan lähemmin uutta Management API -toimintoa versiossa 1.6 (tuettu R80.40:stä alkaen). Ymmärtääksesi artikkelin tarvitset perustiedot sovellusliittymien ja Pythonin kanssa työskentelystä.
Check Point kehittää aktiivisesti API:ta ja tällä hetkellä on julkaistu seuraavat:
Python SDK tukee tällä hetkellä vain vuorovaikutusta Management API:n ja Gaia API. Tässä moduulissa tarkastellaan tärkeimpiä luokkia, menetelmiä ja muuttujia.
Moduulin asennus
Moduuli cpapi asentaa nopeasti ja helposti osoitteesta virallinen Check Point -tietovarasto githubissa kautta pIP. Tarkemmat asennusohjeet löytyvät osoitteesta README.md. Tämä moduuli on mukautettu toimimaan Python-versioiden 2.7 ja 3.7 kanssa. Tässä artikkelissa annetaan esimerkkejä Python 3.7:n avulla. Python SDK:ta voidaan kuitenkin ajaa suoraan Check Point Management Serveristä (Smart Management), mutta ne tukevat vain Python 2.7:ää, joten viimeinen osa sisältää koodin versiolle 2.7. Heti moduulin asennuksen jälkeen suosittelen katsomaan esimerkkejä hakemistoista examples_python2 и examples_python3.
Aloittaminen
Jotta voimme työskennellä cpapi-moduulin komponenttien kanssa, meidän on tuotava moduulista cpapi vähintään kaksi pakollista luokkaa:
APIClient и APIClientArgs
from cpapi import APIClient, APIClientArgs
Luokka APIClientArgs vastaa yhteysparametreista API-palvelimeen ja luokkaan APIClient on vastuussa vuorovaikutuksesta API:n kanssa.
Yhteysparametrien määrittäminen
Jotta voit määrittää erilaisia parametreja API-yhteyden muodostamista varten, sinun on luotava luokan esiintymä APIClientArgs. Periaatteessa sen parametrit ovat ennalta määritettyjä, eikä niitä tarvitse määrittää ajettaessa komentosarjaa ohjauspalvelimella.
client_args = APIClientArgs()
Mutta kun käytät kolmannen osapuolen isäntäkonetta, sinun on määritettävä ainakin API-palvelimen (tunnetaan myös hallintapalvelimena) IP-osoite tai isäntänimi. Alla olevassa esimerkissä määritämme palvelinyhteysparametrin ja annamme sille hallintapalvelimen IP-osoitteen merkkijonona.
Katsotaanpa kaikkia parametreja ja niiden oletusarvoja, joita voidaan käyttää muodostettaessa yhteyttä API-palvelimeen:
APIClientArgs-luokan __init__-metodin argumentit
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
Uskon, että argumentit, joita voidaan käyttää APIClientArgs-luokan tapauksissa, ovat intuitiivisia Check Pointin järjestelmänvalvojille eivätkä vaadi lisäkommentteja.
Yhteyden muodostaminen APIClientin ja kontekstinhallinnan kautta
Luokka APIClient Kätevin tapa käyttää sitä on kontekstinhallinnan kautta. APIClient-luokan ilmentymälle tarvitsee välittää vain edellisessä vaiheessa määritetyt yhteysparametrit.
with APIClient(client_args) as client:
Kontekstinhallinta ei soita automaattisesti sisäänkirjautumispuhelua API-palvelimelle, mutta se tekee uloskirjautumiskutsun poistuessaan siitä. Jos jostain syystä uloskirjautumista ei tarvita API-kutsujen työskentelyn jälkeen, sinun on aloitettava työskentely ilman kontekstinhallintaa:
client = APIClient(clieng_args)
Tarkistaa yhteyttä
Helpoin tapa tarkistaa, täyttääkö yhteys määritetyt parametrit, on käyttää menetelmää tarkista_sormenjälki. Jos palvelimen API-varmenteen sormenjäljen sha1-hajasumman vahvistus epäonnistuu (palautti menetelmän Väärä), tämä johtuu yleensä yhteysongelmista ja voimme pysäyttää ohjelman suorittamisen (tai antaa käyttäjälle mahdollisuuden korjata yhteystiedot):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
Huomaa, että tulevaisuudessa luokka APIClient tarkistaa jokaisen API-kutsun (menetelmät api_call и api_query, puhumme niistä hieman pidemmälle) sha1-sormenjälkisertifikaatti API-palvelimella. Mutta jos API-palvelimen varmenteen sha1-sormenjälkeä tarkistettaessa havaitaan virhe (varmenne on tuntematon tai sitä on muutettu), menetelmä tarkista_sormenjälki tarjoaa mahdollisuuden lisätä/muuttaa sitä koskevia tietoja automaattisesti paikallisella koneella. Tämä tarkistus voidaan poistaa kokonaan käytöstä (mutta tätä voidaan suositella vain, jos komentosarjat suoritetaan itse API-palvelimella, kun muodostetaan yhteys 127.0.0.1:een), käyttämällä APIClientArgs-argumenttia - unsafe_auto_accept (katso lisää APIClientArgsista aiemmin kohdassa "Yhteysparametrien määrittäminen").
У APIClient API-palvelimelle kirjautumiseen on jopa kolme tapaa, ja jokainen niistä ymmärtää merkityksen sid(session-id), jota käytetään automaattisesti jokaisessa myöhemmässä API-kutsussa otsikossa (tämän parametrin otsikossa oleva nimi on X-chkp-sid), joten tätä parametria ei tarvitse käsitellä enempää.
kirjautumismenetelmä
Vaihtoehto kirjautumistunnuksella ja salasanalla (esimerkissä käyttäjätunnus admin ja salasana 1q2w3e välitetään sijaintiargumentteina):
login = client.login('admin', '1q2w3e')
Muut valinnaiset parametrit ovat myös saatavilla kirjautumistavassa; tässä ovat niiden nimet ja oletusarvot:
Vaihtoehto api-avaimella (tuettu hallintaversiosta R80.40/Management API v1.6 alkaen, "3TsbPJ8ZKjaJGvFyoFqHFA==" tämä on API-avaimen arvo yhdelle käyttäjälle hallintapalvelimella, jolla on API-avaimen valtuutusmenetelmä):
Menetelmässä login_with_api_key samat valinnaiset parametrit ovat saatavilla kuin menetelmässä Kirjaudu sisään.
login_as_root-menetelmä
Mahdollisuus kirjautua sisään paikalliseen koneeseen API-palvelimella:
login = client.login_as_root()
Tälle menetelmälle on käytettävissä vain kaksi valinnaista parametria:
domain=None, payload=None
Ja lopuksi API kutsuu itseään
Meillä on kaksi vaihtoehtoa tehdä API-kutsuja menetelmien kautta api_call и api_query. Selvitetään, mikä ero niillä on.
api_call
Tämä menetelmä soveltuu kaikkiin puheluihin. Meidän on tarvittaessa välitettävä api-kutsun ja hyötykuorman viimeinen osa pyynnön rungossa. Jos hyötykuorma on tyhjä, sitä ei voi lähettää ollenkaan:
Haluan tehdä varauksen heti, että tämä menetelmä soveltuu vain puheluille, joiden lähtö sisältää offsetin. Tällainen päätelmä syntyy, kun se sisältää tai voi sisältää suuren määrän tietoa. Tämä voi esimerkiksi olla pyyntö saada luettelo kaikista hallintapalvelimella luoduista isäntäobjekteista. Tällaisille pyynnöille API palauttaa oletusarvoisesti 50 objektin luettelon (voit nostaa rajan 500 objektiin vastauksessa). Ja jotta tietoja ei vedetä useita kertoja muuttamalla API-pyynnön offset-parametria, on api_query-menetelmä, joka toimii automaattisesti. Esimerkkejä puheluista, joissa tätä menetelmää tarvitaan: show-istunnot, show-isännät, show-verkostot, show-jokerimerkit, show-ryhmät, näytä-osoitealueet, show-simple-yhdyskäytävät, näytä-yksinkertaiset-klusterit, näytä-käyttöroolit, näytä-luotetut asiakkaat, show-paketit. Itse asiassa näemme näiden API-kutsujen nimissä monikkosanoja, joten nämä kutsut on helpompi käsitellä api_query
Tämän jälkeen voit käyttää luokan muuttujia ja menetelmiä APIResponse(sekä kontekstinhallinnan sisällä että sen ulkopuolella). Luokassa APIResponse 4 menetelmää ja 5 muuttujaa on ennalta määritetty, joista tärkeimpiä käsitellään tarkemmin.
menestys
Aluksi olisi hyvä varmistaa, että API-kutsu onnistui ja palautti tuloksen. Tähän on olemassa menetelmä menestys:
In [49]: api_versions.success
Out[49]: True
Palauttaa True, jos API-kutsu onnistui (vastauskoodi - 200), ja False, jos se ei onnistunut (mikä tahansa muu vastauskoodi). Sitä on kätevä käyttää heti API-kutsun jälkeen erilaisten tietojen näyttämiseen vastauskoodista riippuen.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message)
tilakoodi
Palauttaa vastauskoodin API-kutsun jälkeen.
In [62]: api_versions.status_code
Out[62]: 400
Mahdolliset vastauskoodit: 200,400,401,403,404,409,500,501.
set_success_status
Tässä tapauksessa onnistumistilan arvoa voi olla tarpeen muuttaa. Teknisesti voit laittaa sinne mitä tahansa, jopa tavallisen merkkijonon. Mutta todellinen esimerkki olisi tämän parametrin palauttaminen arvoon False tietyissä liitännäisolosuhteissa. Kiinnitä huomiota alla olevaan esimerkkiin, kun hallintapalvelimella on tehtäviä käynnissä, mutta pidämme tätä pyyntöä epäonnistuneena (asetamme menestysmuuttujaksi Väärä, huolimatta siitä, että API-kutsu onnistui ja palautti koodin 200).
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
break
vastaus()
Vastausmenetelmän avulla voit tarkastella sanakirjaa vastauskoodilla (status_code) ja vastauksen rungolla (body).
Nämä tiedot ovat saatavilla vain, kun API-pyyntöä käsiteltäessä tapahtui virhe (vastauskoodi ei 200). Esimerkkituloste
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
Hyödyllisiä esimerkkejä
Seuraavat ovat esimerkkejä, jotka käyttävät API-kutsuja, jotka on lisätty Management API 1.6:een.
Katsotaanpa ensin, miten puhelut toimivat add-isäntä и lisää-osoite-alue. Oletetaan, että meidän on luotava kaikki aliverkon 192.168.0.0/24 IP-osoitteet, joiden viimeinen oktetti on 5, isäntätyypin objekteiksi ja kirjoitettava kaikki muut IP-osoitteet osoitealueen tyypin objekteiksi. Jätä tässä tapauksessa pois aliverkon osoite ja lähetysosoite.
Alla on siis komentosarja, joka ratkaisee tämän ongelman ja luo 50 isäntätyyppistä ja 51 osoitealueen tyyppistä objektia. Ongelman ratkaisemiseksi tarvitaan 101 API-kutsua (lukuun ottamatta lopullista julkaisukutsua). Timeit-moduulin avulla laskemme myös ajan, joka kuluu skriptin suorittamiseen ennen kuin muutokset julkaistaan.
Komentosarja käyttämällä add-host ja 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')
Lab-ympäristössäni tämän skriptin suorittaminen kestää 30–50 sekuntia hallintapalvelimen kuormituksesta riippuen.
Katsotaan nyt kuinka ratkaista sama ongelma API-kutsulla add-objects-batch, jonka tuki lisättiin API-versioon 1.6. Tämän kutsun avulla voit luoda useita objekteja kerralla yhdessä API-pyynnössä. Lisäksi nämä voivat olla erityyppisiä objekteja (esimerkiksi isäntiä, aliverkkoja ja osoitealueita). Siten tehtävämme voidaan ratkaista yhden API-kutsun puitteissa.
Komentosarja käyttämällä add-objects-batch
import timeit
from cpapi import APIClient, APIClientArgs
start = timeit.default_timer()
client_args = APIClientArgs(server="192.168.47.240")
objects_list_ip = []
objects_list_range = []
for ip in range(5,255,5):
data = {"name": f'h_192.168.0.{ip}', "ip-address": f'192.168.0.{ip}'}
objects_list_ip.append(data)
first_ip = 1
last_ip = 4
while last_ip < 255:
data = {"name": f"r_192.168.0.{first_ip}-{last_ip}", "ip-address-first": f"192.168.0.{first_ip}", "ip-address-last": f"192.168.0.{last_ip}"}
objects_list_range.append(data)
first_ip+=5
last_ip+=5
data_for_batch = {
"objects" : [ {
"type" : "host",
"list" : objects_list_ip
}, {
"type" : "address-range",
"list" : objects_list_range
}]
}
with APIClient(client_args) as client:
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
add_objects_batch = client.api_call("add-objects-batch", data_for_batch)
stop = timeit.default_timer()
publish = client.api_call("publish")
print(f'Time to execute batch request: {stop - start} seconds')
Ja tämän komentosarjan suorittaminen laboratorioympäristössäni kestää 3–7 sekuntia hallintapalvelimen kuormituksesta riippuen. Eli keskimäärin 101 API-objektissa erätyyppinen kutsu suoritetaan 10 kertaa nopeammin. Suuremmalla määrällä kohteita ero on vieläkin vaikuttavampi.
Katsotaan nyt kuinka työskennellä set-objects-batch. Tämän API-kutsun avulla voimme joukkomuuttaa mitä tahansa parametria. Asetetaan edellisen esimerkin osoitteiden ensimmäinen puolisko (jopa 124 isäntä ja myös alueet) Sienna-väriksi ja määritetään khaki-väri osoitteiden toiselle puoliskolle.
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")
Voit poistaa useita objekteja yhdessä API-kutsussa käyttämällä delete-objects-batch. Katsotaanpa nyt koodiesimerkkiä, joka poistaa kaikki aiemmin luodut isännät add-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)
Kaikki Check Point -ohjelmiston uusissa julkaisuissa näkyvät toiminnot saavat välittömästi API-kutsuja. Siten R80.40:ssä ilmestyi sellaiset "ominaisuudet" kuin Revert to revision ja Smart Task, ja niitä varten valmisteltiin välittömästi vastaavat API-kutsut. Lisäksi kaikki toiminnot siirtyessä vanhoista konsoleista Unified Policy -tilaan saavat myös API-tuen. Esimerkiksi ohjelmistoversion R80.40 kauan odotettu päivitys oli HTTPS-tarkastuskäytännön siirtäminen Legacy-tilasta Unified Policy -tilaan, ja tämä toiminto sai välittömästi API-kutsuja. Tässä on esimerkki koodista, joka lisää HTTPS-tarkastuskäytännön ylimpään kohtaan säännön, joka sulkee tarkastuksen ulkopuolelle kolme luokkaa (terveys, talous, hallintopalvelut), joiden tarkastaminen on kielletty useissa maissa lain mukaan.
Kaikki on samaa README.md sisältää tietoja Python-komentosarjojen suorittamisesta suoraan ohjauspalvelimelta. Tämä voi olla kätevää, kun et pysty muodostamaan yhteyttä API-palvelimeen toisesta koneesta. Kuvasin kuuden minuutin videon, jossa katson moduulin asennusta cpapi ja Python-komentosarjojen suorittamisen ominaisuudet ohjauspalvelimella. Esimerkkinä suoritetaan komentosarja, joka automatisoi uuden yhdyskäytävän konfiguroinnin tehtävää, kuten verkon valvontaa varten. Turvatarkistus. Ominaisuuksista, joita jouduin käsittelemään: toimintoa ei ole vielä ilmestynyt Python 2.7: ssä panos, joten käyttäjän syöttämien tietojen käsittelemiseen käytetään toimintoa raaka_syöttö. Muuten koodi on sama kuin muista koneista käynnistettäessä, vain toimintoa on kätevämpi käyttää login_as_root, jotta et määritä enää omaa käyttäjätunnustasi, salasanaasi ja hallintapalvelimen IP-osoitettasi.
Komentosarja suojaustarkistuksen nopeaa käyttöönottoa varten
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()
Esimerkkitiedosto, jossa on salasanasanakirja Additional_pass.conf {
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","пароль","Пароль","Ключ","ключ","шифр","Шифр"]
}
Johtopäätös
Tässä artikkelissa tarkastellaan vain työn perusmahdollisuuksia Python SDK ja moduuli cpapi(kuten olet ehkä arvannut, nämä ovat itse asiassa synonyymejä), ja tutkimalla tämän moduulin koodia löydät vielä enemmän mahdollisuuksia työskennellä sen kanssa. On mahdollista, että haluat täydentää sitä omilla luokillasi, funktioillasi, menetelmilläsi ja muuttujillasi. Voit aina jakaa työsi ja tarkastella muita Check Pointin skriptejä osiossa CodeHub yhteisössä CheckMates, joka kokoaa yhteen sekä tuotekehittäjät että käyttäjät.