API bilan o'zaro aloqaning to'liq kuchi dastur kodi bilan birgalikda ishlatilganda, API so'rovlarini va API javoblarini tahlil qilish vositalarini dinamik ravishda yaratish mumkin bo'lganda namoyon bo'ladi. Biroq, u hali ham sezilmaydigan bo'lib qolmoqda Python dasturiy ta'minot ishlab chiqish to'plami (keyingi o'rinlarda Python SDK deb yuritiladi) uchun Check Point Management API, lekin behuda. Bu ishlab chiquvchilar va avtomatlashtirish ixlosmandlarining hayotini sezilarli darajada osonlashtiradi. Python so'nggi paytlarda juda mashhur bo'ldi va men bo'shliqni to'ldirishga va asosiy xususiyatlarni ko'rib chiqishga qaror qildim. . Ushbu maqola Habré haqidagi boshqa maqolaga ajoyib qo'shimcha bo'lib xizmat qiladi . Biz Python SDK yordamida skriptlarni qanday yozishni ko‘rib chiqamiz va 1.6 versiyadagi yangi Management API funksiyasini (R80.40 dan boshlab qo‘llab-quvvatlanadi) batafsil ko‘rib chiqamiz. Maqolani tushunish uchun sizga API va Python bilan ishlash bo'yicha asosiy bilim kerak bo'ladi.
Check Point API-ni faol ravishda ishlab chiqmoqda va hozirda quyidagilar chiqarildi:
- — API orqali boshqaruv serveri bilan ishlash (va boshqaruv serveri tomonidan boshqariladigan shlyuzlarda skriptlarni bajarish qobiliyati)
- — xavfsizlik shlyuzlari bilan ishlash
- — Check Point bulutida qum qutisi bilan ishlash
- — shlyuzlarda Identity Awareness blade bilan ishlash
- — SMB shlyuzini boshqarish portali bilan ishlash ()
- — IoT kontrollerlari bilan o'zaro aloqa
- - bilan ishlash (SD-WAN xavfsizlik yechimi)
- - bilan ishlash
Python SDK hozirda faqat Management API bilan o'zaro aloqani qo'llab-quvvatlaydi va Gaia API. Biz ushbu modulda eng muhim sinflar, usullar va o'zgaruvchilarni ko'rib chiqamiz.

Modulni o'rnatish
Modul cpapi dan tez va oson o'rnatiladi yordamida pip. O'rnatish bo'yicha batafsil ko'rsatmalar mavjud . Ushbu modul Python 2.7 va 3.7 versiyalari bilan ishlashga moslashtirilgan. Ushbu maqolada Python 3.7 yordamida misollar keltiriladi. Biroq, Python SDK to'g'ridan-to'g'ri Check Point Management Server (Smart Management) dan ishga tushirilishi mumkin, lekin ular faqat Python 2.7 ni qo'llab-quvvatlaydi, shuning uchun oxirgi bo'lim 2.7 versiyasi uchun kodni taqdim etadi. Modulni o'rnatgandan so'ng darhol kataloglardagi misollarni ko'rib chiqishni maslahat beraman misollar_python2 и misollar_python3.
Ishga kirishish
Biz cpapi modulining komponentlari bilan ishlashimiz uchun moduldan import qilishimiz kerak. cpapi kamida ikkita talab qilinadigan sinflar:
APIClient и APIClientArgs
from cpapi import APIClient, APIClientArgs
sinf APIClientArgs API serveriga ulanish parametrlari va sinf uchun javobgardir APIClient API bilan o'zaro aloqa uchun javobgardir.
Ulanish parametrlarini aniqlash
API ga ulanish uchun turli parametrlarni aniqlash uchun siz sinfning namunasini yaratishingiz kerak APIClientArgs. Asosan, uning parametrlari oldindan belgilangan va boshqaruv serverida skriptni ishga tushirishda ularni ko'rsatish shart emas.
client_args = APIClientArgs()Ammo uchinchi tomon hostida ishlayotganda, siz hech bo'lmaganda IP-manzilni yoki API serverining xost nomini (shuningdek, boshqaruv serveri sifatida ham tanilgan) ko'rsatishingiz kerak. Quyidagi misolda biz serverga ulanish parametrini aniqlaymiz va unga boshqaruv serverining IP-manzilini qator sifatida belgilaymiz.
client_args = APIClientArgs(server='192.168.47.241')API serveriga ulanishda foydalanish mumkin bo'lgan barcha parametrlarni va ularning standart qiymatlarini ko'rib chiqaylik:
APIClientArgs sinfining __init__ usulining argumentlari
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 = contextMenimcha, APIClientArgs klassi misollarida ishlatilishi mumkin bo'lgan argumentlar Check Point ma'murlari uchun intuitivdir va qo'shimcha izohlarni talab qilmaydi.
APIClient va kontekst menejeri orqali ulanish
sinf APIClient Uni ishlatishning eng qulay usuli - kontekst menejeri. APIClient klassi namunasiga o'tkazilishi kerak bo'lgan barcha narsa oldingi bosqichda aniqlangan ulanish parametrlaridir.
with APIClient(client_args) as client:
Kontekst menejeri avtomatik ravishda API serveriga kirish qo'ng'irog'ini amalga oshirmaydi, lekin undan chiqishda u chiqish qo'ng'irog'ini amalga oshiradi. Agar biron sababga ko'ra API qo'ng'iroqlari bilan ishlashni tugatgandan so'ng tizimdan chiqish talab qilinmasa, kontekst menejeridan foydalanmasdan ishlashni boshlashingiz kerak:
client = APIClient(clieng_args)Ulanish testi
Ulanishning belgilangan parametrlarga mos kelishini tekshirishning eng oson usuli bu usuldan foydalanishdir barmoq izini tekshirish. Agar server API sertifikatining barmoq izi uchun sha1 xesh summasini tekshirish muvaffaqiyatsiz tugasa (usul qaytariladi) yolg'on), unda bu odatda ulanish muammolaridan kelib chiqadi va biz dasturning bajarilishini to'xtatishimiz mumkin (yoki foydalanuvchiga ulanish ma'lumotlarini tuzatish imkoniyatini beramiz):
if client.check_fingerprint() is False:
print("Could not get the server's fingerprint - Check connectivity with the server.")
exit(1)
E'tibor bering, kelajakda sinf APIClient har bir API chaqiruvini tekshiradi (metod api_call и api_query, biz ular haqida bir oz ko'proq gaplashamiz) API serverida sha1 barmoq izi sertifikati. Ammo agar API server sertifikatining sha1 barmoq izini tekshirishda xatolik aniqlansa (sertifikat noma'lum yoki o'zgartirilgan), usul barmoq izini tekshirish u haqida ma'lumotni mahalliy mashinaga avtomatik ravishda qo'shish/o'zgartirish imkoniyatini beradi. Ushbu tekshirishni butunlay o'chirib qo'yish mumkin (lekin buni faqat APIClientArgs argumentidan foydalanib, skriptlar API serverining o'zida, 127.0.0.1 ga ulanishda ishga tushirilganda tavsiya etiladi) - xavfsiz_avtomatik_qabul qilish (APIClientArgs haqida ko'proq "Ulanish parametrlarini aniqlash" bo'limiga qarang).
client_args = APIClientArgs(unsafe_auto_accept=True)API serveriga kiring
У APIClient API serveriga kirish uchun 3 ta usul mavjud va ularning har biri ma'nosini tushunadi sid(sessiya identifikatori), bu sarlavhadagi har bir keyingi API chaqiruvida avtomatik ravishda ishlatiladi (ushbu parametrning sarlavhasidagi nom X-chkp-sid), shuning uchun ushbu parametrni qayta ishlashga hojat yo'q.
kirish usuli
Login va paroldan foydalangan holda variant (misolda, foydalanuvchi nomi admin va parol 1q2w3e pozitsion argumentlar sifatida berilgan):
login = client.login('admin', '1q2w3e') Kirish usulida qo'shimcha ixtiyoriy parametrlar ham mavjud: ularning nomlari va standart qiymatlari:
continue_last_session=False, domain=None, read_only=False, payload=NoneLogin_with_api_key usuli
Api kaliti yordamida variant (boshqaruv versiyasi R80.40/Management API v1.6 dan boshlab qo‘llab-quvvatlanadi, "3TsbPJ8ZKjaJGvFyoFqHFA==" bu API kaliti avtorizatsiya usuli bilan boshqaruv serveridagi foydalanuvchilardan biri uchun API kalit qiymati):
login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==') Usulda login_with_api_key usuldagi kabi bir xil ixtiyoriy parametrlar mavjud Kirish.
login_as_root usuli
API serveri bilan mahalliy mashinaga kirish imkoniyati:
login = client.login_as_root()Ushbu usul uchun faqat ikkita ixtiyoriy parametr mavjud:
domain=None, payload=NoneVa nihoyat, API o'zlarini chaqiradi
Usullar orqali API qo'ng'iroqlarini amalga oshirishning ikkita varianti mavjud api_call и api_query. Keling, ular orasidagi farq nima ekanligini aniqlaylik.
api_call
Ushbu usul har qanday qo'ng'iroqlar uchun amal qiladi. Agar kerak bo'lsa, so'rov tanasida api chaqiruvi va foydali yuk uchun oxirgi qismni o'tkazishimiz kerak. Agar foydali yuk bo'sh bo'lsa, uni umuman uzatib bo'lmaydi:
api_versions = client.api_call('show-api-versions') Ushbu so'rov uchun kesma ostidagi chiqish:
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'})Ushbu so'rov uchun kesma ostidagi chiqish:
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
Bu usul faqat chiqishi ofsetni o'z ichiga olgan qo'ng'iroqlar uchun qo'llanilishini darhol band qilishimga ruxsat bering. Bunday xulosa, agar u katta hajmdagi ma'lumotlarni o'z ichiga olgan yoki o'z ichiga olishi mumkin bo'lsa sodir bo'ladi. Masalan, bu boshqaruv serverida yaratilgan barcha xost ob'ektlari ro'yxati uchun so'rov bo'lishi mumkin. Bunday so'rovlar uchun API sukut bo'yicha 50 ta ob'ekt ro'yxatini qaytaradi (javobda cheklovni 500 ta ob'ektga oshirishingiz mumkin). Ma'lumotni bir necha marta tortib olmaslik uchun, API so'rovidagi ofset parametrini o'zgartirib, bu avtomatik ravishda ishlaydigan api_query usuli mavjud. Ushbu usul kerak bo'lgan qo'ng'iroqlarga misollar: shou-sessiyalar, shou-xostlar, shou-tarmoqlar, ko‘rsatuv-joker belgilar, shou-guruhlar, ko‘rsatuv-manzil diapazonlari, oddiy-shlyuzlar, shou-oddiy-klasterlar, kirish-roliklarni ko‘rsatish, ishonchli mijozlarni ko‘rsatish, ko'rgazmali paketlar. Aslida, biz ushbu API qo'ng'iroqlari nomida ko'plik so'zlarni ko'ramiz, shuning uchun bu qo'ng'iroqlarni boshqarish osonroq bo'ladi api_query
show_hosts = client.api_query('show-hosts') Ushbu so'rov uchun kesma ostidagi chiqish:
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
})
API qo'ng'iroqlari natijalarini qayta ishlash
Shundan so'ng siz sinfning o'zgaruvchilari va usullaridan foydalanishingiz mumkin APIResponse(kontekst boshqaruvchisi ichida ham, tashqarisida ham). Sinfda APIResponse 4 ta usul va 5 ta o'zgaruvchi oldindan belgilangan;

