Senplifye API Check Point ak SDK Python

Senplifye API Check Point ak SDK PythonTout pouvwa a nan entèraksyon ak API yo revele lè yo itilize ansanm ak kòd pwogram, lè li vin posib dinamikman jenere demann API ak zouti pou analize repons API. Sepandan, li toujou rete inapèsi Twous Devlopman Lojisyèl Python (ki refere yo kòm Python SDK) pou Tcheke Point Management API, men pou gremesi. Li siyifikativman senplifye lavi devlopè ak amater automatisation. Python te genyen yon gwo popilarite dènyèman e mwen deside ranpli espas sa a epi revize karakteristik prensipal yo. Tcheke Point API Python Development Kit. Atik sa a sèvi kòm yon adisyon ekselan nan yon lòt atik sou Habré Tcheke Point R80.10 API. Jesyon atravè CLI, scripts ak plis ankò. Nou pral gade ki jan yo ekri scripts lè l sèvi avèk Python SDK epi pran yon gade pi pre nan nouvo fonksyonalite API Jesyon an nan vèsyon 1.6 (sipòte apati R80.40). Pou w konprann atik la, w ap bezwen konesans debaz nan travay ak API ak Python.

Check Point ap devlope aktivman API a epi nan moman sa a yo te pibliye sa ki annapre yo:

Python SDK kounye a sèlman sipòte entèraksyon ak API Jesyon ak Gaia API. Nou pral gade nan klas ki pi enpòtan yo, metòd ak varyab nan modil sa a.

Senplifye API Check Point ak SDK Python

Enstale modil la

Modil cpapi enstale byen vit ak fasil soti nan depo ofisyèl Check Point sou github avèk èd la pip. Enstriksyon detaye enstalasyon yo disponib nan README.md. Modil sa a adapte pou travay ak vèsyon Python 2.7 ak 3.7. Nan atik sa a, yo pral bay egzanp lè l sèvi avèk Python 3.7. Sepandan, Python SDK ka kouri dirèkteman nan Check Point Management Server (Jesyon entelijan), men yo sèlman sipòte Python 2.7, kidonk dènye seksyon an ap bay kòd pou vèsyon 2.7. Touswit apre enstale modil la, mwen rekòmande gade egzanp ki nan repèrtwar yo examples_python2 и examples_python3.

Pou kòmanse

Pou nou kapab travay ak konpozan modil cpapi a, nou bezwen enpòte soti nan modil la. cpapi omwen de klas obligatwa:

APIClient и APIClientArgs

from cpapi import APIClient, APIClientArgs

Gwoup APIClientArgs se responsab pou paramèt koneksyon ak sèvè API a, ak klas la APIClient responsab pou entèraksyon ak API a.

Detèmine paramèt koneksyon

Pou defini divès paramèt pou konekte ak API a, ou bezwen kreye yon egzanp nan klas la APIClientArgs. Nan prensip, paramèt li yo predefini epi lè w ap kouri script la sou sèvè kontwòl la, yo pa bezwen espesifye.

client_args = APIClientArgs()

Men, lè w ap kouri sou yon lame twazyèm pati, ou bezwen presize omwen adrès IP oswa non lame sèvè API a (li rele tou sèvè jesyon). Nan egzanp ki anba a, nou defini paramèt koneksyon sèvè a epi bay li adrès IP sèvè jesyon an kòm yon kòd.

client_args = APIClientArgs(server='192.168.47.241')

Ann gade tout paramèt yo ak valè default yo ki ka itilize lè w konekte ak sèvè API a:

Agiman metòd __init__ klas 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

Mwen kwè ke agiman yo ka itilize nan ka klas APIClientArgs yo entwisyon pou administratè Check Point yo epi yo pa mande kòmantè adisyonèl.

Konekte atravè APIClient ak manadjè kontèks

