Simpliú an Check Point API leis an Python SDK

Simpliú an Check Point API leis an Python SDKNochtar cumhacht iomlán na hidirghníomhaíochta le APInna nuair a úsáidtear é in éineacht le cód cláir, nuair is féidir iarratais API agus uirlisí a ghiniúint go dinimiciúil chun anailís a dhéanamh ar fhreagraí API. Mar sin féin, tá sé fós nach dtugtar Kit Forbartha Bogearraí Python (dá ngairfear Python SDK anseo feasta) le haghaidh Check Point Management API, ach go neamhbhalbh. Simplíonn sé go mór saol forbróirí agus díograiseoirí uathoibrithe. Tá an-tóir ar Python le déanaí agus chinn mé an bhearna a líonadh agus athbhreithniú a dhéanamh ar na príomhghnéithe. Check Point API Kit Forbartha Python. Feidhmíonn an t-alt seo mar bhreis iontach ar alt eile ar Habré Check Point R80.10 API. Bainistíocht trí CLI, scripteanna agus go leor eile. Breathnóimid ar conas scripteanna a scríobh ag baint úsáide as an Python SDK agus féachfaimid ar fheidhmiúlacht nua API Bainistíochta i leagan 1.6 (le tacaíocht ó R80.40). Chun an t-alt a thuiscint, beidh eolas bunúsach uait maidir le bheith ag obair le APIs agus Python.

Tá an API á fhorbairt go gníomhach ag Check Point agus faoi láthair tá siad seo a leanas eisithe:

Faoi láthair ní thacaíonn an Python SDK ach idirghníomhaíocht leis an API Bainistíochta agus Gaia API. Breathnóimid ar na ranganna, na modhanna agus na hathróga is tábhachtaí sa mhodúl seo.

Simpliú an Check Point API leis an Python SDK

An modúl a shuiteáil

Modúl cpapi shuiteáil go tapa agus go héasca ó stór oifigiúil Seicphointí ar github leis an gcabhair pip. Tá treoracha suiteála mionsonraithe ar fáil i README.md. Tá an modúl seo curtha in oiriúint chun oibriú le leaganacha Python 2.7 agus 3.7. San Airteagal seo, tabharfar samplaí ag baint úsáide as Python 3.7. Mar sin féin, is féidir an Python SDK a reáchtáil go díreach ón Freastalaí Bainistíochta Pointe Seiceála (Bainistíocht Chliste), ach ní thacaíonn siad ach le Python 2.7, mar sin cuirfidh an t-alt deireanach cód le haghaidh leagan 2.7 ar fáil. Díreach tar éis an modúl a shuiteáil, molaim breathnú ar na samplaí sna heolairí samplaí_python2 и samplaí_python3.

Ag Tosú

D'fhonn go mbeimid in ann oibriú le comhpháirteanna an mhodúil cpapi, ní mór dúinn a allmhairiú ón modúl cpapi ar a laghad dhá rang riachtanacha:

APIClient и APIClientArgs

from cpapi import APIClient, APIClientArgs

Rang APIClientArgs freagrach as paraiméadair nasc chuig an bhfreastalaí API, agus an rang APIClient freagrach as idirghníomhú leis an API.

Paraiméadair naisc a chinneadh

Chun paraiméadair éagsúla a shainiú chun nascadh leis an API, ní mór duit sampla den rang a chruthú APIClientArgs. I bprionsabal, tá a pharaiméadair réamhshainithe agus nuair a bhíonn an script á rith ar an bhfreastalaí rialaithe, ní gá iad a shonrú.

client_args = APIClientArgs()

Ach nuair a bhíonn tú ag rith ar óstach tríú páirtí, ní mór duit seoladh IP nó ainm óstach an fhreastalaí API a shonrú ar a laghad (ar a dtugtar an freastalaí bainistíochta freisin). Sa sampla thíos, déanaimid sainmhíniú ar pharaiméadar nasc an fhreastalaí agus sannaimid seoladh IP an fhreastalaí bainistíochta dó mar theaghrán.

