Π‘ΠΏΡ€ΠΎΡ‰ΡƒΡ”ΠΌΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ Π· Check Point API Π·Π° допомогою Python SDK

Π‘ΠΏΡ€ΠΎΡ‰ΡƒΡ”ΠΌΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ Π· Check Point API Π·Π° допомогою Python SDKВся ΠΏΠΎΡ‚ΡƒΠΆΠ½Ρ–ΡΡ‚ΡŒ Π²Π·Π°Ρ”ΠΌΠΎΠ΄Ρ–Ρ— Π· API Ρ€ΠΎΠ·ΠΊΡ€ΠΈΠ²Π°Ρ”Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ ΡΠΏΡ–Π»ΡŒΠ½ΠΎΠΌΡƒ використанні Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΈΠΌ ΠΊΠΎΠ΄ΠΎΠΌ, ΠΊΠΎΠ»ΠΈ Π·'ΡΠ²Π»ΡΡŽΡ‚ΡŒΡΡ моТливості Π΄ΠΈΠ½Π°ΠΌΡ–Ρ‡Π½ΠΎ Ρ„ΠΎΡ€ΠΌΡƒΠ²Π°Ρ‚ΠΈ Π·Π°ΠΏΠΈΡ‚ΠΈ API Ρ– інструмСнти для Π°Π½Π°Π»Ρ–Π·Ρƒ API Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π΅ΠΉ. ΠŸΡ€ΠΎΡ‚Π΅, ΠΌΠ°Π»ΠΎΠΏΠΎΠΌΡ–Ρ‚Π½ΠΈΠΌ досі Π·Π°Π»ΠΈΡˆΠ°Ρ”Ρ‚ΡŒΡΡ ΠšΠΎΠΌΠΏΠ»Π΅ΠΊΡ‚ Ρ€ΠΎΠ·Ρ€ΠΎΠ±ΠΊΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΎΠ³ΠΎ забСзпСчСння Python (Π΄Π°Π»Ρ– - Python SDK) для Check Point Management API, Π° Π΄Π°Ρ€Π΅ΠΌΠ½ΠΎ. Π’Ρ–Π½ Π²Ρ–Π΄Ρ‡ΡƒΡ‚Π½ΠΎ спрощує Тиття Ρ€ΠΎΠ·Ρ€ΠΎΠ±Π½ΠΈΠΊΠ°ΠΌ Ρ‚Π° Π°ΠΌΠ°Ρ‚ΠΎΡ€Π°ΠΌ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†Ρ–Ρ—. Python Π½Π°Π±ΡƒΠ² Π²Π΅Π»ΠΈΡ‡Π΅Π·Π½ΠΎΡ— популярності останнім часом Ρ– я Π²ΠΈΡ€Ρ–ΡˆΠΈΠ² усунути ΠΏΡ€ΠΎΠ³Π°Π»ΠΈΠ½Ρƒ Ρ– Π·Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ огляд основних моТливостСй Check Point API Python Development Kit. Ця стаття Ρ” Ρ‡ΡƒΠ΄ΠΎΠ²ΠΈΠΌ доповнСнням Ρ–Π½ΡˆΠΎΡ— статті Π½Π° Π₯Π°Π±Ρ€Π΅ Check Point R80.10 API. Управління Ρ‡Π΅Ρ€Π΅Π· CLI, скрипти Ρ– Π½Π΅ Ρ‚Ρ–Π»ΡŒΠΊΠΈ. Ми розглянСмо як написати скрипти Π· використанням Python SDK Ρ– зупинимося Π΄ΠΎΠΊΠ»Π°Π΄Π½Ρ–ΡˆΠ΅ Π½Π° Π½ΠΎΠ²ΠΎΠΌΡƒ Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΠΎΠ½Π°Π»Ρ– Management API Ρƒ вСрсії 1.6 (ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡ”Ρ‚ΡŒΡΡ ΠΏΠΎΡ‡ΠΈΠ½Π°ΡŽΡ‡ΠΈ Π· R80.40). Для розуміння статті Π·Π½Π°Π΄ΠΎΠ±Π»ΡΡ‚ΡŒΡΡ Π±Π°Π·ΠΎΠ²Ρ– знання Π· Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π· API Ρ‚Π° Python.

Check Point Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ Ρ€ΠΎΠ·Π²ΠΈΠ²Π°Ρ” API Ρ– Π·Π°Ρ€Π°Π· Π½Π° світ Π·'явилися:

Python SDK Π½Π° Π΄Π°Π½ΠΈΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡ” Π²Π·Π°Ρ”ΠΌΠΎΠ΄Ρ–ΡŽ Ρ‚Ρ–Π»ΡŒΠΊΠΈ Π· Management API Ρ‚Π° Gaia API. Ми розглянСмо Π½Π°ΠΉΠ²Π°ΠΆΠ»ΠΈΠ²Ρ–ΡˆΡ– класи, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Ρ‚Π° Π·ΠΌΡ–Π½Π½Ρ– Π² Π΄Π°Π½ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»Ρ–.

Π‘ΠΏΡ€ΠΎΡ‰ΡƒΡ”ΠΌΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ Π· Check Point API Π·Π° допомогою Python SDK

ВстановлСння модуля

ΠΌΠΎΠ΄ΡƒΠ»ΡŒ cpapi Π²ΡΡ‚Π°Π½ΠΎΠ²Π»ΡŽΡ”Ρ‚ΡŒΡΡ швидко Ρ– просто Π· ΠΎΡ„Ρ–Ρ†Ρ–ΠΉΠ½ΠΎΠ³ΠΎ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚Π°Ρ€Ρ–ΡŽ Check Point Π½Π° github Π·Π° допомогою Ρ‚ΠΈΠΏΡƒΠ½. Π”Π΅Ρ‚Π°Π»ΡŒΠ½Π° інструкція ΠΏΠΎ Π²ΡΡ‚Π°Π½ΠΎΠ²Π»Π΅Π½Π½ΡŽ Ρ” Π² README.md. Π¦Π΅ΠΉ ΠΌΠΎΠ΄ΡƒΠ»ΡŒ Π°Π΄Π°ΠΏΡ‚ΠΎΠ²Π°Π½ΠΈΠΉ для Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π· вСрсіями Python 2.7 Ρ‚Π° 3.7. Π£ Ρ†Ρ–ΠΉ статті ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ΡŒ Π½Π°Π²Π΅Π΄Π΅Π½Ρ– Π·Π° допомогою Python 3.7. Однак Python SDK ΠΌΠΎΠΆΠ½Π° запускати прямо Π· сСрвСра кСрування Check Point (Smart Management), Π°Π»Π΅ Π½Π° Π½ΠΈΡ… ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡ”Ρ‚ΡŒΡΡ Ρ‚Ρ–Π»ΡŒΠΊΠΈ вСрсія Python 2.7, Ρ‚ΠΎΠΌΡƒ Π² ΠΎΡΡ‚Π°Π½Π½ΡŒΠΎΠΌΡƒ Ρ€ΠΎΠ·Π΄Ρ–Π»Ρ– Π±ΡƒΠ΄Π΅ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ ΠΊΠΎΠ΄ для вСрсії 2.7. Π’Ρ–Π΄Ρ€Π°Π·Ρƒ після встановлСння модуля Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΡŽ подивитися Π½Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ΠΈ Π² дирСкторіях examples_python2 ΠΈ examples_python3.

ΠŸΠΎΡ‡Π°Ρ‚ΠΎΠΊ Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ

Для Ρ‚ΠΎΠ³ΠΎ Ρ‰ΠΎΠ± Ρƒ нас Π·'явилася ΠΌΠΎΠΆΠ»ΠΈΠ²Ρ–ΡΡ‚ΡŒ ΠΏΡ€Π°Ρ†ΡŽΠ²Π°Ρ‚ΠΈ Π· ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌΠΈ модуля cpapi Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½ΠΎ Ρ–ΠΌΠΏΠΎΡ€Ρ‚ΡƒΠ²Π°Ρ‚ΠΈ Π· модуля cpapi як ΠΌΡ–Π½Ρ–ΠΌΡƒΠΌ Π΄Π²Π° Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½Ρ– класи:

APIClient ΠΈ APIClientArgs

from cpapi import APIClient, APIClientArgs

Клас APIClientArgs Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π°Ρ” Π·Π° ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ Π΄ΠΎ API сСрвСра, Π° клас APIClient Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π°Ρ” Π·Π° Π²Π·Π°Ρ”ΠΌΠΎΠ΄Ρ–ΡŽ Π· API.

Π’ΠΈΠ·Π½Π°Ρ‡Π°Ρ”ΠΌΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ

Π©ΠΎΠ± Π²ΠΈΠ·Π½Π°Ρ‡ΠΈΡ‚ΠΈ Ρ€Ρ–Π·Π½Ρ– ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ Π΄ΠΎ API, ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ створити СкзСмпляр класу APIClientArgs. Π’ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏΡ–, ΠΉΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Π²ΠΈΠ·Π½Π°Ρ‡Π΅Π½Ρ– Ρ– ΠΏΡ€ΠΈ запуску скрипта Π½Π° сСрвСрі управління Ρ—Ρ… ΠΌΠΎΠΆΠ½Π° Π½Π΅ Π²ΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ.

client_args = APIClientArgs()

АлС ΠΏΡ€ΠΈ запуску Π½Π° ΡΡ‚ΠΎΡ€ΠΎΠ½Π½ΡŒΠΎΠΌΡƒ хості ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π²ΠΊΠ°Π·Π°Ρ‚ΠΈ як ΠΌΡ–Π½Ρ–ΠΌΡƒΠΌ IP адрСсу Π°Π±ΠΎ Ρ–ΠΌ'я хоста API сСрвСра (Π²Ρ–Π½ сСрвСр кСрування). Π£ Π½Π°Π²Π΅Π΄Π΅Π½ΠΎΠΌΡƒ Π½ΠΈΠΆΡ‡Π΅ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ– ΠΌΠΈ Π²ΠΈΠ·Π½Π°Ρ‡Π°Ρ”ΠΌΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ server Ρ– ΠΏΡ€ΠΈΡΠ²ΠΎΡŽΡ”ΠΌΠΎ ΠΉΠΎΠΌΡƒ Ρƒ вигляді рядка IP адрСсу сСрвСра управління.

client_args = APIClientArgs(server='192.168.47.241')

Π”Π°Π²Π°ΠΉΡ‚Π΅ подивимося Π½Π° всі ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ Ρ‚Π° Ρ—Ρ… значСння Π·Π° промовчанням, які ΠΌΠΎΠΆΠ½Π° використовувати ΠΏΡ€ΠΈ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ– Π΄ΠΎ сСрвСра API:

АргумСнти ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ __init__ класу 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

Π’Π²Π°ΠΆΠ°ΡŽ, Ρ‰ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, які ΠΌΠΎΠΆΠ½Π° використовувати Π² СкзСмплярах класу APIClientArgs, Ρ–Π½Ρ‚ΡƒΡ—Ρ‚ΠΈΠ²Π½ΠΎ Π·Ρ€ΠΎΠ·ΡƒΠΌΡ–Π»Ρ– адміністраторам Check Point Ρ– Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²ΠΈΡ… ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€Ρ–Π² Π½Π΅ ΠΏΠΎΡ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ΡŒ.

ΠŸΡ–Π΄ΠΊΠ»ΡŽΡ‡Π°Ρ”ΠΌΠΎΡΡ Ρ‡Π΅Ρ€Π΅Π· APIClient Ρ‚Π° ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ контСксту

Клас APIClient ΠΠ°ΠΉΠ·Ρ€ΡƒΡ‡Π½Ρ–ΡˆΠ΅ використовувати Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ контСксту. ВсС, Ρ‰ΠΎ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΈ СкзСмпляру класу APIClient, Ρ†Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ, які Π±ΡƒΠ»ΠΈ Π²ΠΈΠ·Π½Π°Ρ‡Π΅Π½Ρ– Π² ΠΌΠΈΠ½ΡƒΠ»ΠΎΠΌΡƒ ΠΊΡ€ΠΎΡ†Ρ–.

with APIClient(client_args) as client:

ΠœΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€ контСксту Π½Π΅ Π±ΡƒΠ΄Π΅ Π²ΠΈΠΊΠΎΠ½ΡƒΠ²Π°Ρ‚ΠΈ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ login Π²ΠΈΠΊΠ»ΠΈΠΊ Π½Π° сСрвСр API, ΠΎΠ΄Π½Π°ΠΊ Π²Ρ–Π½ Π²ΠΈΠΊΠΎΠ½Π°Ρ” Π²ΠΈΠΊΠ»ΠΈΠΊ logout ΠΏΡ€ΠΈ Π²ΠΈΡ…ΠΎΠ΄Ρ– Π· нього. Π―ΠΊΡ‰ΠΎ Π· ΡΠΊΠΈΡ…ΠΎΡΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ logout після закінчСння Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Π· API Π²ΠΈΠΊΠ»ΠΈΠΊΠ°ΠΌΠΈ Π½Π΅ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ, ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Ρ€ΠΎΠ·ΠΏΠΎΡ‡Π°Ρ‚ΠΈ Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ Π±Π΅Π· використання ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° контСксту:

client = APIClient(clieng_args)

ΠŸΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΊΠ° Π·'єднання

ΠŸΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΈΡ‚ΠΈ Ρ‡ΠΈ ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ Π·'єднання Π·Π° Π·Π°Π΄Π°Π½ΠΈΠΌΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π°ΠΌΠΈ Π½Π°ΠΉΠΏΡ€ΠΎΡΡ‚Ρ–ΡˆΠ΅ Π·Π° допомогою ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ check_fingerprint. Π―ΠΊΡ‰ΠΎ ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΊΠ° Ρ…Π΅Ρˆ-суми sha1 для fingerprint сСртифіката API сСрвСра Π½Π΅ ΠΏΡ€ΠΎΠΉΡˆΠ»Π° (ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΠ² Помилковий), Ρ‚ΠΎ Π·Π°Π·Π²ΠΈΡ‡Π°ΠΉ Ρ†Π΅ Π²ΠΈΠΊΠ»ΠΈΠΊΠ°Π½ΠΎ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π·Ρ– Π·'єднанням Ρ– ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π·ΡƒΠΏΠΈΠ½ΠΈΡ‚ΠΈ виконання ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ (Π°Π±ΠΎ Π΄Π°Ρ‚ΠΈ користувачСві ΠΌΠΎΠΆΠ»ΠΈΠ²Ρ–ΡΡ‚ΡŒ Π²ΠΈΠΏΡ€Π°Π²ΠΈΡ‚ΠΈ Π΄Π°Π½Ρ– для ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ):

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