Gwoup APIClient Fason ki pi pratik pou itilize li se atravè manadjè kontèks la. Tout sa ki bezwen pase nan yon egzanp nan klas APIClient la se paramèt koneksyon ki te defini nan etap anvan an.

with APIClient(client_args) as client:

Manadjè kontèks la pa pral otomatikman fè yon apèl konekte nan sèvè API a, men li pral fè yon apèl dekonekte lè li soti nan li. Si pou kèk rezon dekonekte pa obligatwa apre w fin travay ak apèl API, ou bezwen kòmanse travay san w pa itilize manadjè kontèks la:

client = APIClient(clieng_args)

Tcheke koneksyon an

Fason ki pi fasil pou tcheke si koneksyon an satisfè paramèt espesifye yo se lè l sèvi avèk metòd la tcheke_anprent. Si verifikasyon sòm sha1 shaXNUMX pou anprent sètifika sèvè API a echwe (metòd la retounen Fo), Lè sa a, sa a anjeneral ki te koze pa pwoblèm koneksyon epi nou ka sispann ekzekisyon an nan pwogram nan (oswa bay itilizatè a opòtinite pou korije done yo koneksyon):

    if client.check_fingerprint() is False:
        print("Could not get the server's fingerprint - Check connectivity with the server.")
        exit(1)

Tanpri sonje ke nan tan kap vini klas la APIClient pral tcheke chak apèl API (metòd api_call и api_query, nou pral pale sou yo yon ti kras pi lwen) Sha1 sètifika anprent sou sèvè API a. Men, si, lè w tcheke anprent sha1 sètifika sèvè API a, yo detekte yon erè (sètifika a pa konnen oswa li chanje), metòd la. tcheke_anprent pral bay opòtinite pou ajoute/chanje enfòmasyon sou li sou machin lokal la otomatikman. Chèk sa a ka dezaktive konplètman (men sa a ka sèlman rekòmande si scripts yo kouri sou sèvè API a li menm, lè w konekte ak 127.0.0.1), lè l sèvi avèk agiman APIClientArgs - unsafe_auto_accept (gade plis sou APIClientArgs pi bonè nan "Defini paramèt koneksyon").

client_args = APIClientArgs(unsafe_auto_accept=True)

Konekte nan sèvè API

У APIClient gen 3 metòd pou antre nan sèvè API a, epi chak nan yo konprann siyifikasyon an Sid(sesyon-id), ki itilize otomatikman nan chak apèl API ki vin apre nan header la (non an nan header paramèt sa a se X-chkp-sid), kidonk pa gen okenn nesesite pou plis trete paramèt sa a.

metòd konekte

Opsyon lè l sèvi avèk login ak modpas (nan egzanp lan, admin non itilizatè a ak modpas 1q2w3e yo pase kòm agiman pozisyon):

     login = client.login('admin', '1q2w3e')  

Lòt paramèt opsyonèl disponib tou nan metòd login la yo se non yo ak valè default yo:

continue_last_session=False, domain=None, read_only=False, payload=None

Login_with_api_key metòd

Opsyon lè l sèvi avèk yon kle API (sipòte apati vèsyon jesyon R80.40/Management API v1.6, "3TsbPJ8ZKjaJGvFyoFqHFA==" sa a se valè kle API pou youn nan itilizatè yo sou sèvè jesyon an ak metòd otorizasyon kle API):

     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') 

Nan metòd login_with_api_key menm paramèt opsyonèl yo disponib tankou nan metòd la ouvri sesyon an.

metòd login_as_root

Opsyon pou konekte nan yon machin lokal ak yon sèvè API:

     login = client.login_as_root()

Gen sèlman de paramèt opsyonèl ki disponib pou metòd sa a:

domain=None, payload=None

Epi finalman API a rele tèt yo

Nou gen de opsyon pou fè apèl API atravè metòd api_call и api_query. Ann chèche konnen ki diferans ki genyen ant yo.

api_call