client_args = APIClientArgs(server='192.168.47.241')

Breathnaímid ar na paraiméadair go léir agus a luachanna réamhshocraithe is féidir a úsáid agus tú ag nascadh leis an bhfreastalaí API:

Argóintí an mhodha __init__ den rang 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

Creidim go bhfuil na hargóintí is féidir a úsáid i gcásanna den rang APIClientArgs iomasach do riarthóirí Check Point agus nach dteastaíonn tuairimí breise leo.

Ag nascadh trí APIClient agus bainisteoir comhthéacs

Rang APIClient Is é an bealach is áisiúla chun é a úsáid tríd an mbainisteoir comhthéacs. Níl le déanamh ach a chur ar aghaidh chuig sampla den rang APIClient ná na paraiméadair naisc a sainíodh sa chéim roimhe seo.

with APIClient(client_args) as client:

Ní dhéanfaidh an bainisteoir comhthéacs glao logáil isteach go huathoibríoch chuig an bhfreastalaí API, ach déanfaidh sé glao logáil amach nuair a scoirfidh sé é. Mura dteastaíonn logáil amach ar chúis éigin tar éis duit oibriú le glaonna API, ní mór duit tosú ag obair gan an bainisteoir comhthéacs a úsáid:

client = APIClient(clieng_args)

Seiceáil an nasc

Is é an bealach is éasca a sheiceáil cibé an gcomhlíonann an nasc na paraiméadair sonraithe ag baint úsáide as an modh seic_méarloirg. Má theipeann ar fhíorú na suime sha1 hash do mhéarloirg an deimhnithe API freastalaí (an modh ar ais Bréagach), ansin is gnách go mbíonn sé seo de bharr fadhbanna ceangail agus is féidir linn an clár a chur i gcrích (nó deis a thabhairt don úsáideoir na sonraí nasc a cheartú):

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

Tabhair faoi deara go bhfuil sa todhchaí an rang APIClient seiceálfaidh sé gach glao API (modhanna api_ghlao и api_cheist, labhróimid mar gheall orthu beagán eile) teastas méarloirg sha1 ar an bhfreastalaí API. Ach más rud é, nuair a bhíonn méarloirg sha1 an deimhnithe freastalaí API á sheiceáil, go n-aimsítear earráid (níl an deimhniú anaithnid nó athraíodh é), an modh seic_méarloirg tabharfaidh sé deis faisnéis faoi a chur leis/a athrú go huathoibríoch ar an meaisín áitiúil. Is féidir an tseiceáil seo a dhíchumasú go hiomlán (ach ní féidir é seo a mholadh ach amháin má reáchtáiltear scripteanna ar an bhfreastalaí API féin, agus iad ag nascadh le 127.0.0.1), ag baint úsáide as argóint APIClientArgs - neamhshábháilte_auto_glacadh (féach tuilleadh faoi APIClientArgs níos luaithe i “Paraiméadair naisc a shainiú”).

client_args = APIClientArgs(unsafe_auto_accept=True)

Logáil isteach ar fhreastalaí API

У APIClient tá oiread agus 3 modhanna ann chun logáil isteach ar an bhfreastalaí API, agus tuigeann gach ceann acu an bhrí sid(session-id), a úsáidtear go huathoibríoch i ngach glao API ina dhiaidh sin sa cheanntásc (is é an t-ainm i gceanntásc an pharaiméadar seo Taobhlach X-chkp), mar sin ní gá an paraiméadar seo a phróiseáil tuilleadh.

modh logáil isteach

Rogha ag baint úsáide as logáil isteach agus pasfhocal (sa sampla, cuirtear an t-ainm úsáideora admin agus pasfhocal 1q2w3e ar aghaidh mar argóintí suímh):

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

Tá paraiméadair roghnacha bhreise ar fáil freisin sa mhodh logála isteach; seo a n-ainmneacha agus a luachanna réamhshocraithe:

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

Modh logáil isteach_with_api_key