Π’Ρ€Π°Ρ…ΡƒΠΉΡ‚Π΅, Ρ‰ΠΎ Π½Π°Π΄Π°Π»Ρ– клас APIClient Π±ΡƒΠ΄Π΅ пСрСвіряти ΠΏΡ€ΠΈ ΠΊΠΎΠΆΠ½ΠΎΠΌΡƒ API Π²ΠΈΠΊΠ»ΠΈΠΊΡƒ (ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ api_call ΠΈ api_query, ΠŸΡ€ΠΎ Π½ΠΈΡ… ΠΌΠΎΠ²Π° ΠΏΡ–Π΄Π΅ Ρ‚Ρ€ΠΎΡ…ΠΈ Π΄Π°Π»Ρ–) sha1 fingerprint сСртифіката Π½Π° API сСрвСрі. А ось якщо ΠΏΡ–Π΄ час ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΊΠΈ sha1 fingerprint сСртифіката API сСрвСра Π±ΡƒΠ΄Π΅ виявлСно ΠΏΠΎΠΌΠΈΠ»ΠΊΡƒ (сСртифікат Π½Π΅Π²Ρ–Π΄ΠΎΠΌΠΈΠΉ Π°Π±ΠΎ Π±ΡƒΠ² Π·ΠΌΡ–Π½Π΅Π½ΠΈΠΉ), ΠΌΠ΅Ρ‚ΠΎΠ΄ check_fingerprint Π½Π°Π΄Π°ΡΡ‚ΡŒ ΠΌΠΎΠΆΠ»ΠΈΠ²Ρ–ΡΡ‚ΡŒ Π΄ΠΎΠ΄Π°Ρ‚ΠΈ/Π·ΠΌΡ–Π½ΠΈΡ‚ΠΈ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ ΠΏΡ€ΠΎ нього Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ–ΠΉ ΠΌΠ°ΡˆΠΈΠ½Ρ– Π² Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎΠΌΡƒ Ρ€Π΅ΠΆΠΈΠΌΡ–. Π”Π°Π½Ρƒ ΠΏΠ΅Ρ€Π΅Π²Ρ–Ρ€ΠΊΡƒ ΠΌΠΎΠΆΠ½Π° Π²Ρ–Π΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΠΈ зовсім (Π°Π»Π΅ Ρ‚Π°ΠΊΠ΅ ΠΌΠΎΠΆΠ½Π° Ρ€Π΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡƒΠ²Π°Ρ‚ΠΈ лишС Ρƒ Ρ€Π°Π·Ρ– запуску скриптів Π½Π° самому API сСрвСрі, ΠΏΡ€ΠΈ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ– Π΄ΠΎ 127.0.0.1), Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‡ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ APIClientArgs β€” unsafe_auto_accept (Π”ΠΈΠ². Π΄ΠΎΠΊΠ»Π°Π΄Π½Ρ–ΡˆΠ΅ для APIClientArgs Ρ€Π°Π½Ρ–ΡˆΠ΅ Π² Β«Π’ΠΈΠ·Π½Π°Ρ‡Π°Ρ”ΠΌΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΡΒ»).

client_args = APIClientArgs(unsafe_auto_accept=True)

Login Π½Π° сСрвСр API