Metòd sa a aplikab pou nenpòt apèl. Nou bezwen pase dènye pati a pou apèl api ak chaj nan kò demann lan si sa nesesè. Si chaj la vid, li pa ka transmèt ditou:

api_versions = client.api_call('show-api-versions') 

Sòti pou demann sa a anba koupe a:

In [23]: api_versions                                                           
Out[23]: 
APIResponse({
    "data": {
        "current-version": "1.6",
        "supported-versions": [
            "1",
            "1.1",
            "1.2",
            "1.3",
            "1.4",
            "1.5",
            "1.6"
        ]
    },
    "res_obj": {
        "data": {
            "current-version": "1.6",
            "supported-versions": [
                "1",
                "1.1",
                "1.2",
                "1.3",
                "1.4",
                "1.5",
                "1.6"
            ]
        },
        "status_code": 200
    },
    "status_code": 200,
    "success": true
})
show_host = client.api_call('show-host', {'name' : 'h_8.8.8.8'})

Sòti pou demann sa a anba koupe a:

In [25]: show_host                                                              
Out[25]: 
APIResponse({
    "data": {
        "color": "black",
        "comments": "",
        "domain": {
            "domain-type": "domain",
            "name": "SMC User",
            "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
        },
        "groups": [],
        "icon": "Objects/host",
        "interfaces": [],
        "ipv4-address": "8.8.8.8",
        "meta-info": {
            "creation-time": {
                "iso-8601": "2020-05-01T21:49+0300",
                "posix": 1588358973517
            },
            "creator": "admin",
            "last-modifier": "admin",
            "last-modify-time": {
                "iso-8601": "2020-05-01T21:49+0300",
                "posix": 1588358973517
            },
            "lock": "unlocked",
            "validation-state": "ok"
        },
        "name": "h_8.8.8.8",
        "nat-settings": {
            "auto-rule": false
        },
        "read-only": false,
        "tags": [],
        "type": "host",
        "uid": "c210af07-1939-49d3-a351-953a9c471d9e"
    },
    "res_obj": {
        "data": {
            "color": "black",
            "comments": "",
            "domain": {
                "domain-type": "domain",
                "name": "SMC User",
                "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
            },
            "groups": [],
            "icon": "Objects/host",
            "interfaces": [],
            "ipv4-address": "8.8.8.8",
            "meta-info": {
                "creation-time": {
                    "iso-8601": "2020-05-01T21:49+0300",
                    "posix": 1588358973517
                },
                "creator": "admin",
                "last-modifier": "admin",
                "last-modify-time": {
                    "iso-8601": "2020-05-01T21:49+0300",
                    "posix": 1588358973517
                },
                "lock": "unlocked",
                "validation-state": "ok"
            },
            "name": "h_8.8.8.8",
            "nat-settings": {
                "auto-rule": false
            },
            "read-only": false,
            "tags": [],
            "type": "host",
            "uid": "c210af07-1939-49d3-a351-953a9c471d9e"
        },
        "status_code": 200
    },
    "status_code": 200,
    "success": true
})

api_query

Kite m 'fè yon rezèvasyon touswit ke metòd sa a aplikab sèlman pou apèl ki gen pwodiksyon enplike konpanse. Yon enferans konsa rive lè li genyen oswa ka genyen yon gwo kantite enfòmasyon. Pou egzanp, sa a ta ka yon demann pou yon lis tout objè lame kreye sou sèvè jesyon an. Pou demann sa yo, API a retounen yon lis 50 objè pa default (ou ka ogmante limit la a 500 objè nan repons lan). Ak nan lòd yo pa rale enfòmasyon plizyè fwa pa chanje paramèt la konpanse nan demann API a, gen yon metòd api_query ki fè travay sa a otomatikman. Men kèk egzanp apèl kote metòd sa a nesesè: montre-sesyon, montre-lame, montre-rezo, montre-wildcards, montre-gwoup, montre-adrès-ranje, montre-senp-gateways, montre-senp-grap, montre-aksè-wòl, montre-kliyan-konfye, montre-pake. An reyalite, nou wè mo pliryèl nan non apèl API sa yo, kidonk apèl sa yo pral pi fasil pou jere api_query