Rogha ag baint úsáide as eochair api (le tacaíocht ó leagan bainistíochta R80.40/Management API v1.6, "3TsbPJ8ZKjaJGvFyoFqHFA==" is é seo an luach eochair API do cheann de na húsáideoirí ar an bhfreastalaí bainistíochta leis an modh údaraithe eochair API):

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

Sa mhodh logáil isteach_le_api_eochair tá na paraiméadair roghnacha céanna ar fáil agus atá sa mhodh Logáil isteach:.

login_as_root modh

Rogha chun logáil isteach ar mheaisín áitiúil le freastalaí API:

     login = client.login_as_root()

Níl ach dhá pharaiméadar roghnacha ar fáil don mhodh seo:

domain=None, payload=None

Agus ar deireadh glaonna an API iad féin

Tá dhá rogha againn chun glaonna API a dhéanamh trí mhodhanna api_ghlao и api_cheist. Déanaimis amach cad é an difríocht eatarthu.

api_ghlao

Tá an modh seo infheidhme maidir le glaonna ar bith. Ní mór dúinn pas a fháil sa chuid dheireanach don ghlao api agus don phálasta sa chomhlacht iarratais más gá. Má tá pálasta folamh, ní féidir é a aistriú ar chor ar bith:

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

Aschur don iarratas seo faoi bhun an ghearrtha:

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

Aschur don iarratas seo faoi bhun an ghearrtha:

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_cheist

Lig dom a chur in áirithe ar an bpointe boise nach bhfuil an modh seo infheidhme ach amháin maidir le glaonna a bhfuil a aschur i gceist leis an bhfritháireamh. Tarlaíonn a leithéid de thátal nuair a bhíonn cuid mhór faisnéise ann nó nuair a fhéadfaidh sé a bheith ann. Mar shampla, d'fhéadfadh sé seo a bheith ina iarratas ar liosta de na réada óstaigh go léir a cruthaíodh ar an bhfreastalaí bainistíochta. I gcás iarratais den sórt sin, seolann an API liosta de 50 réad de réir réamhshocraithe (is féidir leat an teorainn a mhéadú go 500 réad sa fhreagra). Agus d'fhonn gan an fhaisnéis a tharraingt arís agus arís eile, ag athrú an pharaiméadar fhritháireamh san iarratas API, tá modh api_query ann a dhéanann an obair seo go huathoibríoch. Samplaí de ghlaonna ina bhfuil gá leis an modh seo: seisiúin seó, óstaigh seónna, líonraí seó, cártaí fiáin seó, grúpaí seó, raonta seoltaí seó, geataí seó-simplí, cnuasaigh seó-simplí, róil seó-rochtana, cliaint seó-iontaoibhe, seó-phacáistí. Go deimhin, feicimid focail iolra in ainm na nglaonna API seo, agus mar sin beidh sé níos éasca na glaonna seo a láimhseáil api_cheist

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

Aschur don iarratas seo faoi bhun an ghearrtha:

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

Torthaí glaonna API a phróiseáil

Ina dhiaidh seo is féidir leat athróga agus modhanna an ranga a úsáid APIResponse(taobh istigh den bhainisteoir comhthéacs agus lasmuigh). Ag an rang APIResponse Tá 4 mhodh agus 5 athróg réamhshainithe; déanfaimid níos mine ar na cinn is tábhachtaí.

Simpliú an Check Point API leis an Python SDK

rath

Ar dtús, ba mhaith an smaoineamh é a chinntiú gur éirigh leis an nglao API agus go gcuirfí toradh ar ais. Tá modh le haghaidh seo rath:

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

Tuairisceáin Fíor má d'éirigh leis an nglao API (cód freagartha - 200) agus Bréagach mura n-éiríonn (cód freagartha ar bith eile). Tá sé áisiúil é a úsáid díreach tar éis glao API chun faisnéis éagsúla a thaispeáint ag brath ar an gcód freagartha.

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

cód stádais

Filleann sé an cód freagartha tar éis glao API a bheith déanta.

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

Cóid freagartha féideartha: 200,400,401,403,404,409,500,501.

set_success_status