Π£ APIClient Ρ” Ρ†Ρ–Π»ΠΈΡ… 3 ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Π»ΠΎΠ³Ρ–Π½Ρƒ Π½Π° API сСрвСр, Ρ– ΠΊΠΎΠΆΠ΅Π½ Ρ–Π· Π½ΠΈΡ… Ρ€ΠΎΠ·ΡƒΠΌΡ–Ρ” значСння SID(session-id), якС використовує Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π² ΠΊΠΎΠΆΠ½ΠΎΠΌΡƒ наступному API Π²ΠΈΠΊΠ»ΠΈΠΊΡƒ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ (Ρ–ΠΌ'я Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΡƒ Ρ†ΡŒΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° β€” X-chkp-sid), Ρ‚Π°ΠΊ Ρ‰ΠΎ Π½Π΅ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²ΠΎ обробляти Ρ†Π΅ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

ΠœΠ΅Ρ‚ΠΎΠ΄ login

Π’Π°Ρ€Ρ–Π°Π½Ρ‚ Π· використанням Π»ΠΎΠ³Ρ–Π½Ρƒ Ρ‚Π° пароля (Ρƒ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ– Ρ–ΠΌ'я користувача admin Ρ‚Π° ΠΏΠ°Ρ€ΠΎΠ»ΡŒ 1q2w3e ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Ρ– як ΠΏΠΎΠ·ΠΈΡ†Ρ–ΠΉΠ½Ρ– Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ):

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

Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ– login доступні Ρ‚Π°ΠΊΠΎΠΆ Π΄ΠΎΠ΄Π°Ρ‚ΠΊΠΎΠ²Ρ– ΠΎΠΏΡ†Ρ–ΠΎΠ½Π°Π»ΡŒΠ½Ρ– ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, Π½Π°Π²ΠΎΠ΄ΠΆΡƒ Ρ—Ρ… Ρ–ΠΌΠ΅Π½Π° Ρ‚Π° значСння Π·Π° промовчанням:

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

ΠœΠ΅Ρ‚ΠΎΠ΄ login_with_api_key

Π’Π°Ρ€Ρ–Π°Π½Ρ‚ Ρ–Π· використанням api ΠΊΠ»ΡŽΡ‡Π° (ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΡƒΡ”Ρ‚ΡŒΡΡ ΠΏΠΎΡ‡ΠΈΠ½Π°ΡŽΡ‡ΠΈ Π· вСрсії ΠΌΠ΅Π½Π΅Π΄ΠΆΠΌΠ΅Π½Ρ‚Ρƒ R80.40/Management API v1.6, "3TsbPJ8ZKjaJGvFyoFqHFA==" Ρ†Π΅ значСння ΠΊΠ»ΡŽΡ‡Π° API для ΠΎΠ΄Π½ΠΎΠ³ΠΎ користувача Π½Π° сСрвСрі управління Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΎΠΌ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†Ρ–Ρ— API key):

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

Π£ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ– login_with_api_key доступні Ρ‚Π°ΠΊΡ– ΠΆ ΠΎΠΏΡ†Ρ–ΠΎΠ½Π°Π»ΡŒΠ½Ρ– ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ, як Ρ– Π² ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ– Π›ΠΎΠ³Ρ–Π½.

ΠœΠ΅Ρ‚ΠΎΠ΄ login_as_root

Π’Π°Ρ€Ρ–Π°Π½Ρ‚ login'Π° Π½Π° Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρƒ ΠΌΠ°ΡˆΠΈΠ½Ρƒ Π· сСрвСром API:

     login = client.login_as_root()

Для Π΄Π°Π½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρƒ доступні лишС Π΄Π²Π° ΠΎΠΏΡ†Ρ–ΠΎΠ½Π°Π»ΡŒΠ½Ρ– ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΈ:

domain=None, payload=None

Π† Π½Π°Ρ€Π΅ΡˆΡ‚Ρ– самі API Π²ΠΈΠΊΠ»ΠΈΠΊΠΈ

Π£ нас Ρ” Π΄Π²Π° Π²Π°Ρ€Ρ–Π°Π½Ρ‚ΠΈ Ρ€ΠΎΠ±ΠΈΡ‚ΠΈ API Π²ΠΈΠΊΠ»ΠΈΠΊΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ api_call ΠΈ api_query. Π”Π°Π²Π°ΠΉΡ‚Π΅ розбСрСмося, Π² Ρ‡ΠΎΠΌΡƒ ΠΌΡ–ΠΆ Π½ΠΈΠΌΠΈ різниця.

api_call

Π¦Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ ΠΌΠΎΠΆΠ½Π° застосувати для Π±ΡƒΠ΄ΡŒ-яких Π²ΠΈΠΊΠ»ΠΈΠΊΡ–Π². Нам ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΠΈ ΠΎΡΡ‚Π°Π½Π½ΡŽ частину для api Π΄Π·Π²Ρ–Π½ΠΊΠ° Ρ‚Π° payload Π² Ρ‚Ρ–Π»Ρ– Π·Π°ΠΏΠΈΡ‚Ρƒ ΠΏΡ€ΠΈ нСобхідності. Π―ΠΊΡ‰ΠΎ ΠΏΠ»Π°Ρ‚Π° пороТня, Ρ‚ΠΎ Ρ—Ρ— ΠΌΠΎΠΆΠ½Π° Π½Π΅ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΠΈ зовсім:

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

Висновок для Ρ†ΡŒΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡ‚Ρƒ ΠΏΡ–Π΄ ΠΊΠ°Ρ‚ΠΎΠΌ:

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

Висновок для Ρ†ΡŒΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡ‚Ρƒ ΠΏΡ–Π΄ ΠΊΠ°Ρ‚ΠΎΠΌ:

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

Π’Ρ–Π΄Ρ€Π°Π·Ρƒ Π·Π°Π·Π½Π°Ρ‡Ρƒ, Ρ‰ΠΎ Π΄Π°Π½ΠΈΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ Π·Π°ΡΡ‚ΠΎΡΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ Ρ‚Ρ–Π»ΡŒΠΊΠΈ для Π²ΠΈΠΊΠ»ΠΈΠΊΡ–Π², вивСдСння яких ΠΏΠ΅Ρ€Π΅Π΄Π±Π°Ρ‡Π°Ρ” offset (зсув). Π’Π°ΠΊΠΈΠΉ висновок Π²Ρ–Π΄Π±ΡƒΠ²Π°Ρ”Ρ‚ΡŒΡΡ Π² Ρ‚ΠΎΠΌΡƒ Π²ΠΈΠΏΠ°Π΄ΠΊΡƒ, ΠΊΠΎΠ»ΠΈ Π² Π½ΡŒΠΎΠΌΡƒ ΠΌΡ–ΡΡ‚ΠΈΡ‚ΡŒΡΡ Π°Π±ΠΎ ΠΌΠΎΠΆΠ΅ містити Π²Π΅Π»ΠΈΠΊΡƒ ΠΊΡ–Π»ΡŒΠΊΡ–ΡΡ‚ΡŒ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ—. Наприклад, Ρ†Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ Π·Π°ΠΏΠΈΡ‚ списку всіх створСних ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Ρ‚ΠΈΠΏΡƒ хост Π½Π° сСрвСрі кСрування. Для Ρ‚Π°ΠΊΠΈΡ… Π·Π°ΠΏΠΈΡ‚Ρ–Π² API ΠΏΠΎΠ²Π΅Ρ€Ρ‚Π°Ρ” список Ρ–Π· 50 ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Π·Π° промовчанням (ΠΌΠΎΠΆΠ½Π° Π·Π±Ρ–Π»ΡŒΡˆΠΈΡ‚ΠΈ Π»Ρ–ΠΌΡ–Ρ‚ Π΄ΠΎ 500 ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Ρƒ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Ρ–). Π† для Ρ‚ΠΎΠ³ΠΎ, Ρ‰ΠΎΠ± Π½Π΅ смикати Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ ΠΏΠΎ ΠΊΡ–Π»ΡŒΠΊΠ° Ρ€Π°Π·Ρ–Π², Π·ΠΌΡ–Π½ΡŽΡŽΡ‡ΠΈ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ offset Π² Π·Π°ΠΏΠΈΡ‚Ρ– API, Ρ” ΠΌΠ΅Ρ‚ΠΎΠ΄ api_query, який Ρ†ΡŽ Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ Ρ€ΠΎΠ±ΠΈΡ‚ΡŒ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ. ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ΠΈ Π²ΠΈΠΊΠ»ΠΈΠΊΡ–Π², Π΄Π΅ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π΅Π½ Ρ†Π΅ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄: show-sessions, show-hosts, show-networks, show-wildcards, show-groups, show-address-ranges, show-simple-gateways, show-simple-clusters, show-access-roles, show-trusted-clients, show-packages. По Ρ„Π°ΠΊΡ‚Ρƒ, Π² Ρ–ΠΌΠ΅Π½Ρ– Ρ†ΠΈΡ… API Π²ΠΈΠΊΠ»ΠΈΠΊΡ–Π² ΠΌΠΈ Π±Π°Ρ‡ΠΈΠΌΠΎ слова Ρƒ ΠΌΠ½ΠΎΠΆΠΈΠ½Ρ–, Ρ‚Π°ΠΊ Ρ‰ΠΎ Ρ†Ρ– Π²ΠΈΠΊΠ»ΠΈΠΊΠΈ Π±ΡƒΠ΄Π΅ ΠΏΡ€ΠΎΡΡ‚Ρ–ΡˆΠ΅ обробляти Ρ‡Π΅Ρ€Π΅Π· api_query

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

Висновок для Ρ†ΡŒΠΎΠ³ΠΎ Π·Π°ΠΏΠΈΡ‚Ρƒ ΠΏΡ–Π΄ ΠΊΠ°Ρ‚ΠΎΠΌ:

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 Π΄Π·Π²Ρ–Π½ΠΊΡ–Π²

ΠŸΡ–ΡΠ»Ρ Ρ†ΡŒΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½Π° використовувати Π·ΠΌΡ–Π½Π½Ρ– Ρ‚Π° ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ класу APIResponse(як усСрСдині ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π° контСксту, Ρ– Π·ΠΎΠ²Π½Ρ–). Π£ класу APIResponse Π·ΡƒΠΌΠΎΠ²Π»Π΅Π½ΠΎ 4 ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ Ρ‚Π° 5 Π·ΠΌΡ–Π½Π½ΠΈΡ…, Π½Π° Π½Π°ΠΉΠ²Π°ΠΆΠ»ΠΈΠ²Ρ–ΡˆΠΈΡ… ΠΌΠΈ зупинимося Π΄ΠΎΠΊΠ»Π°Π΄Π½Ρ–ΡˆΠ΅.

Π‘ΠΏΡ€ΠΎΡ‰ΡƒΡ”ΠΌΠΎ Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ Π· Check Point API Π·Π° допомогою Python SDK

успіх

Для ΠΏΠΎΡ‡Π°Ρ‚ΠΊΡƒ Π±ΡƒΠ»ΠΎ Π± Π½Π΅ΠΏΠΎΠ³Π°Π½ΠΎ пСрСконатися, Ρ‰ΠΎ API Π²ΠΈΠΊΠ»ΠΈΠΊ ΠΏΡ€ΠΎΠΉΡˆΠΎΠ² ΡƒΡΠΏΡ–ΡˆΠ½ΠΎ Ρ– ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΠ² Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚. Для Ρ†ΡŒΠΎΠ³ΠΎ Ρ” ΠΌΠ΅Ρ‚ΠΎΠ΄ успіх:

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

ΠŸΠΎΠ²Π΅Ρ€Ρ‚Π°Ρ” True якщо API Π²ΠΈΠΊΠ»ΠΈΠΊ ΠΏΡ€ΠΎΠΉΡˆΠΎΠ² ΡƒΡΠΏΡ–ΡˆΠ½ΠΎ (Код Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Ρ– - 200) Ρ– False якщо Π½Π΅ ΡƒΡΠΏΡ–ΡˆΠ½ΠΎ (Π±ΡƒΠ΄ΡŒ-який Ρ–Π½ΡˆΠΈΠΉ ΠΊΠΎΠ΄ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Ρ–). Π—Ρ€ΡƒΡ‡Π½ΠΎ використовувати Π²Ρ–Π΄Ρ€Π°Π·Ρƒ після API Π΄Π·Π²Ρ–Π½ΠΊΠ°, Ρ‰ΠΎΠ± Π² залСТності Π²Ρ–Π΄ ΠΊΠΎΠ΄Ρƒ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Ρ– вивСсти Ρ€Ρ–Π·Π½Ρƒ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–ΡŽ.

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

statuscode

ΠŸΠΎΠ²Π΅Ρ€Ρ‚Π°Ρ” ΠΊΠΎΠ΄ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Ρ– після виконання API Π΄Π·Π²Ρ–Π½ΠΊΠ°.

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

ΠœΠΎΠΆΠ»ΠΈΠ²Ρ– ΠΊΠΎΠ΄ΠΈ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π΅ΠΉ: 200,400,401,403,404,409,500,501.

set_success_status

ΠŸΡ€ΠΈ Ρ†ΡŒΠΎΠΌΡƒ ΠΌΠΎΠΆΠ»ΠΈΠ²ΠΎ Π½Π΅ΠΎΠ±Ρ…Ρ–Π΄Π½Ρ–ΡΡ‚ΡŒ Π·ΠΌΡ–Π½ΠΈΡ‚ΠΈ значСння статусу success. Π’Π΅Ρ…Π½Ρ–Ρ‡Π½ΠΎ, Ρ‚ΡƒΠ΄ΠΈ ΠΌΠΎΠΆΠ½Π° помістити Π±ΡƒΠ΄ΡŒ-Ρ‰ΠΎ, Π½Π°Π²Ρ–Ρ‚ΡŒ Π·Π²ΠΈΡ‡Π°ΠΉΠ½ΠΈΠΉ рядок. АлС Ρ€Π΅Π°Π»ΡŒΠ½ΠΈΠΌ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ΠΎΠΌ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ скидання Π΄Π°Π½ΠΎΠ³ΠΎ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° False Π·Π° ΠΏΠ΅Π²Π½ΠΈΡ… супутніх ΡƒΠΌΠΎΠ²Π°Ρ…. НиТчС Π·Π²Π΅Ρ€Π½Ρ–Ρ‚ΡŒ ΡƒΠ²Π°Π³Ρƒ Π½Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄, ΠΊΠΎΠ»ΠΈ Ρ” завдання, Ρ‰ΠΎ Π²ΠΈΠΊΠΎΠ½ΡƒΡŽΡ‚ΡŒΡΡ Π½Π° сСрвСрі управління, Π°Π»Π΅ ΠΌΠΈ Π²Π²Π°ΠΆΠ°Ρ‚ΠΈΠΌΠ΅ΠΌΠΎ Ρ†Π΅ΠΉ Π·Π°ΠΏΠΈΡ‚ Π½Π΅Π²Π΄Π°Π»ΠΈΠΌ (виставимо Π·ΠΌΡ–Π½Π½Ρƒ success Π² Помилковий, Π½Π΅Π·Π²Π°ΠΆΠ°ΡŽΡ‡ΠΈ Π½Π° Ρ‚Π΅, Ρ‰ΠΎ API Π²ΠΈΠΊΠ»ΠΈΠΊ Π±ΡƒΠ² ΡƒΡΠΏΡ–ΡˆΠ½ΠΈΠΌ Ρ– ΠΏΠΎΠ²Π΅Ρ€Π½ΡƒΠ² ΠΊΠΎΠ΄ 200).

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

response()

ΠœΠ΅Ρ‚ΠΎΠ΄ response дозволяє подивитися словник Ρ–Π· ΠΊΠΎΠ΄ΠΎΠΌ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Ρ–(status_code) Ρ– Π· Ρ‚Ρ–Π»ΠΎΠΌ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Ρ–(body).

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

Π΄Π°Π½Ρ–

Дозволяє ΠΏΠΎΠ±Π°Ρ‡ΠΈΡ‚ΠΈ лишС Ρ‚Ρ–Π»ΠΎ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Ρ– (body) Π±Π΅Π· Π·Π°ΠΉΠ²ΠΎΡ— Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ—.

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

повідомлСння ΠΏΡ€ΠΎ ΠΏΠΎΠΌΠΈΠ»ΠΊΡƒ

Ця інформація доступна лишС Ρ‚ΠΎΠ΄Ρ–, ΠΊΠΎΠ»ΠΈ ΠΏΡ–Π΄ час ΠΎΠ±Ρ€ΠΎΠ±ΠΊΠΈ API Π·Π°ΠΏΠΈΡ‚Ρƒ Π²ΠΈΠ½ΠΈΠΊΠ»Π° ΠΏΠΎΠΌΠΈΠ»ΠΊΠ° (ΠΊΠΎΠ΄ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Ρ– НЕ 200). ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ вивСдСння

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

ΠšΠΎΡ€ΠΈΡΠ½Ρ– ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ΠΈ

НиТчС Π½Π°Π²Π΅Π΄Π΅Π½ΠΎ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ΠΈ, Π² яких Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡŽΡ‚ΡŒΡΡ API Π²ΠΈΠΊΠ»ΠΈΠΊΠΈ, які Π±ΡƒΠ»ΠΈ Π΄ΠΎΠ΄Π°Π½Ρ– Π΄ΠΎ вСрсії Management API 1.6.

Для ΠΏΠΎΡ‡Π°Ρ‚ΠΊΡƒ розглянСмо Ρ€ΠΎΠ±ΠΎΡ‚Ρƒ Π΄Π·Π²Ρ–Π½ΠΊΡ–Π² add-host ΠΈ add-address-range. ΠŸΡ€ΠΈΠΏΡƒΡΡ‚ΠΈΠΌΠΎ, Π½Π°ΠΌ ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ створити як ΠΎΠ±'Ρ”ΠΊΡ‚ Ρ‚ΠΈΠΏΡƒ хост всі ip адрСси ΠΏΡ–Π΄ΠΌΠ΅Ρ€Π΅ΠΆΡ– 192.168.0.0/24, останній ΠΎΠΊΡ‚Π΅Ρ‚ яких Π΄ΠΎΡ€Ρ–Π²Π½ΡŽΡ” 5, Π° всі Ρ–Π½ΡˆΡ– ip адрСси записати Π² якості ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Ρ‚ΠΈΠΏΡƒ Π΄Ρ–Π°ΠΏΠ°Π·ΠΎΠ½ адрСс. ΠŸΡ€ΠΈ Ρ†ΡŒΠΎΠΌΡƒ адрСсу ΠΏΡ–Π΄ΠΌΠ΅Ρ€Π΅ΠΆΡ– Ρ‚Π° ΡˆΠΈΡ€ΠΎΠΊΠΎΠΌΠΎΠ²Π½Ρƒ адрСсу Π²ΠΈΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΠΈ.

ΠžΡ‚ΠΆΠ΅, Π½ΠΈΠΆΡ‡Π΅ прСдставлСний скрипт Ρƒ якому Π²ΠΈΡ€Ρ–ΡˆΡƒΡ”Ρ‚ΡŒΡΡ Ρ†Π΅ завдання Ρ– ΡΡ‚Π²ΠΎΡ€ΡŽΡŽΡ‚ΡŒΡΡ 50 ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Ρ‚ΠΈΠΏΡƒ хост Ρ– 51 ΠΎΠ±'Ρ”ΠΊΡ‚ Ρ‚ΠΈΠΏΡƒ Π΄Ρ–Π°ΠΏΠ°Π·ΠΎΠ½ адрСс. На Π²ΠΈΡ€Ρ–ΡˆΠ΅Π½Π½Ρ завдання ΠΏΠΎΡ‚Ρ€Ρ–Π±Π½ΠΎ 101 API Π²ΠΈΠΊΠ»ΠΈΠΊ (Π½Π΅ Ρ€Π°Ρ…ΡƒΡŽΡ‡ΠΈ Ρ„Ρ–Π½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²ΠΈΠΊΠ»ΠΈΠΊΡƒ publish). Π’Π°ΠΊΠΎΠΆ Π·Π° допомогою модуля timeit ΠΌΠΈ ΠΏΡ–Π΄Ρ€Π°Ρ…ΠΎΠ²ΡƒΡ”ΠΌΠΎ час виконання скрипту Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρƒ ΠΏΡƒΠ±Π»Ρ–ΠΊΠ°Ρ†Ρ–Ρ— Π·ΠΌΡ–Π½.

Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π· використанням add-host Ρ– add-address-range

import timeit
from cpapi import APIClient, APIClientArgs

start = timeit.default_timer()

first_ip = 1
last_ip = 4

client_args = APIClientArgs(server="192.168.47.240")

with APIClient(client_args) as client: 
     login = client.login_with_api_key('3TsbPJ8ZKjaJGvFyoFqHFA==')
     for ip in range(5,255,5):
         add_host = client.api_call("add-host", {"name" : f"h_192.168.0.{ip}", "ip-address": f'192.168.0.{ip}'})
     while last_ip < 255:
         add_range = client.api_call("add-address-range", {"name": f"r_192.168.0.{first_ip}-{last_ip}", "ip-address-first": f"192.168.0.{first_ip}", "ip-address-last": f"192.168.0.{last_ip}"})
         first_ip+=5
         last_ip+=5
     stop = timeit.default_timer() 
     publish = client.api_call("publish")
     
print(f'Time to execute batch request: {stop - start} seconds')

Π£ ΠΌΠΎΡ”ΠΌΡƒ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ сСрСдовищі виконання Ρ†ΡŒΠΎΠ³ΠΎ скрипта ΠΉΠ΄Π΅ Π²Ρ–Π΄ 30 Π΄ΠΎ 50 сСкунд Π·Π°Π»Π΅ΠΆΠ½ΠΎ Π²Ρ–Π΄ навантаТСння Π½Π° сСрвСр управління.

А Ρ‚Π΅ΠΏΠ΅Ρ€ подивимося як Π²ΠΈΡ€Ρ–ΡˆΠΈΡ‚ΠΈ Ρ†Π΅ завдання Π·Π° допомогою API Π²ΠΈΠΊΠ»ΠΈΠΊΡƒ add-objects-batch, ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΠΊΠ° якого Π΄ΠΎΠ΄Π°Π½Π° Π΄ΠΎ вСрсії API 1.6. Π”Π°Π½ΠΈΠΉ Π΄Π·Π²Ρ–Π½ΠΎΠΊ дозволяє Π·Π° ΠΎΠ΄ΠΈΠ½ API Π·Π°ΠΏΠΈΡ‚ створити Π²Ρ–Π΄Ρ€Π°Π·Ρƒ Π±Π΅Π·Π»Ρ–Ρ‡ ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π². Π¦Π΅ ΠΌΠΎΠΆΡƒΡ‚ΡŒ Π±ΡƒΡ‚ΠΈ ΠΎΠ±'Ρ”ΠΊΡ‚ΠΈ Ρ€Ρ–Π·Π½ΠΈΡ… Ρ‚ΠΈΠΏΡ–Π² (Π½Π°ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ хости, ΠΏΡ–Π΄ΠΌΠ΅Ρ€Π΅ΠΆΡ– Ρ‚Π° Π΄Ρ–Π°ΠΏΠ°Π·ΠΎΠ½ΠΈ адрСс). Π’Π°ΠΊΠΈΠΌ Ρ‡ΠΈΠ½ΠΎΠΌ, наша Π·Π°Π΄Π°Ρ‡Π° ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ Π²ΠΈΡ€Ρ–ΡˆΠ΅Π½Π° Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ API Π²ΠΈΠΊΠ»ΠΈΠΊΡƒ.

Π‘ΠΊΡ€ΠΈΠΏΡ‚ Π· використанням 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')

А Π½Π° виконання Ρ†ΡŒΠΎΠ³ΠΎ скрипту Π² ΠΌΠΎΡ”ΠΌΡƒ Π»Π°Π±ΠΎΡ€Π°Ρ‚ΠΎΡ€Π½ΠΎΠΌΡƒ сСрСдовищі ΠΉΠ΄Π΅ Π²Ρ–Π΄ 3 Π΄ΠΎ 7 сСкунд Π·Π°Π»Π΅ΠΆΠ½ΠΎ Π²Ρ–Π΄ навантаТСння Π½Π° сСрвСр кСрування. Π’ΠΎΠ±Ρ‚ΠΎ, Π² ΡΠ΅Ρ€Π΅Π΄Π½ΡŒΠΎΠΌΡƒ, Π½Π° 101 ΠΎΠ±'Ρ”ΠΊΡ‚Ρ– API Π²ΠΈΠΊΠ»ΠΈΠΊ Ρ‚ΠΈΠΏΡƒ batch, Π²Ρ–Π΄ΠΏΡ€Π°Ρ†ΡŒΠΎΠ²ΡƒΡ” Ρƒ 10 Ρ€Π°Π·Ρ–Π² швидшС. На Π±Ρ–Π»ΡŒΡˆΡ–ΠΉ ΠΊΡ–Π»ΡŒΠΊΠΎΡΡ‚Ρ– ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² різниця Π±ΡƒΠ΄Π΅ Ρ‰Π΅ Π±Ρ–Π»ΡŒΡˆ Π²Ρ€Π°ΠΆΠ°ΡŽΡ‡ΠΎΡŽ.

Π’Π΅ΠΏΠ΅Ρ€ Π΄Π°Π²Π°ΠΉΡ‚Π΅ подивимося як ΠΏΡ€Π°Ρ†ΡŽΠ²Π°Ρ‚ΠΈ Π· set-objects-batch. Π—Π° допомогою Ρ†ΡŒΠΎΠ³ΠΎ API Π²ΠΈΠΊΠ»ΠΈΠΊΡƒ ΠΌΠΈ ΠΌΠΎΠΆΠ΅ΠΌΠΎ масово Π·ΠΌΡ–Π½ΠΈΡ‚ΠΈ Π±ΡƒΠ΄ΡŒ-який ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€. Π”Π°Π²Π°ΠΉΡ‚Π΅ Π½Π°Π»Π°ΡˆΡ‚ΡƒΡ”ΠΌΠΎ ΠΏΠ΅Ρ€ΡˆΡ–ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ– адрСс Π· ΠΌΠΈΠ½ΡƒΠ»ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρƒ (Π΄ΠΎ .124 хоста, ΠΏΡ€ΠΈΡ‡ΠΎΠΌΡƒ Ρ– Π΄Ρ–Π°ΠΏΠ°Π·ΠΎΠ½Π°ΠΌ Ρ‚Π΅ΠΆ) ΠΊΠΎΠ»Ρ–Ρ€ sienna, Π° Π΄Ρ€ΡƒΠ³Ρ–ΠΉ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ– адрСс ΠΏΡ€ΠΈΠ·Π½Π°Ρ‡ΠΈΠΌΠΎ ΠΊΠΎΠ»Ρ–Ρ€ khaki.

Π—ΠΌΡ–Π½Π° ΠΊΠΎΠ»ΡŒΠΎΡ€Ρƒ ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π², створСних Ρƒ ΠΏΠΎΠΏΠ΅Ρ€Π΅Π΄Π½ΡŒΠΎΠΌΡƒ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Ρ–

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

Π’ΠΈΠ΄Π°Π»ΠΈΡ‚ΠΈ Π±Π°Π³Π°Ρ‚ΠΎ ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Π² ΠΎΠ΄Π½ΠΎΠΌΡƒ API Π²ΠΈΠΊΠ»ΠΈΠΊΡƒ ΠΌΠΎΠΆΠ½Π° Π·Π° допомогою delete-objects-batch. А Ρ‚Π΅ΠΏΠ΅Ρ€ подивимося Π½Π° ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ ΠΊΠΎΠ΄Ρƒ, який видаляє всі хости, створСні Ρ€Π°Π½Ρ–ΡˆΠ΅ Ρ‡Π΅Ρ€Π΅Π· add-objects-batch.

ВидалСння ΠΎΠ±'Ρ”ΠΊΡ‚Ρ–Π² Π·Π° допомогою 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)

Всі Ρ„ΡƒΠ½ΠΊΡ†Ρ–Ρ—, які Π·'ΡΠ²Π»ΡΡŽΡ‚ΡŒΡΡ Π² Π½ΠΎΠ²ΠΈΡ… Ρ€Π΅Π»Ρ–Π·Π°Ρ… Check Point, Π²Ρ–Π΄Ρ€Π°Π·Ρƒ ΠΆ Π·Π½Π°Ρ…ΠΎΠ΄ΡΡ‚ΡŒ Ρ– API Π²ΠΈΠΊΠ»ΠΈΠΊΠΈ. Π’Π°ΠΊ, Ρƒ R80.40 Π·'явилися Ρ‚Π°ΠΊΡ– "Ρ„Ρ–Ρ‡Ρ–" як Revert to revision Ρ‚Π° Smart Task, Ρ– для Π½ΠΈΡ… ΠΎΠ΄Ρ€Π°Π·Ρƒ ΠΆ ΠΏΡ–Π΄Π³ΠΎΡ‚ΡƒΠ²Π°Π»ΠΈ Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π½Ρ– API Π²ΠΈΠΊΠ»ΠΈΠΊΠΈ. Π‘Ρ–Π»ΡŒΡˆΠ΅ Ρ‚ΠΎΠ³ΠΎ, вСсь Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΠΎΠ½Π°Π» ΠΏΡ–Π΄ час ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Ρƒ Π· Legacy консолСй Ρƒ Ρ€Π΅ΠΆΠΈΠΌ Unified Policy Ρ‚Π°ΠΊΠΎΠΆ обростає ΠΏΡ–Π΄Ρ‚Ρ€ΠΈΠΌΠΊΠΎΡŽ API. Наприклад, Π΄ΠΎΠ²Π³ΠΎΠΎΡ‡Ρ–ΠΊΡƒΠ²Π°Π½ΠΈΠΌ оновлСнням Ρƒ вСрсії ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ½ΠΎΠ³ΠΎ забСзпСчСння R80.40 став ΠΏΠ΅Ρ€Π΅Ρ—Π·Π΄ ΠΏΠΎΠ»Ρ–Ρ‚ΠΈΠΊΠΈ HTTPS Inspection Π· Legacy Ρ€Π΅ΠΆΠΈΠΌΡƒ Π² Ρ€Π΅ΠΆΠΈΠΌ Unified Policy, Ρ– Π΄Π°Π½ΠΈΠΉ Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΠΎΠ½Π°Π» Π²Ρ–Π΄Ρ€Π°Π·Ρƒ ΠΆ ΠΎΡ‚Ρ€ΠΈΠΌΠ°Π² API Π²ΠΈΠΊΠ»ΠΈΠΊΠΈ. Ось ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ ΠΊΠΎΠ΄Ρƒ, який Π΄ΠΎΠ΄Π°Ρ” Π½Π° Π²Π΅Ρ€Ρ…Π½ΡŽ ΠΏΠΎΠ·ΠΈΡ†Ρ–ΡŽ HTTPS Inspection policy ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, якС Π²ΠΈΠΊΠ»ΡŽΡ‡Π°Ρ” Π· інспСкції 3 ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€Ρ–Ρ— (Π—Π΄ΠΎΡ€ΠΎΠ²'я, Ѐінанси, Π”Π΅Ρ€ΠΆΠ°Π²Π½Ρ– послуги), які Π·Π°Π±ΠΎΡ€ΠΎΠ½Π΅Π½ΠΎ пСрСвіряти Π²Ρ–Π΄ΠΏΠΎΠ²Ρ–Π΄Π½ΠΎ Π΄ΠΎ законодавства Ρƒ Π½ΠΈΠ·Ρ†Ρ– ΠΊΡ€Π°Ρ—Π½.

Π”ΠΎΠ΄Π°Ρ‚ΠΈ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ Π΄ΠΎ ΠΏΠΎΠ»Ρ–Ρ‚ΠΈΠΊΠΈ HTTPS Inspection

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

Запуск Python скриптів Π½Π° сСрвСрі кСрування Check Point

ВсС Π² Ρ‚ΠΎΠΌΡƒ ΠΆ README.md ΠΌΡ–ΡΡ‚ΠΈΡ‚ΡŒΡΡ інформація як запускати скрипти Π½Π° Python прямо Π· сСрвСра кСрування. Π¦Π΅ ΠΌΠΎΠΆΠ΅ Π±ΡƒΡ‚ΠΈ Π·Ρ€ΡƒΡ‡Π½ΠΎ, ΠΊΠΎΠ»ΠΈ Ρƒ вас Π½Π΅ΠΌΠ°Ρ” моТливості ΠΏΡ–Π΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΠΈΡΡ Π΄ΠΎ сСрвСра API Π· Ρ–Π½ΡˆΠΎΡ— машини. Π― записав ΡˆΠ΅ΡΡ‚ΠΈΡ…Π²ΠΈΠ»ΠΈΠ½Π½Π΅ Π²Ρ–Π΄Π΅ΠΎ Π² якому Ρ€ΠΎΠ·Π³Π»ΡΠ΄Π°ΡŽ установку модуля cpapi Ρ‚Π° особливості запуску Python скриптів Π½Π° сСрвСрі кСрування. Π―ΠΊ ΠΏΡ€ΠΈΠΊΠ»Π°Π΄ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ”Ρ‚ΡŒΡΡ скрипт, який Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΡƒΡ” ΠΊΠΎΠ½Ρ„Ρ–Π³ΡƒΡ€Π°Ρ†Ρ–ΡŽ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΡˆΠ»ΡŽΠ·Ρƒ для Ρ‚Π°ΠΊΠΎΠ³ΠΎ завдання, як ΠΌΠ΅Ρ€Π΅ΠΆΠ½ΠΈΠΉ Π°ΡƒΠ΄ΠΈΡ‚ Security CheckUp. Π— особливостСй, Π· якими довСлося зіткнутися: Ρƒ вСрсії Python 2.7 Ρ‰Π΅ Π·'явилася функція Π²Ρ…Ρ–Π΄Ρ‚ΠΎΠΌΡƒ для ΠΎΠ±Ρ€ΠΎΠ±ΠΊΠΈ Ρ–Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†Ρ–Ρ—, яку Π²Π²ΠΎΠ΄ΠΈΡ‚ΡŒ користувач, Π²ΠΈΠΊΠΎΡ€ΠΈΡΡ‚ΠΎΠ²ΡƒΡ”Ρ‚ΡŒΡΡ функція raw_input. Π’ Ρ–Π½ΡˆΠΎΠΌΡƒ, ΠΊΠΎΠ΄ Ρ‚Π°ΠΊΠΈΠΉ ΠΆΠ΅ як для запуску Π· Ρ–Π½ΡˆΠΈΡ… машин, Ρ‚Ρ–Π»ΡŒΠΊΠΈ Π·Ρ€ΡƒΡ‡Π½Ρ–ΡˆΠ΅ використовувати Ρ„ΡƒΠ½ΠΊΡ†Ρ–ΡŽ login_as_root, Ρ‰ΠΎΠ± Π½Π΅ Π²ΠΊΠ°Π·ΡƒΠ²Π°Ρ‚ΠΈ свої власні username, ΠΏΠ°Ρ€ΠΎΠ»ΡŒ Ρ– IP адрСсу сСрвСра управління Ρ‰Π΅ Ρ€Π°Π·.

Π’Ρ–Π΄Ρ‚Π²ΠΎΡ€ΠΈΡ‚ΠΈ Π²Ρ–Π΄Π΅ΠΎ

Π‘ΠΊΡ€ΠΈΠΏΡ‚ для швидкого Π½Π°Π»Π°ΡˆΡ‚ΡƒΠ²Π°Π½Π½Ρ Security CheckUp

from __future__ import print_function
import getpass
import sys, os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from cpapi import APIClient, APIClientArgs

def main():
    with APIClient() as client:
       # if client.check_fingerprint() is False:
       #     print("Could not get the server's fingerprint - Check connectivity with the server.")
       #     exit(1)
        login_res = client.login_as_root()

        if login_res.success is False:
            print("Login failed:n{}".format(login_res.error_message))
            exit(1)

        gw_name = raw_input("Enter the gateway name:")
        gw_ip = raw_input("Enter the gateway IP address:")
        if sys.stdin.isatty():
            sic = getpass.getpass("Enter one-time password for the gateway(SIC): ")
        else:
            print("Attention! Your password will be shown on the screen!")
            sic = raw_input("Enter one-time password for the gateway(SIC): ")
        version = raw_input("Enter the gateway version(like RXX.YY):")
        add_gw = client.api_call("add-simple-gateway", {'name' : gw_name, 'ipv4-address' : gw_ip, 'one-time-password' : sic, 'version': version.capitalize(), 'application-control' : 'true', 'url-filtering' : 'true', 'ips' : 'true', 'anti-bot' : 'true', 'anti-virus' : 'true', 'threat-emulation' : 'true'})
        if add_gw.success and add_gw.data['sic-state'] != "communicating":
            print("Secure connection with the gateway hasn't established!")
            exit(1)
        elif add_gw.success:
            print("The gateway was added successfully.")
            gw_uid = add_gw.data['uid']
            gw_name = add_gw.data['name']
        else:
            print("Failed to add the gateway - {}".format(add_gw.error_message))
            exit(1)

        change_policy = client.api_call("set-access-layer", {"name" : "Network", "applications-and-url-filtering": "true", "content-awareness": "true"})
        if change_policy.success:
            print("The policy has been changed successfully")
        else:
            print("Failed to change the policy- {}".format(change_policy.error_message))
        change_rule = client.api_call("set-access-rule", {"name" : "Cleanup rule", "layer" : "Network", "action": "Accept", "track": {"type": "Detailed Log", "accounting": "true"}})
        if change_rule.success:
            print("The cleanup rule has been changed successfully")
        else:
            print("Failed to change the cleanup rule- {}".format(change_rule.error_message))

        # publish the result
        publish_res = client.api_call("publish", {})
        if publish_res.success:
            print("The changes were published successfully.")
        else:
                print("Failed to publish the changes - {}".format(install_tp_policy.error_message))

        install_access_policy = client.api_call("install-policy", {"policy-package" : "Standard", "access" : 'true',  "threat-prevention" : 'false', "targets" : gw_uid})
        if install_access_policy.success:
            print("The access policy has been installed")
        else:
                print("Failed to install access policy - {}".format(install_tp_policy.error_message))

        install_tp_policy = client.api_call("install-policy", {"policy-package" : "Standard", "access" : 'false',  "threat-prevention" : 'true', "targets" : gw_uid})
        if install_tp_policy.success:
            print("The threat prevention policy has been installed")
        else:
            print("Failed to install threat prevention policy - {}".format(install_tp_policy.error_message))
        
        # add passwords and passphrases to dictionary
        with open('additional_pass.conf') as f:
            line_num = 0
            for line in f:
                line_num += 1
                add_password_dictionary = client.api_call("run-script", {"script-name" : "Add passwords and passphrases", "script" : "printf "{}" >> $FWDIR/conf/additional_pass.conf".format(line), "targets" : gw_name})
                if add_password_dictionary.success:
                    print("The password dictionary line {} was added successfully".format(line_num))
                else:
                    print("Failed to add the dictionary - {}".format(add_password_dictionary.error_message))

main()

ΠŸΡ€ΠΈΠΊΠ»Π°Π΄ Ρ„Π°ΠΉΠ»Ρƒ Π·Ρ– словником ΠΏΠ°Ρ€ΠΎΠ»Ρ–Π² additional_pass.conf
{
"passwords" : ["malware","malicious","infected","Infected"],
"phrases" : ["password","Password","Pass","pass","codigo","key","pwd","ΠΏΠ°Ρ€ΠΎΠ»ΡŒ","ΠŸΠ°Ρ€ΠΎΠ»ΡŒ","ΠšΠ»ΡŽΡ‡","ΠΊΠ»ΡŽΡ‡","ΡˆΠΈΡ„Ρ€","Π¨ΠΈΡ„Ρ€"]
}

Висновок

Ця стаття розглядає лишС основні моТливості Ρ€ΠΎΠ±ΠΎΡ‚ΠΈ Python SDK Ρ‚Π° модуля cpapi(як Π²ΠΈ ΠΌΠΎΠ³Π»ΠΈ здогадатися, Ρ†Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ синоніми), Ρ– Π²ΠΈΠ²Ρ‡ΠΈΠ²ΡˆΠΈ ΠΊΠΎΠ΄ Π² Π΄Π°Π½ΠΎΠΌΡƒ ΠΌΠΎΠ΄ΡƒΠ»Ρ– Π²ΠΈ Π²Ρ–Π΄ΠΊΡ€ΠΈΡ”Ρ‚Π΅ собі Ρ‰Π΅ Π±Ρ–Π»ΡŒΡˆΠ΅ здібностСй Ρƒ Ρ€ΠΎΠ±ΠΎΡ‚Ρ– Π· Π½ΠΈΠΌ. НС Π²ΠΈΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ, Ρ‰ΠΎ Ρƒ вас Π·'ΡΠ²ΠΈΡ‚ΡŒΡΡ баТання Π΄ΠΎΠΏΠΎΠ²Π½ΠΈΡ‚ΠΈ ΠΉΠΎΠ³ΠΎ своїми класами, функціями, ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌΠΈ Ρ‚Π° Π·ΠΌΡ–Π½Π½ΠΈΠΌΠΈ. Π’ΠΈ Π·Π°Π²ΠΆΠ΄ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ділитися своїми Π½Π°ΠΏΡ€Π°Ρ†ΡŽΠ²Π°Π½Π½ΡΠΌΠΈ Ρ‚Π° пСрСглядати Ρ–Π½ΡˆΡ– скрипти для Check Point Ρƒ Ρ€ΠΎΠ·Π΄Ρ–Π»Ρ– CodeHub Π² співтоваристві CheckMates, Ρ‰ΠΎ ΠΏΠΎΡ”Π΄Π½ΡƒΡ” Π² собі Ρ– Ρ€ΠΎΠ·Ρ€ΠΎΠ±Π½ΠΈΠΊΡ–Π² ΠΏΡ€ΠΎΠ΄ΡƒΠΊΡ‚Ρ–Π² Ρ‚Π° користувачів.

ΠŸΡ€ΠΈΡ”ΠΌΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄ΠΈΠ½Π³Ρƒ Ρ‚Π° Π΄ΡΠΊΡƒΡŽ, Ρ‰ΠΎ Π΄ΠΎΡ‡ΠΈΡ‚Π°Π»ΠΈ Π΄ΠΎ кінця!

Π”ΠΆΠ΅Ρ€Π΅Π»ΠΎ: habr.com

ΠšΡƒΠΏΠΈΡ‚ΠΈ Π½Π°Π΄Ρ–ΠΉΠ½ΠΈΠΉ хостинг для сайтів Ρ–Π· захистом Π²Ρ–Π΄ DDoS, VPS VDS сСрвСри πŸ”₯ ΠšΡƒΠΏΠΈΡ‚ΠΈ Π½Π°Π΄Ρ–ΠΉΠ½ΠΈΠΉ хостинг для сайтів Ρ–Π· захистом Π²Ρ–Π΄ DDoS, VPS VDS сСрвСри | ProHoster