show_hosts = client.api_query('show-hosts') 

Sòti pou demann sa a anba koupe a:

In [21]: show_hosts                                                             
Out[21]: 
APIResponse({
    "data": [
        {
            "domain": {
                "domain-type": "domain",
                "name": "SMC User",
                "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
            },
            "ipv4-address": "192.168.47.1",
            "name": "h_192.168.47.1",
            "type": "host",
            "uid": "5d7d7086-d70b-4995-971a-0583b15a2bfc"
        },
        {
            "domain": {
                "domain-type": "domain",
                "name": "SMC User",
                "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
            },
            "ipv4-address": "8.8.8.8",
            "name": "h_8.8.8.8",
            "type": "host",
            "uid": "c210af07-1939-49d3-a351-953a9c471d9e"
        }
    ],
    "res_obj": {
        "data": {
            "from": 1,
            "objects": [
                {
                    "domain": {
                        "domain-type": "domain",
                        "name": "SMC User",
                        "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
                    },
                    "ipv4-address": "192.168.47.1",
                    "name": "h_192.168.47.1",
                    "type": "host",
                    "uid": "5d7d7086-d70b-4995-971a-0583b15a2bfc"
                },
                {
                    "domain": {
                        "domain-type": "domain",
                        "name": "SMC User",
                        "uid": "41e821a0-3720-11e3-aa6e-0800200c9fde"
                    },
                    "ipv4-address": "8.8.8.8",
                    "name": "h_8.8.8.8",
                    "type": "host",
                    "uid": "c210af07-1939-49d3-a351-953a9c471d9e"
                }
            ],
            "to": 2,
            "total": 2
        },
        "status_code": 200
    },
    "status_code": 200,
    "success": true
})

Pwosesis rezilta apèl API yo

Apre sa ou ka itilize varyab yo ak metòd nan klas la APIResponse(tou de andedan manadjè kontèks la ak deyò). Nan klas la APIResponse 4 metòd ak 5 varyab yo predefini nou pral rete sou sa yo ki pi enpòtan an plis detay.

Senplifye API Check Point ak SDK Python

siksè

Pou kòmanse, li ta yon bon lide asire w ke apèl API a te reyisi epi li te retounen yon rezilta. Gen yon metòd pou sa siksè:

In [49]: api_versions.success                                                   
Out[49]: True

Retounen Vrè si apèl API a te reyisi (kòd repons - 200) ak Fo si li pa reyisi (nenpòt lòt kòd repons). Li bon pou itilize imedyatman apre yon apèl API pou montre diferan enfòmasyon depann sou kòd repons lan.

if api_ver.success: 
    print(api_versions.data) 
else: 
    print(api_versions.err_message) 

estati code

Retounen kòd repons lan apre yo fin fè yon apèl API.

In [62]: api_versions.status_code                                               
Out[62]: 400

Kòd repons posib: 200,400,401,403,404,409,500,501.

set_success_status

Nan ka sa a, li ka nesesè pou chanje valè sitiyasyon siksè a. Teknikman, ou ka mete anyen la, menm yon fisèl regilye. Men, yon egzanp reyèl ta reset paramèt sa a nan fo nan sèten kondisyon akonpayman. Anba a, peye atansyon sou egzanp lan lè gen travay ki kouri sou sèvè jesyon an, men nou pral konsidere demann sa a san siksè (nou pral mete varyab siksè nan Fo, malgre lefèt ke apèl API a te reyisi epi li te retounen kòd 200).

for task in task_result.data["tasks"]:
    if task["status"] == "failed" or task["status"] == "partially succeeded":
        task_result.set_success_status(False)
        break