Sa chás seo, d’fhéadfadh go mbeadh gá le luach an stádais ratha a athrú. Go teicniúil, is féidir leat rud ar bith a chur ann, fiú sreangán rialta. Ach is sampla fíor é an paraiméadar seo a athshocrú go Bréagach faoi choinníollacha áirithe a ghabhann leis. Anseo thíos, tabhair aird ar an sampla nuair a bhíonn tascanna ar siúl ar an bhfreastalaí bainistíochta, ach measfaimid nár éirigh leis an iarratas seo (socróimid an athróg ratha go dtí Bréagach, in ainneoin gur éirigh leis an nglao API agus ar ais có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

freagra()

Ligeann an modh freagartha duit féachaint ar an bhfoclóir leis an gcód freagartha (status_code) agus an comhlacht freagartha (comhlacht).

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']}}

dáta

Ligeann sé duit corp an fhreagra (comhlacht) amháin a fheiceáil gan faisnéis neamhriachtanach.

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']}

error_teachtaireacht

Níl an fhaisnéis seo ar fáil ach amháin nuair a tharla earráid agus an t-iarratas API á phróiseáil (cód freagartha aon 200). Aschur sampla

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

Samplaí úsáideacha

Seo a leanas samplaí a úsáideann na glaonna API a cuireadh leis in Management API 1.6.

Ar dtús, déanaimis féachaint ar conas a oibríonn glaonna breiseán-óstach и add-seoladh-raon. Ligean le rá go gcaithfimid gach seoladh IP den subnet 192.168.0.0/24 a chruthú, arb é an octet deireanach de 5, mar rudaí den chineál óstach, agus gach seoladh IP eile a scríobh mar rudaí den chineál raon seoltaí. Sa chás seo, fág an seoladh subnet agus an seoladh craolta as an áireamh.

Mar sin, thíos tá script a réitíonn an fhadhb seo agus a chruthaíonn 50 réad den chineál óstach agus 51 réad den chineál raon seoltaí. Chun an fhadhb a réiteach, tá 101 glao API ag teastáil (gan an glao foilsithe deiridh a chomhaireamh). Chomh maith leis sin, ag baint úsáide as an modúl timeit, ríomhaimid an t-am a thógann sé an script a rith go dtí go bhfoilsítear na hathruithe.

Script ag baint úsáide as add-host agus add-seoladh-raon

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

I mo thimpeallacht saotharlainne, tógann sé idir 30 agus 50 soicind leis an script seo a fhorghníomhú, ag brath ar an ualach ar an bhfreastalaí bainistíochta.

Anois, déanaimis a fheiceáil conas an fhadhb chéanna a réiteach ag baint úsáide as glao API add-objects-batch, ar cuireadh tacaíocht dó in API leagan 1.6. Ligeann an glao seo duit go leor réad a chruthú ag an am céanna in aon iarratas API amháin. Ina theannta sin, is féidir iad seo a bheith ina rudaí de chineálacha éagsúla (mar shampla, óstaigh, subnets agus raonta seoltaí). Mar sin, is féidir ár dtasc a réiteach faoi chuimsiú glao API amháin.

Script ag baint úsáide as 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')

Agus tógann sé idir 3 agus 7 soicind an script seo a rith i mo thimpeallacht saotharlainne, ag brath ar an ualach ar an bhfreastalaí bainistíochta. Is é sin, ar an meán, ar 101 réad API, ritheann glao cineál bhaisc 10 n-uaire níos tapúla. Ar líon níos mó rudaí beidh an difríocht níos suntasaí fós.

Anois, a ligean ar a fheiceáil conas a bheith ag obair leis set-objects-batch. Trí úsáid a bhaint as an nglao API seo, is féidir linn mórchóir a athrú ar aon pharaiméadar. Déanaimis an chéad leath de na seoltaí a shocrú ón sampla roimhe seo (suas go dtí .124 ina hóstach, agus raonta freisin) chuig an dath sienna, agus an dath khaki a shannadh don dara leath de na seoltaí.

Athrú ar dhath na rudaí a cruthaíodh sa sampla roimhe seo

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

Is féidir leat rudaí iolracha a scriosadh i nglao API amháin ag baint úsáide as scrios-rudaí-bhaisc. Anois, déanaimis féachaint ar shampla cód a scriosann na hóstach go léir a cruthaíodh roimhe seo trí add-objects-batch.

Rudaí a scriosadh trí úsáid a bhaint as scrios-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)