muvaffaqiyat
Boshlash uchun, API chaqiruvi muvaffaqiyatli bo'lganiga va natija berganiga ishonch hosil qilish yaxshi fikr bo'lar edi. Buning uchun bir usul mavjud muvaffaqiyat:
In [49]: api_versions.success
Out[49]: True
Agar API chaqiruvi muvaffaqiyatli bo'lsa, True (javob kodi - 200) va muvaffaqiyatsiz bo'lsa, False (boshqa javob kodi) qiymatini qaytaradi. Javob kodiga qarab turli xil ma'lumotlarni ko'rsatish uchun API chaqiruvidan so'ng darhol foydalanish qulay.
if api_ver.success:
print(api_versions.data)
else:
print(api_versions.err_message) holat kodi
API chaqiruvi qilinganidan keyin javob kodini qaytaradi.
In [62]: api_versions.status_code
Out[62]: 400
Mumkin javob kodlari: 200,400,401,403,404,409,500,501.
set_success_status
Bunday holda, muvaffaqiyat holatining qiymatini o'zgartirish kerak bo'lishi mumkin. Texnik jihatdan, siz u erda hamma narsani, hatto oddiy ipni ham qo'yishingiz mumkin. Biroq, haqiqiy misol, bu parametrni ma'lum bir shartlar ostida "False" ga qaytarishdir. Quyida boshqaruv serverida vazifalar bajarilayotgan misolga e'tibor bering, ammo biz bu so'rovni muvaffaqiyatsiz deb hisoblaymiz (muvaffaqiyat o'zgaruvchisini o'rnatamiz yolg'on, API chaqiruvi muvaffaqiyatli bo'lganiga va 200 kodini qaytarganiga qaramay).
for task in task_result.data["tasks"]:
if task["status"] == "failed" or task["status"] == "partially succeeded":
task_result.set_success_status(False)
breakjavob()
Javob berish usuli sizga javob kodi (status_code) va javob tanasi (tanasi) bilan lug'atni ko'rish imkonini beradi.
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']}}
ma'lumotlar
Keraksiz ma'lumotlarsiz faqat javobning tanasini (tanasini) ko'rish imkonini beradi.
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']}
xato_xabar
Ushbu ma'lumot faqat API so'rovini qayta ishlashda xatolik yuz berganda mavjud (javob kodi yo'q 200). Misol chiqarish
In [107]: api_versions.error_message
Out[107]: 'code: generic_err_invalid_parameter_namenmessage: Unrecognized parameter [1]n'
Foydali misollar
Quyida Management API 1.6 da qo'shilgan API qo'ng'iroqlarini ishlatadigan misollar keltirilgan.
Birinchidan, qo'ng'iroqlar qanday ishlashini ko'rib chiqaylik xost qo'shish и manzil oralig'ini qo'shish. Aytaylik, biz 192.168.0.0/24 pastki tarmoqning barcha IP manzillarini, oxirgi okteti 5 tani xost tipidagi ob'ektlar sifatida yaratishimiz va boshqa barcha IP manzillarni manzillar diapazoni tipidagi ob'ektlar sifatida yozishimiz kerak. Bunday holda, quyi tarmoq manzili va translyatsiya manzilini chiqarib tashlang.
Shunday qilib, quyida ushbu muammoni hal qiladigan va xost tipidagi 50 ta ob'ektni va manzil diapazoni turidagi 51 ta ob'ektni yaratadigan skript mavjud. Muammoni hal qilish uchun 101 ta API qo'ng'iroqlari talab qilinadi (yakuniy nashr chaqiruvini hisobga olmaganda). Bundan tashqari, timeit modulidan foydalanib, biz o'zgarishlar e'lon qilinmaguncha skriptni bajarish vaqtini hisoblaymiz.
Qo'shimcha xost va qo'shimcha manzil oralig'idan foydalangan holda skript
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')
Mening laboratoriya muhitimda ushbu skript boshqaruv serveridagi yukga qarab 30 dan 50 soniyagacha bajarilishini oladi.
Endi API chaqiruvi yordamida bir xil muammoni qanday hal qilishni ko'rib chiqamiz qo'shish-ob'ektlar-to'plam, qo'llab-quvvatlash API 1.6 versiyasida qo'shilgan. Ushbu qo'ng'iroq sizga bitta API so'rovida bir vaqtning o'zida bir nechta ob'ektlarni yaratishga imkon beradi. Bundan tashqari, ular har xil turdagi ob'ektlar bo'lishi mumkin (masalan, xostlar, pastki tarmoqlar va manzillar diapazonlari). Shunday qilib, bizning vazifamiz bitta API chaqiruvi doirasida hal qilinishi mumkin.
Add-objects-batch yordamida skript
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')
Va bu skriptni laboratoriya muhitida ishga tushirish boshqaruv serveridagi yukga qarab 3 dan 7 soniyagacha davom etadi. Ya'ni, o'rtacha 101 ta API ob'ektida ommaviy turdagi qo'ng'iroq 10 barobar tezroq ishlaydi. Ko'p sonli ob'ektlarda farq yanada ta'sirchan bo'ladi.
Endi u bilan qanday ishlashni ko'rib chiqaylik ob'ektlar to'plami. Ushbu API chaqiruvidan foydalanib, biz har qanday parametrni ommaviy ravishda o'zgartirishimiz mumkin. Oldingi misoldagi manzillarning birinchi yarmini (124 tagacha xost va diapazonlar) sienna rangiga o'rnatamiz va manzillarning ikkinchi yarmiga xaki rangini belgilaymiz.
Oldingi misolda yaratilgan ob'ektlar rangini o'zgartirish
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")
Bitta API chaqiruvida bir nechta ob'ektlarni o'chirishingiz mumkin o'chirish-ob'ektlar-to'plam. Endi avval orqali yaratilgan barcha xostlarni o'chirib tashlaydigan kod misolini ko'rib chiqamiz qo'shish-ob'ektlar-to'plam.
Delete-objects-batch yordamida ob'ektlarni o'chirish
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)
Check Point dasturining yangi versiyalarida paydo bo'ladigan barcha funktsiyalar darhol API qo'ng'iroqlarini oladi. Shunday qilib, R80.40 da qayta ko'rib chiqishga qaytish va Smart Task kabi "xususiyatlar" paydo bo'ldi va ular uchun darhol tegishli API qo'ng'iroqlari tayyorlandi. Bundan tashqari, eski konsollardan Yagona siyosat rejimiga o'tishda barcha funksiyalar API qo'llab-quvvatlashiga ham ega bo'ladi. Misol uchun, dasturiy ta'minotning R80.40 versiyasida uzoq kutilgan yangilanish HTTPS tekshiruvi siyosatini Legacy rejimidan Yagona siyosat rejimiga o'tkazish edi va bu funksiya darhol API qo'ng'iroqlarini qabul qildi. Bu erda bir qator mamlakatlarda qonunlarga muvofiq tekshirish taqiqlangan 3 toifani (Sog'liqni saqlash, Moliya, Davlat xizmatlari) tekshirishdan istisno qiluvchi HTTPS Tekshirish siyosatining yuqori pozitsiyasiga qoida qo'shadigan kod misoli keltirilgan.
HTTPS tekshiruvi siyosatiga qoida qo'shing
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")
Check Point boshqaruv serverida Python skriptlarini ishga tushirish
Hammasi bir xil to'g'ridan-to'g'ri boshqaruv serveridan Python skriptlarini qanday ishga tushirish haqida ma'lumotni o'z ichiga oladi. Boshqa mashinadan API serveriga ulana olmaganingizda bu qulay bo'lishi mumkin. Men olti daqiqalik videoni yozib oldim, unda modulni o'rnatishni ko'rib chiqaman cpapi va boshqaruv serverida Python skriptlarini ishga tushirish xususiyatlari. Misol tariqasida, tarmoq tekshiruvi kabi vazifa uchun yangi shlyuz konfiguratsiyasini avtomatlashtiradigan skript ishga tushirildi. Xavfsizlik tekshiruvi. Men hal qilishim kerak bo'lgan xususiyatlar orasida: funktsiya hali Python 2.7 da paydo bo'lmagan kirish, shuning uchun foydalanuvchi kiritgan ma'lumotni qayta ishlash uchun funktsiyadan foydalaniladi raw_input. Aks holda, kod boshqa mashinalardan ishga tushirish bilan bir xil, faqat funktsiyadan foydalanish qulayroqdir login_as_root, o'z foydalanuvchi nomingiz, parolingiz va boshqaruv serverining IP manzilini yana ko'rsatmaslik uchun.

Xavfsizlik tekshiruvini tez sozlash uchun skript
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() Ek_pass.conf parol lug'atiga ega misol fayl
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","пароль","Пароль","Ключ","ключ","шифр","Шифр"]
}
xulosa
Ushbu maqola faqat ishning asosiy imkoniyatlarini ko'rib chiqadi Python SDK va modul cpapi(siz taxmin qilganingizdek, bular aslida sinonimlar) va ushbu moduldagi kodni o'rganish orqali siz u bilan ishlash uchun yanada ko'proq imkoniyatlarni kashf etasiz. Siz uni o'z sinflaringiz, funktsiyalaringiz, usullaringiz va o'zgaruvchilaringiz bilan to'ldirishni xohlashingiz mumkin. Siz har doim bo'limda ishingizni baham ko'rishingiz va Check Point uchun boshqa skriptlarni ko'rishingiz mumkin jamiyatda , bu ham mahsulotni ishlab chiquvchilarni, ham foydalanuvchilarni birlashtiradi.
Baxtli kodlash va oxirigacha o'qiganingiz uchun tashakkur!
Manba: www.habr.com