repons ()

Metòd repons lan pèmèt ou wè diksyonè a ak kòd repons lan (status_code) ak kò repons lan (kò).

In [94]: api_versions.response()                                                
Out[94]: 
{'status_code': 200,
 'data': {'current-version': '1.6',
  'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}}

done

Pèmèt ou wè sèlman kò repons lan (kò) san enfòmasyon ki pa nesesè.

In [93]: api_versions.data                                                      
Out[93]: 
{'current-version': '1.6',
 'supported-versions': ['1', '1.1', '1.2', '1.3', '1.4', '1.5', '1.6']}

mesaj_erè

Enfòmasyon sa a disponib sèlman lè yon erè te fèt pandan y ap trete demann API a (kòd repons pa gen okenn 200). Egzanp pwodiksyon

In [107]: api_versions.error_message                                            
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'

Egzanp itil

Sa ki anba la yo se egzanp ki itilize apèl API ki te ajoute nan API Jesyon 1.6.

Premyèman, ann gade ki jan apèl yo travay ajoute-lame и ajoute-adrès-ranje. Ann di nou bezwen kreye tout adrès IP nan sous-rezo 192.168.0.0/24, dènye octet nan ki se 5, kòm objè nan kalite lame a, epi ekri tout lòt adrès IP kòm objè nan kalite a ranje adrès. Nan ka sa a, eskli adrès subnet la ak adrès emisyon.

Se konsa, pi ba a se yon script ki rezoud pwoblèm sa a epi ki kreye 50 objè nan kalite lame a ak 51 objè nan kalite a ranje adrès. Pou rezoud pwoblèm nan, yo mande 101 apèl API (san konte apèl final la pibliye). Epitou, lè l sèvi avèk modil timeit la, nou kalkile tan li pran pou egzekite script la jiskaske chanjman yo pibliye.

Script lè l sèvi avèk ajoute-lame ak ajoute-adrès-ranje

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')

Nan anviwònman laboratwa mwen an, script sa a pran ant 30 ak 50 segonn pou egzekite, tou depann de chaj la sou sèvè jesyon an.

Koulye a, kite a wè ki jan yo rezoud pwoblèm nan menm lè l sèvi avèk yon apèl API ajoute-objè-pakèt, sipò pou ki te ajoute nan API vèsyon 1.6. Apèl sa a pèmèt ou kreye anpil objè alafwa nan yon sèl demann API. Anplis, sa yo ka objè diferan kalite (pa egzanp, hôtes, sous-rés ak adrès plages). Kidonk, travay nou an ka rezoud nan kad yon apèl API.

Script lè l sèvi avèk ajoute-objè-pakèt

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')

Ak kouri script sa a nan anviwònman laboratwa mwen an pran soti nan 3 a 7 segonn, tou depann de chaj la sou sèvè jesyon an. Sa vle di, an mwayèn, sou 101 objè API, yon apèl kalite pakèt kouri 10 fwa pi vit. Sou yon pi gwo kantite objè diferans lan pral menm plis enpresyonan.

Koulye a, kite a wè ki jan yo travay avèk yo mete-objè-pakèt. Sèvi ak apèl API sa a, nou ka chanje an gwo nenpòt paramèt. Ann mete premye mwatye adrès yo soti nan egzanp anvan an (jiska .124 hôtes, ak chenn tou) nan koulè sienna a, epi bay koulè kaki a nan dezyèm mwatye nan adrès yo.

Chanje koulè objè ki te kreye nan egzanp anvan an

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")

Ou ka efase plizyè objè nan yon sèl apèl API lè l sèvi avèk efase-objè-pakèt. Koulye a, kite a gade nan yon egzanp kòd ki efase tout lame ki te kreye deja via ajoute-objè-pakèt.

Efase objè lè l sèvi avèk 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)

Tout fonksyon ki parèt nan nouvo degaje lojisyèl Check Point imedyatman jwenn apèl API. Kidonk, nan R80.40 "karakteristik" tankou Retounen nan revizyon ak Smart Task parèt, ak apèl API korespondan yo te imedyatman prepare pou yo. Anplis, tout fonksyonalite lè w ap deplase soti nan konsola Legacy nan mòd Politik Inifye tou jwenn sipò API. Pa egzanp, aktyalizasyon ki te tann depi lontan nan vèsyon lojisyèl R80.40 se te mouvman politik Enspeksyon HTTPS la soti nan mòd Legacy nan mòd Politik Inifye, ak fonksyonalite sa a imedyatman te resevwa apèl API. Men yon egzanp kòd ki ajoute yon règ nan pozisyon an tèt politik Enspeksyon HTTPS la ki ekskli 3 kategori nan enspeksyon (Sante, Finans, Sèvis Gouvènman), ki entèdi nan enspeksyon an akò ak lwa yo nan yon kantite peyi.

Ajoute yon règ nan règleman enspeksyon HTTPS la

from cpapi import APIClient, APIClientArgs

client_args = APIClientArgs(server="192.168.47.240")

data = {
  "layer" : "Default Layer",
  "position" : "top",
  "name" : "Legal Requirements",
  "action": "bypass",
  "site-category": ["Health", "Government / Military", "Financial Services"]
}

with APIClient(client_args) as client: 
     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
     add_https_rule = client.api_call("add-https-rule", data)
     publish = client.api_call("publish")

Kouri scripts Python sou sèvè jesyon Check Point la

Tout bagay se menm bagay la README.md gen enfòmasyon sou kòman yo kouri scripts Python dirèkteman nan sèvè kontwòl la. Sa a ka pratik lè ou pa kapab konekte ak sèvè API a soti nan yon lòt machin. Mwen anrejistre yon videyo sis minit kote mwen gade enstale modil la cpapi ak karakteristik nan kouri scripts Python sou sèvè kontwòl la. Kòm yon egzanp, yo kouri yon script ki otomatize konfigirasyon an nan yon nouvo pòtay pou yon travay tankou odit rezo. Tcheke Sekirite. Pami karakteristik yo ke mwen te fè fas ak: fonksyon an poko parèt nan Python 2.7. D ', kidonk pou trete enfòmasyon itilizatè a antre, yo itilize yon fonksyon raw_input. Sinon, kòd la se menm jan ak pou lanse soti nan lòt machin, sèlman li pi pratik yo sèvi ak fonksyon an login_as_root, pou yo pa presize pwòp non itilizatè ou an, modpas ak adrès IP sèvè jesyon an ankò.

Jwe videyo

Script pou konfigirasyon rapid nan CheckUp Sekirite

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()

Yon egzanp fichye ak yon diksyonè modpas addition_pass.conf
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","пароль","Пароль","Ключ","ключ","шифр","Шифр"]
}

Konklizyon

Atik sa a egzamine sèlman posiblite debaz yo nan travay Python sdk ak modil cpapi(jan ou ta ka devine, sa yo se aktyèlman sinonim), epi lè w etidye kòd la nan modil sa a ou pral dekouvri menm plis posiblite nan travay avèk li. Li posib ke ou pral vle konplete li ak pwòp klas ou, fonksyon, metòd ak varyab. Ou ka toujou pataje travay ou epi wè lòt scripts pou Check Point nan seksyon an CodeHub nan kominote a CheckMates, ki pote ansanm tou de devlopè pwodwi ak itilizatè yo.

Ala bon sa bon kodaj ak mèsi pou lekti jiska lafen!

Sous: www.habr.com

Achte hosting serye pou sit ki gen pwoteksyon DDoS, sèvè VPS VDS 🔥 Achte yon hébergement sit entènèt serye ak pwoteksyon DDoS, sèvè VPS VDS | ProHoster