Faigheann gach feidhm atá le feiceáil in eisiúintí nua de bhogearraí Check Point glaonna API láithreach. Mar sin, i R80.40 bhí a leithéid de “gnéithe” cosúil le Fill ar athbhreithniú agus Tasc Cliste le feiceáil, agus ullmhaíodh glaonna API comhfhreagracha láithreach dóibh. Ina theannta sin, faigheann gach feidhmiúlacht nuair a bhogtar ó chonsóil Legacy go mód Beartais Aontaithe tacaíocht API freisin. Mar shampla, ba é an nuashonrú a rabhthas ag súil leis le fada i leagan bogearraí R80.40 ná bogadh an bheartais Cigireachta HTTPS ó mhodh oidhreachta go modh Beartais Aontaithe, agus fuair an fheidhmiúlacht seo glaonna API láithreach. Seo sampla de chód a chuireann riail le barrshuíomh bheartas Cigireachta HTTPS a eisiann 3 chatagóir ó chigireacht (Sláinte, Airgeadas, Seirbhísí Rialtais), a bhfuil toirmeasc ar iniúchadh de réir an dlí i roinnt tíortha.

Cuir riail le polasaí Cigireachta HTTPS

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

Rith scripteanna Python ar an bhfreastalaí bainistíochta Check Point

Tá gach rud mar an gcéanna README.md tá faisnéis ann maidir le conas scripteanna Python a rith go díreach ón bhfreastalaí rialaithe. Féadfaidh sé seo a bheith áisiúil nuair nach bhfuil tú in ann ceangal leis an bhfreastalaí API ó mheaisín eile. Thaifead mé físeán sé nóiméad ina bhfuilim ag féachaint ar an modúl a shuiteáil cpapi agus gnéithe a bhaineann le reáchtáil scripteanna Python ar an bhfreastalaí rialaithe. Mar shampla, reáchtáiltear script a uathoibríonn cumraíocht geata nua do thasc mar iniúchadh líonra Seiceáil Slándála. I measc na ngnéithe a raibh orm déileáil leo: níl an fheidhm le feiceáil fós i Python 2.7 ionchur, mar sin chun an fhaisnéis a chuireann an t-úsáideoir isteach a phróiseáil, úsáidtear feidhm amh_ionchur. Seachas sin, tá an cód mar an gcéanna le seoladh ó mheaisíní eile, ach tá sé níos áisiúla an fheidhm a úsáid logáil isteach_as_root, ionas nach sonróidh tú d'ainm úsáideora, pasfhocal agus seoladh IP an fhreastalaí bainistíochta arís.

Script chun Seiceáil Slándála a shocrú go tapa

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

Comhad sampla le foclóir pasfhocail additional_pass.conf
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","пароль","Пароль","Ключ","ключ","шифр","Шифр"] }

Conclúid

Ní scrúdaíonn an t-alt seo ach na bunfhéidearthachtaí oibre SDK Python agus modúl cpapi(mar a thuig tú, is comhchiallaigh iad seo i ndáiríre), agus trí staidéar a dhéanamh ar an gcód sa mhodúl seo gheobhaidh tú níos mó deiseanna chun oibriú leis. Is féidir go mbeidh tú ag iarraidh é a fhorlíonadh le do chuid ranganna, feidhmeanna, modhanna agus athróga féin. Is féidir leat do chuid oibre a roinnt i gcónaí agus féachaint ar scripteanna eile le haghaidh Check Point sa rannán CódHub sa phobal CheckMates, a thugann le chéile forbróirí táirge agus úsáideoirí araon.

Códú sona agus go raibh maith agat as léamh go dtí an deireadh!

Foinse: will.com

Add a comment